首页
社区
课程
招聘
[原创]**前线破解
2019-5-5 20:16 9006

[原创]**前线破解

2019-5-5 20:16
9006

**前线是一款有保护的游戏,我们来破解一下他们的保护。
1.首先我们来打开一下游戏中的Assembly-CSharp.dll文件,这个文件是u3d mono游戏的关键文件,游戏的主要逻辑都包含在其中。

2.拖到dnspy(一款dll反编译工具,可在github中下载)中查看,可以看到不能正常解析出来,这说明dll是被处理过的。

3.那我们要开始着手处理脱壳了,怎么才能解密出来dll呢。一般解密可以通过搜索dll的魔幻字,但是nProtect有反调试,不能直接搜索dll的魔幻字得到。于是我们需要去Hook相应的函数来获取解密后的dll。

4.dll加载过程。U3D中mono加载dll的过程简要提下。首先是调用mono_image_init函数进行初始化,那dll解密肯定是需要在mono虚拟机加载之前的,因此,在mono_init_image函数进行hook,看能不能得到解密的dll。使用inlinehook对libmono.so里面的函数进行hook。inlinehook是通过修改函数的前几条指令,使其跳转到我们的函数地址,执行后再跳转回原函数。Cydia Substrate是较早的inlinehook框架(其缺点是只支持Dalvik模式,Android 4.4以上请慎用)代码如下:

(1)首先hook dlopen函数,在游戏打开libmono.so时候,对libmono.so的mono_image_init函数进行hook

(2)在游戏调用mono_image_init函数时进行hook,读取mono中的image文件,根据Image的结构将dll文件dump下来。

(3)以上是常规操作。。。然鹅,有保护的情况下,常规操作貌似不行,我尝试了好几个mono中的函数,都是反复调用的。

这说明nProtect可能会对libmono.so中的函数进行校验。对函数进行校验对inlinehook进行保护的方案,那我们有没有其他方法呢?--那就是GOT表Hook。GOT表是SO库
中的外部函数导入表,当进程需要引用其他so库中的函数,会将这个函数的地址写入got表中,实际调用的时候,会按照got表中的地址跳转调用。GOT表就是通过got表
中的地址,将GOT表中的地址指向我们编写的函数,再在自定义函数末尾跳转回原函数。按照这个思路,那我们需要找到调用mono_image_init的地方,答案就在
libunity,so里面,其导入函数表中含有mono_image_init函数。因此,我们需要对llibunity中的函数进行got表Hook。got表hook这里采用开源的框架xhook进行hook。

(4)打开对应dll文件时进行dump,其实就是通过读偏移量将写下来啦~。

 (5)然后我们会得到一个dll文件,让我们用dnspy打开看一下是不是解密后的dll文件呢?耶~都是明文,里面的函数也是明文,成功了。


总结:保护方法是对游戏的dll作整体加密,这样的防护能够有效防止重打包dll游戏进行修改,但对于内存dump却不能很好的防住,内存dump下来还是明文的dll,
很容易遭到修改和窃取。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (10)
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zylyy 2019-5-5 20:22
2
0
问一下,**是论坛自己打得码还是你自己主动打的码
雪    币: 6115
活跃值: (4036)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 1 2019-5-5 23:11
3
1
主动 打码。yaozi前线
雪    币: 155
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冰雪冬樱 2019-5-5 23:40
4
0
虚假的指挥官
雪    币: 1781
活跃值: (843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Tatsuy 2019-5-6 01:33
5
0
这位指挥官,您可以试试dump设备内存的方法然后用winhex的恢复文件功能呢
雪    币: 0
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godofrock 2019-5-6 06:17
6
0
怎麼了?
最后于 2019-5-6 06:18 被godofrock编辑 ,原因:
雪    币: 287
活跃值: (475)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gezigezao 2019-5-6 09:37
7
0
godofrock 怎麼了?
按照步骤最后不能解密嘛
雪    币: 287
活跃值: (475)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gezigezao 2019-5-17 14:53
8
0
godofrock 怎麼了?
大胸弟,到底遇到啥问题了,楼主在线帮你解答啊
雪    币: 287
活跃值: (475)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gezigezao 2019-5-17 14:54
9
0
Tatsuy 这位指挥官,您可以试试dump设备内存的方法然后用winhex的恢复文件功能呢
咦。可以一试
雪    币: 256
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
MixiGaming 2019-5-28 01:25
10
0
你能给我发送源代码吗?
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
moneylao 2019-5-30 00:29
11
0
已经凉了。这游戏改为il2cpp了
游客
登录 | 注册 方可回帖
返回