unity3d手游破解(二)
本帖最后由 chinamima 于 2018-4-25 14:41 编辑最近找乐子破解了点手游玩玩,再分享一个,目标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,实现无敌。
四、修改so
dll修改好之后,需要修改libmono.so来加载解密后的dll,如下图所示
把beq那条指令直接改成b,直接跳过后面判断和解密,具体操作就是用UltraEdit打开libmono.so,定位到0x10f54c的位置把BEQ指令0x0A改成B指令0xEA
这里改的是arm的so,可以把x86的删除掉,在模拟器上没有x86的也能运行,也可以把x86的so也一并改了。
五、运行
把修改过的so和dll都替换回去,重新打包运行,然后就无敌了,被攻击不掉血。
六、结束语
目前这种对dll简单加密还是比较容易破解的,需要全方位的防护。
看雪同步:https://bbs.pediy.com/thread-226208.htm
当前正想破解一个游戏参考游戏内某个机制的实现, 刚好这个游戏是libmono形式的,楼主这个提供了全套思路。 http://wx2.sinaimg.cn/mw690/0060lm7Tly1frnmq5ah42j30rm0jdjsy.jpg
在改一个游戏时看到了它的加密函数里面一直都在使用sub_xxxx的方法,请问这种应该是怎么解决? 记得很久以前看过一个崩坏3的 很榜的教程,希望下期讲一下 解密器的编写 小白表示看这个真的看不懂{:1_908:} 很想和大佬一起学习 哎没成品 不错啊 好东西呢 谢谢分享 只是一个大概的思路,如果有完整的教程就好了! 小白表示也看不懂