吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 41238|回复: 103
收起左侧

[Android 原创] unity3d手游破解(三)--基于inline hook

    [复制链接]
chinamima 发表于 2018-4-25 09:57
本帖最后由 chinamima 于 2018-4-25 14:40 编辑

再分享一个,目标APK--风之旅X(打个马赛克)。
一、前言

有的时候unity3d的解密函数被保护起来,因此这里提供一套基于inline hook的方案来实现破解,当前这个APK的Assembly-CSharp.dll是加密的,如下图所示,而且在libmono.so的mono_image_open_from_data_with_name的函数上下文找了几圈都没找到解密函数。

592070_32SRKWXMA3WK8A6.png


二、思路

首先,APK的所有dll都是通过 libmono.so的mono_image_open_from_data_with_name的函数加载的,输入的是原始的dll,返回的时候解密后的dll,因此我们通过hook这个函数来实现dll的dump和替换,把修改过的dll替换掉原来的实现破解。


三、Hook

首先获取 libmono.so的基址,这里我们通过读maps来获取,再从IDA里面找到 mono_image_open_from_data_with_name的偏移0x196C4C,相加得到函数的地址,然后把该函数hook到我们自己的new_game_proxy函数,在new_game_proxy函数里面实现dll的dump和替换。

592070_2ZC3ZEHRUUEDGVW.png

592070_JDCYECR46ARDC4W.png

这个APK上只有ARM的so,因此我们做arm的inline hook,把目标函数的前两条指令,替换成跳转指令( ldr pc,[pc,#-4] )+跳转地址( new_game_proxy 函数),实现跳转到 new_game_proxy 函数,替换之前先把指令保存到缓存g_OrigCode_game_proxy数组。


接着再在 g_OrigCode_game_proxy中添加跳转回原函数的指令: 跳转指令(ldr pc,[pc,#-4])+跳转地址(原函数+8),最后把 g_OrigCode_game_proxy的内存设置可执行,在 new_game_proxy函数中调用 g_OrigCode_game_proxy就回到原函数继续执行了。

592070_4YPTN72DWGFPCT2.png 592070_C2WFR25A6FFABXG.png


mono_image_open_from_data_with_name 函数的返回结构如下图所示

592070_DCGK9HWG7YRTHT6.png

其中raw_data就是解密dll的内存,raw_data_len就是dll的大小,在 new_game_proxy函数中把dll dump到/data/local/tmp/目录中,如果这个目录已经存在Assembly-CSharp.dll就把该dll加载替换原来的dll。剩下的就是对dll的修改了。

592070_P4WW89UKUCXK5NB.png


四、加载so

把APK中的dex拉出来反编译,找到com.silverera.sao.YHGameActivity的smali,把加载so的代码插进去,回编译替换回去。再把上面的hookso放进APK的lib目录,重打包APK。

592070_WM9WJSKZTXZY3RP.jpg

hookso被加载之后会开一个线程等待libmono.so完成加载再hook,至于为什么不直接先加载libmono.so,再加载hookso直接hook的原因后面会说。

592070_RXGCJ7CAEVXPRNZ.png

五、修改dll

把解密后的dll拉出来,用reflector打开,找关键函数,通常要经过各种尝试和修改才能找到合适的函数。这里展示一个我之前改过的函数吧,在这个游戏里面ChangeSP是释放技能消耗魔法的函数,因为这个游戏技能是没有CD的,但是魔法很少,放不了几个技能。把 ChangeSP函数直接return,然后就不掉魔法,所以可以无限技能。

592070_9Z98GCZRM4VNZ75.png


有一个问题就是用reflector反编译过的dll替换回去是加载不了的,原因我还没找到,因此我们只能手动修改二进制来实现破解,不过也不复杂,用IDA打开 Assembly-CSharp.dll,查找ChangeSP函数,可以看到这个函数的地址是0x19c994,用UltraEdit打开 Assembly-CSharp.dll定位到这个地址,把第一个字节改成0x2A,也就是ret,替换回去就实现了无限技能。还有无敌、秒杀之类的有兴趣的可以自己摸索一下。

592070_GQRC3HUBAJCZRS9.png


六、彩蛋

运行的时候查看HOOK日志,发现我们要hook的 mono_image_open_from_data_with_name函数居然还被其他人hook过,original code日志显示的应该是 mono_image_open_from_data_with_name的前8个字节,但是这里变成了ldr pc,[pc,#-4]+0x14d038d0,跟下面我们的hook一样,地址不同。

592070_CUYA35DRVATR4X7.png

跟踪一下地址0x14d038d0,发现这个地址位于libexecdll.so。

592070_ZDXCQTYN3B6TBYG.png

用IDA打开 libexecdll.so,发现是ijiami的,应该是ijiami把解密函数保护起来了。之前hook太快导致程序崩溃,所以我们先让ijiami hook,然后我们再hook。

592070_CCYZJHSTG3SERW5.png


七、结束语

hookso的源码放在附件。下图是我把怪物的攻击和血量都改成1。

592070_PV6CCDC8XPJB5VB.png


看雪同步:https://bbs.pediy.com/thread-226261.htm

hook-fzlt.7z

881.78 KB, 下载次数: 493, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 41吾爱币 +35 热心值 +42 收起 理由
C_Ryan + 1 + 1 我很赞同!
大龙猫 + 1 热心回复!
LHQ + 1 + 1 谢谢@Thanks!
芝士就是力量 + 1 + 1 谢谢@Thanks!
吾爱湘影 + 1 不错,很厉害,大佬,牛吖
ylygyzh + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
w84303207 + 1 + 1 谢谢@Thanks!
15850735263 + 1 + 1 热心回复!
qaz003 + 1 用心讨论,共获提升!
JoeyAlin + 1 + 1 我很赞同!
soyiC + 1 + 1 用心讨论,共获提升!
noth + 1 + 1 我很赞同!
#紫竹林 + 1 + 1 用心讨论,共获提升!
MingLei_0612 + 1 + 1 热心回复!
luoligongzhu233 + 1 + 1 我很赞同!
夏雨微凉 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
diditang + 1 谢谢@Thanks!
很快再相见123 + 1 我很赞同!
PSNO + 1 + 1 用心讨论,共获提升!
22222 + 1 + 1 热心回复!
DevinCc + 1 + 1 热心回复!
LGX-9527 + 1 + 1 谢谢@Thanks!
SomnusXZY + 1 + 1 热心回复!
Renn_Su + 1 + 1 谢谢@Thanks!
kilkilo502 + 1 + 1 这个还需要实践,第二部就够用了解密
page_ + 1 + 1 我很赞同!
dazhige + 1 + 1 我很赞同!
山治c + 1 + 1 谢谢@Thanks!
AngelEyes145 + 1 + 1 谢谢@Thanks!
poisonbcat + 1 + 1 谢谢@Thanks!
vince991 + 1 + 1 我很赞同!
明月相照 + 1 + 1 谢谢@Thanks!
linfengtai2008 + 1 + 1 楼主大神啊,膜拜,啥时候出COCOS2D的,期待
Sen + 1 + 1 偏移,dll太难了
xiaoli10048135 + 1 + 1 用心讨论,共获提升!
sunnylds7 + 1 + 1 谢谢@Thanks!
lookerJ + 1 + 1 热心回复!
m6636706 + 2 我很赞同!
CrazyNut + 2 + 1 谢谢大佬更新!!
anmingyu777 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
mylin + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wushaominkk 发表于 2018-4-25 10:36
学习,感谢分享!
CrazyNut 发表于 2018-4-25 11:02
chinamima 发表于 2018-4-25 10:55
解密代码在附件,下载之后直接gcc编译就能用的。

修改解密后的dll 是没啥问题的= =主要是不懂解密的原理0.0  就是希望多说说为什么那样做
头像被屏蔽
mylin 发表于 2018-4-25 10:23
wiiliesliang 发表于 2018-4-25 10:25
都是高手,只是我,是个菜鸟
兔子我是胡萝卜 发表于 2018-4-25 10:36
有U3D提取游戏模型的介绍以及工具吗
Tea毒生灵 发表于 2018-4-25 10:43
衡牛的样子,学习下
CrazyNut 发表于 2018-4-25 10:48
前排 前排支持楼主 希望多多更新= =并且说一下详细的解密教程= =【之前两篇教程解密都一笔带过了】
返人类 发表于 2018-4-25 10:53
很秀,点个赞
 楼主| chinamima 发表于 2018-4-25 10:55
CrazyNut 发表于 2018-4-25 10:48
前排 前排支持楼主 希望多多更新= =并且说一下详细的解密教程= =【之前两篇教程解密都一笔带过 ...

解密代码在附件,下载之后直接gcc编译就能用的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 11:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表