0x4.U3D游戏逆向修改深化-2

U3D游戏逆向修改深化-2 : U3D单机游戏修改分析实战


本文主要介绍某网站下载的修改版游戏的分析过程,对于初学者来讲,参照已修改游戏进行学习是很有效的学习途径。




本文样本是某游戏网站下载的已修改的游戏,与基础篇中的丛林方块有些类似,都是修改了金币的数量。

游戏样本地址 链接:https://pan.baidu.com/s/1t7k4mg5htSrrQKeXtwkj8Q 密码:tyxc

< 文中的apk修改仅用于研究学习,如涉及权益侵犯请随时联系处理。 >


我们照旧先安装看一下这个游戏都有哪些地方处理过或者需要处理:



发现两个异常点:1.打开游戏后有两次破解版本更新提示   2.金币被锁定为100100100

接下来开始我们这节课的内容:修改分析之数值搜索、代码对比、关键字搜索。


0x1.数值搜索

在基础课程中,我们已经讲过数值搜索了,这里我们再讲一遍,不过工具我们不再是用ildasm,而是dnSpy。

1.1  确认脚本文件

‘assetsbinDataManagedAssembly-CSharp.dll’

1.2  搜索数值

打开dnSpy,将Assembly-CSharp.dll拖拽进dnSpy打开,在搜索选项中选择“数字、字符串”搜索100100100。


1.3  修改数值

得到结果 get_coins,双击后可查看已修改的函数,在 “return 100100100”处右键单击,然后选择“编辑IL指令”,就可以看到IL指令。





如果要再次修改,将其修改为我们所需数值的十六进制形式即可。


0x2.代码对比

代码对比在破解版游戏分析是非常有用,可以帮助我们学习破解版是怎样进行修改的。

那么,既然要对比,我们就需要有一个未破解的版本用来做参照才可以实现对比,于是我们找来了这个样本的原版。

原版样本地址 链接:https://pan.baidu.com/s/1dy43mrper5oMvLKigkF1vg 密码:6ylh

< 文中的apk修改仅用于研究学习,如涉及权益侵犯请随时联系处理。 >

接下来我们对比一下原版和破解版反编译后的文件夹,看一下apk打开时的版本更新提示是哪些代码实现的。对比工具我们采用Araxis Merge。



破解版插入了如下smali文件,并在两处NativeActivity中对其进行了调用,也就是我们看到的两次更新提示窗口。



调用代码如下:

const/16 v0, 0x485a
invoke-static {p0, v0}, Landroid/support/v4/os/UnityPlayerup;->c(Landroid/app/Activity;I)V

java代码表示为(可在jd-gui中查看):

UnityPlayerup.c(this, 18522);


我们要去掉这个提示的话,删除这个调用即可。在此不具体分析所插入版本更新窗口的代码,有兴趣的可以分析看一下。

dll脚本也可以进行对比分析,需要用ildasm将其反编译为il代码,然后将原版和破解版的il文件进行对比,具体不做演示,大家自己尝试。


0x3.关键字搜索

这部分主要提供给大家一些可利用的搜索关键字,可用于金钱、属性等各方面的搜索。

3.1  金钱类

金币      gold、coin
钻石      Gem、diamond

3.2  属性类

生命      health、life、HP、Max HP
魔法      mp、sp、Power
冷却      CD、CoolDown、CoolTime
攻击      attack(atk)、fight、hit、damage
防御      defence(def)
速度      speed、movespeed、attackspeed
3.3  其他类

登录      login、sendlogin、loginserver
弹窗      Dialog、ShowDialog
按键      Button
以上只是介绍部分关键词,更多关键词需要大家在实践中总结积累。