0x5.U3D游戏逆向修改深化-3

U3D游戏逆向修改深化-3 : U3D网络游戏简单修改实战


本文介绍主要对某Android网游进行简单分析的过程:


分析样本下载 链接: https://pan.baidu.com/s/1Lwer1mCX7It2gs3x5j-p8g 密码: njnj
< 文中的apk修改仅用于研究学习,如涉及权益侵犯请随时联系处理。 >
PS: 由于测试时发现该网游已经停服,所以找了一个这个游戏的一键端,可以自己搭建进行使用,详情参考文末说明。

网络游戏的修改,本质上与单机游戏并无太大区别,本文介绍常规修改的一些方向和方法。
对于大多数游戏而言,我们要修改的一般为 技能速度伤害 三个方面。
我们照旧找出这个游戏的dll脚本文件,使用dnSpy工具来进行具体的分析,路径如下:
//assets/bin/Data/Managed/Assembly-CSharp.dll

0x1.技能相关修改
谈到技能,我们一般最先想到的是无限释放技能,那么我们无限释放技能需要满足什么条件呢?
冷却时间为零是必需的,另外还有很重要的一点,就是魔法值,如果可以无限释放技能但是很快MP(Mana Point魔法值)消耗完了,那也就没办法释放了。
将dll脚本文件拖进dnSpy,然后搜索关键词skill看一下结果(为缩小搜索范围我们选择“非泛型类型”,也就是class类):


经过具体查看发现SkillCastInfo可能是有效的修改点,内部有名为InitSkillInfo的方法(method),方法中有队SkillCD的初始化,我们将其修改为0。




在skillCD写入内存之前,即stfld语句之前插入乘以零的指令,从而将冷却时间的初始化值设置为零。
此时我们已经完成了冷却时间的修改,但是无限技能仍然无法实现,因为魔法值我们并未做处理,搜索关键词Mana及MP等均无有效结果。
于是我们搜索人数属性相关的智力关键词 Intell (Intelligence简化)


搜索到 get_Intell_absolute_value,将其返回值修改为666666,修改后如下:


此时无限技能才算真正修改完成,具体请大家进行实际修改和测试。

0x2.速度相关修改
速度相关的一般两个方面,一个是移动速度,一个是攻击速度。
我们首先进行movespeed和attackspeed的关键词搜索,发现有效结果并不多。


于是我们换另个思路。,将dll脚本文件用ildasm打开后dump出il文件,然后搜索attackspeed以及movespeed。


在搜索结果中,我们筛选出于attackspeed和movespeed相关的如下的il代码(搜索结果中其余结果也可能进行有效修改)




我们将其就行修改以增加速度,attackspeed可以直接改写入数值,movespeed则可以进行乘法加倍操作。




至此完成攻击速度和移动速度的修改(修改时使用IL直接书写或者使用工具dnSpy进行修改请视情况自行决定)。

0x3.伤害相关修改
伤害的修改主要两个思路,强化自身和弱化敌人。
首先是自身强化的修改方向:
在我们进行 get_Intell_absolute_value的修改时,我们发现附近还有一些其他属性的修改,比如攻击防御相关的get_Att_absolute_value与get_Def_absolute_value。



参考智力属性的修改方式将其返回值修改为666666。



敌人弱化方向:
对于做任务刷图的敌人,属性的初始化一般采用的关键词是Monster,我们搜索一下。


我们直接将函数内容修改为:
ldc.i4.0
ret
这样怪物就无法进行攻击,从而实现敌人的弱化。

附:手游私服一键本地搭建
这里需要用到VMWare虚拟机,用于运行服务端;
服务端的虚拟机镜像及搭建教程下载路径 :
感兴趣的话,可以去网上找外网搭建教程自行尝试私服的搭建。