本帖最后由 DNLINYJ 于 2025-8-27 16:23 编辑
HybridCLR C# 方法体解密 V1 —— 以23年的少女前线2:追放为例
本来标题我想写 HybridCLR 标准代码加固解密 的,但考虑到不确定散爆是否基于社区版的基础上作的修改,因而作罢
不过人家官网上确实有少前2的商业合作案例来着
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 又换加密算法了,而且比两年前少前二这个还恶心,遂想起这个半成品然后写出来发发 (ˉ﹃ˉ)
今年也高考完了,考得不好去了个双非的信安,悲 :(
|