chinamima 发表于 2018-4-23 11:30

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

kaclok 发表于 2020-7-14 17:34

当前正想破解一个游戏参考游戏内某个机制的实现, 刚好这个游戏是libmono形式的,楼主这个提供了全套思路。

天雨 发表于 2018-5-25 15:44

http://wx2.sinaimg.cn/mw690/0060lm7Tly1frnmq5ah42j30rm0jdjsy.jpg

在改一个游戏时看到了它的加密函数里面一直都在使用sub_xxxx的方法,请问这种应该是怎么解决?

debugbaby 发表于 2018-4-23 11:46

记得很久以前看过一个崩坏3的

ao610336999 发表于 2018-4-23 11:47

很榜的教程,希望下期讲一下 解密器的编写

13GA 发表于 2018-4-23 11:54

小白表示看这个真的看不懂{:1_908:}

adq_cq 发表于 2018-4-23 12:12

很想和大佬一起学习

lygcai8 发表于 2018-4-23 12:27

哎没成品

djswzw 发表于 2018-4-23 13:48

不错啊 好东西呢

夏520 发表于 2018-4-23 14:59

谢谢分享

wushaominkk 发表于 2018-4-23 16:03

只是一个大概的思路,如果有完整的教程就好了!

笑笑笑 发表于 2018-4-23 17:49

小白表示也看不懂
页: [1] 2 3 4 5
查看完整版本: unity3d手游破解(二)