好友
阅读权限10
听众
最后登录1970-1-1
|
新手第一次尝试破解软件,破解的是一个玩了有段时间的unity引擎做的手游。
因为一直觉得破解挺酷的,加上自己又是相关专业的学生,就尝试自己破解一下,结果好像第一次破解就踢到铁板了。
因为自己基本什么都不动,然后问了个安全方面相关的朋友后他给了我一个IDA pro,说让我去看看apk/lib里面的so文件。
打开一看发现完全看不懂,全是0ff_xxxxxx + xx,读了些文章后才发现应该是加密过了(其实我到现在都还不太确定)。
因为一开始搜到的手游破解文章全是cocos或者使用momo的unity游戏,导致我走了不少的弯路。
然后看到有篇文章提到了libil2cpp,我才知道我这个手游是libil2cpp构建的。
搜了搜关于libil2cpp的文章后,我就找到了global-metadata.dat。然后下载了个il2cpp dumper,尝试之后果然没用。
又看了点文章之后下了个010,打开global-metadata.dat看了看发现头部应该是正常的没有加密,用一个叫UnityMetadat.bat的模板也可以解读出来。
所以我推测是libil2cpp.so加密了,但是用ida又可以打开,我现在在想是不是il2cpp dumper不能将两个文件配对起来。
因为libil2cpp.so用f5查看之后也是像之前说的那样,全是(* (__int64 (**)(void)) (0ff_xxxxxx + xx))()这样的function call。
大概能看出一些规律,比如off_xxxxxxx的地址会在很多地方用到,但后面+的值基本没有重复的,所以我想应该是某种通过这种半写死的地址来加载函数。
但总的来说我已经完全读不懂了,比如跳转到off_xxxxxxx的地址会在旁边有洋红色的 g_tprt_pfn_array,希望各位大佬可以指点迷津。
上面这个是第一个让我完全无从下手的地方,第二个是在我尝试读代码然后读不通之后,我开始尝试动态调试这个程序。
一开始也是直接用ida然后android_sever那一套直接attach,但发现游戏是32位的,ida是64位的,可以静态加载的库有arm,arm64和x86_64的,心态有点爆炸。
目前我是直接强制安装了arm64_v8a的程序,然后ida和库都用的64位,但仿佛也有点问题,因为我是在模拟器上弄得。
动态调试成功attach之后发现程序完全不动了,等很久也没有加载库什么的,模拟器上的游戏也一直是等待debugger的状态(就是有个force close的那个对话框)
一开始还以为是我弄错了啥,后来才发现事情远没那么简单(((
在attach了几次都没反应之后,我又开始读文章,又读了好多文章之后看到了一篇用frida hook然后直接将so库dump出来的,用的是yang神的脚本。
我一看这不太好了直接解决我两个问题,但当我一切弄完 python dump_so.py libil2cpp.so 后我傻眼了,它报了个None。
我立刻 python dump_so.py 来查看所有的so库,发现之前在apk里看到的so库全部消失了,我只能看到一些系统库被加载,但我游戏已经打开并且在最上面。
我以为我又弄错了啥, 然后我就试了试另一个游戏,同样的操作但apk里的库可以通过 python dump_so.py 看到。
这个时候我在想,我之前ida完全没有反应是不是因为ida也识别不到那些库,因为用ida的时候我一直盯着右边的库加载列表在,结果也全是系统库。
到了这里我感觉已经完全超出我的知识范围了,甚至有点魔法(((
我也尝试用frida-dexdump来给app脱个壳,解出来了两个classes.dex文件,但读不太懂((
现在碰到的这两个问题我连怎么搜都不知道了,所以到这里来请各位大佬帮我指点一下:
1. (* (__int64 (**)(void)) (0ff_xxxxxx + xx))() 是什么?这是什么技术?有没有什么办法可以通过静态的方式解出来?
2. 为什么app安装之后.so库消失了?这是什么技术(魔法)?
然后关于我最后想要达到的结果的话,第一点就是希望可以破解这个游戏(胜负欲上来了),第二是知道里面用了什么加密技术就不求理解或者能够使用了。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|