最近找乐子破解了点手游玩玩,再分享一个,目标APK--XX格斗5,(名字还是打点马赛克)一、前言unity3d手游的破解套路:拿到APK先看看有没有libmono.so和 assets\bin\Data\Managed\Assembly-CSharp.dll,有了之后看看 Assembly-CSharp.dll是否加密,加密之后先解密,解密之后找到关键函数修改,最后通过修改 libmono.so来加载解密后的dll实现破解。当前这个APK的 Assembly-CSharp.dll就是加密的。二、解密dll老套路, 把 libmono.so扔进ida,找到mono_image_open_from_data_with_name函数,F5查看发现了解密代码: 在这个函数直接就判断加载的dll是否 Assembly-CSharp.dll,如果是的话就先解密,LABEL_11就是解密代码,我们把代码抽取出来(完整代码放在附录了)编译一个解密器对dll解密,解密之后就可以对dll反编译了。三、修改dll一般通过关键字比如attack、damage、monster、skill、hp之类的去定位关键类,然后找从关键类里面找到需要的函数。在这个APK我们找到了game.data.HeroData类的changeHp函数,把这个函数直接返回false,实现无敌。四、修改sodll修改好之后,需要修改libmono.so来加载解密后的dll,如下图所示把beq那条指令直接改成b,直接跳过后面判断和解密,具体操作就是用UltraEdit打开libmono.so,定位到0x10f54c的位置把BEQ指令0x0A改成B指令0xEA这里改的是arm的so,可以把x86的删除掉,在模拟器上没有x86的也能运行,也可以把x86的so也一并改了。五、运行把修改过的so和dll都替换回去,重新打包运行,然后就无敌了,被攻击不掉血。六、结束语目前这种对dll简单加密还是比较容易破解的,需要全方位的防护。
[课程]Android-CTF解题方法汇总!
gsalan 有没有高手,physon的言语问题