unity3d手游破解(二)

转:https://bbs.pediy.com/thread-226208.htm

最近找乐子破解了点手游玩玩,再分享一个,目标APK--生死格斗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简单加密还是比较容易破解的,需要全方位的防护。

最后于  3小时前 被王正飞编辑 ,原因:
上传的附件:

猜你喜欢

转载自blog.csdn.net/zhangmiaoping23/article/details/80050573
今日推荐