-
-
[原创]HybridCLR C# 方法体解密记录 V1 —— 以23年的少女前线2:追放为例
-
-
[原创]HybridCLR C# 方法体解密记录 V1 —— 以23年的少女前线2:追放为例
HybridCLR C# 方法体解密记录 V1 —— 以23年的少女前线2:追放为例
本来标题我想写 HybridCLR 标准代码加固解密记录 的,但考虑到不确定ym是否基于社区版的基础上作的修改,因而作罢
1. 初探
在翻文件目录的时候,我发现了在 GF2_Exilium_Data\StreamingAssets\ClientRes_Windows\Codes 下有很多 bytes 文件,且文件名都是 Unity 在 Mono 模式编译下的编译产物

扔进 dnSpy 看一下,方法识别没有问题,但是方法体里面的 IL 指令全部被混淆,没办法解析

2. 研究
看了一下之前导出的 dump 文件,发现这玩意的解释运行是基于 HybridCLR 的

对于 HybridCLR 的源码解析,知乎有一篇文章写的不错 【划时代的代码热更新方案——hybridclr源码流程解析】
但对于我们调试苦逼人来说,还是官网的指点比较有性价比 () 【官网链接-HybridCLR源码结构及调试】
在官网中提到了,IL层指令集转换在 HybridCLR/transform/transform.cpp 的 HiTransform::Transform 函数,那么我们就去看看这个函数,多半解密也在这里面

3. 分析
打开 IDA,找到 HiTransform::Transform,修一修结构体,一点点对照社区源码 ,发现有一段代码是多出来的

这段代码很明显对 IL 字节码进行了异或解密操作,而解密的 Key 由 exceptionClausesSize、localVarCount 和 codeSize 计算得来

4. 解密
照着伪代码把 Key 计算过程和解密过程抄下来,就可以解密了


碎碎念
本文其实 2023 年年底就写的差不多了,只是因为懒没写完 :-

最近在逆蓝色原神(bushi)的时候,发现 HybridCLR 又换加密算法了,而且比两年前少前二这个还恶心,遂想起这个半成品然后写出来发发 (ˉ﹃ˉ)
今年也高考完了,考得不好去了个双非的信安,悲 :(
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!