本来标题我想写 HybridCLR 标准代码加固解密记录 的,但考虑到不确定ym是否基于社区版的基础上作的修改,因而作罢

不过人家官网上确实有少前2的商业合作案例来着

初探

在翻文件目录的时候,我发现了在 GF2_Exilium_Data\StreamingAssets\ClientRes_Windows\Codes 下有很多 bytes 文件,且文件名都是 Unity 在 Mono 模式编译下的编译产物

Alt text

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

Alt text

研究

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

Alt text

对于 HybridCLR 的源码解析,知乎有一篇文章写的不错 【划时代的代码热更新方案——hybridclr源码流程解析】

但对于我们调试苦逼人来说,还是官网的指点比较有性价比 () 【官网链接-HybridCLR源码结构及调试】

在官网中提到了,IL层指令集转换在 HybridCLR/transform/transform.cppHiTransform::Transform 函数,那么我们就去看看这个函数,多半解密也在这里面

Alt text

分析

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

alt text

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

alt text

解密

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

alt text

alt text

碎碎念

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

alt text

最近在逆蓝色原神(bushi)的时候,发现 HybridCLR 又换加密算法了,而且比两年前少前二这个还恶心,遂想起这个半成品然后写出来发发 (ˉ﹃ˉ)

今年也高考完了,考得不好去了个双非的信安,悲 :(