wp参考链接如下:
- Question1:尝试使用
Zygisk-il2cppdumperdump,但是程序会卡死,dump不出文件- Question2:用
elf-dump-fixdump下来的il2cpp.so缺少符号,未知原因,但是可以搜字符串global-metadata.dat定位到加载函数- Question3:追踪加载
global-metadata.dat函数的调用链,发现被hook到sec2021的函数中了,追踪到最后发现是个看不懂的地方(?)- Question4:实现无敌之后未成功绕过app的crc校验,导致重打包的apk无法运行
问题解决情况
- Question1
- Question2
- Question3
- Question4
待办事项
- 分析libsec2021.so的解密函数
- 分析il2cpp.so的代码段校验并绕过
- dump解密后的il2cpp.so
- 编译一份flappybird游戏
- bindiff恢复符号
- 实现无敌功能
- 封包成破解版apk
解题流程
- 解包APK,lib目录下有
libil2cpp.so,\assets\bin\Data\Managed\Metadata路径下有global-metadata.dat,可以知道这是il2cpp引擎的游戏 libil2cpp.so和global-metadata.dat都是被加密的,打开libsec2021.so发现IDA无法正确识别ELF文件,发现是文件头的e_phentsize有问题,把23改成32即可正确识别,libil2cpp.so也是同样的处理方式- 用
elf-dump-fix把内存中的libil2cpp.so dump下来并修复了 - 写了一个脚本,成功把
global-metadata.datdump下来了
|
|

- dump下来的文件放到il2cppdumper中仍然无用,在github上找到flappybird的源码(FlappyBirdStyleGame),打算自己编译一份,结果踩坑了。。。原因是版本太新,于是用下了个版本低一点unity

废了很大力才编译出来(选了好几个unity版本都不符合预期。。。)
- 用il2cppdumper分析自己编译的libil2cpp.so,成功恢复符号并通过字符串的搜索找到对应的和实现无敌的函数
PlayerController__OnCollisionEnter2D
- 在该函数内部找到判定角色死亡的关键逻辑,但是现在目的是要在题目的so中找到对应游戏逻辑所在的位置,于是在
UnityEngine_Component__CompareTag函数中发现有字符串信息
- 在dump下来的so中通过
bindiff恢复了部分符号之后,也是成功定位到题目的so的关键逻辑
- 只需要把
0x540E60处指令的BNE修改成B即可实现无敌
- 经过
Frida的验证确实可以实现无敌
|
|
Question2:dump下来的il2cpp.so缺少符号(已解决)
请看下面两个对比图,符号是有一些恢复的,但是关键代码符号没有恢复
- 在别人wp中看到的

- 我dump下来的libil2cpp.so在IDA中看到的

- 下面是我dump il2cpp的过程(不知道是不是dump的时候地址范围选错了)

我目前的猜测wp中看到的是大佬编译了一份il2cpp.so然后恢复的符号,但是不确定是不是,打算自己编译一份看看的,但是不会,待办(确实是)
Question3:加载global-metadata.dat函数的调用链
如图,不明白这个加载函数为什么调用到这里了

Question4:实现无敌之后未成功绕过app的crc校验,导致重打包的apk无法运行
因为没有分析libil2cpp.so的解密函数和其他的一些代码段校验函数,所以无法实现破解版apk可以直接运行😭