本文主要介绍某网站下载的修改版游戏的分析过程,对于初学者来讲,参照已修改游戏进行学习是很有效的学习途径。
本文样本是某游戏网站下载的已修改的游戏,与基础篇中的丛林方块有些类似,都是修改了金币的数量。
游戏样本地址 链接: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
登录 login、sendlogin、loginserver 弹窗 Dialog、ShowDialog 按键 Button