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

U3D游戲逆向修改深化-3 : U3D網(wǎng)絡游戲簡單修改實戰(zhàn)


本文介紹主要對某Android網(wǎng)游進行簡單分析的過程:


分析樣本下載 鏈接: https://pan.baidu.com/s/1Lwer1mCX7It2gs3x5j-p8g 密碼: njnj
< 文中的apk修改僅用于研究學習,如涉及權益侵犯請隨時聯(lián)系處理。 >
PS: 由于測試時發(fā)現(xiàn)該網(wǎng)游已經(jīng)停服,所以找了一個這個游戲的一鍵端,可以自己搭建進行使用,詳情參考文末說明。

網(wǎng)絡游戲的修改,本質(zhì)上與單機游戲并無太大區(qū)別,本文介紹常規(guī)修改的一些方向和方法。
對于大多數(shù)游戲而言,我們要修改的一般為 技能、速度、傷害 三個方面。
我們照舊找出這個游戲的dll腳本文件,使用dnSpy工具來進行具體的分析,路徑如下:
//assets/bin/Data/Managed/Assembly-CSharp.dll

0x1.技能相關修改
談到技能,我們一般最先想到的是無限釋放技能,那么我們無限釋放技能需要滿足什么條件呢?
冷卻時間為零是必需的,另外還有很重要的一點,就是魔法值,如果可以無限釋放技能但是很快MP(Mana Point魔法值)消耗完了,那也就沒辦法釋放了。
將dll腳本文件拖進dnSpy,然后搜索關鍵詞skill看一下結(jié)果(為縮小搜索范圍我們選擇“非泛型類型”,也就是class類):


經(jīng)過具體查看發(fā)現(xiàn)SkillCastInfo可能是有效的修改點,內(nèi)部有名為InitSkillInfo的方法(method),方法中有隊SkillCD的初始化,我們將其修改為0。




在skillCD寫入內(nèi)存之前,即stfld語句之前插入乘以零的指令,從而將冷卻時間的初始化值設置為零。
此時我們已經(jīng)完成了冷卻時間的修改,但是無限技能仍然無法實現(xiàn),因為魔法值我們并未做處理,搜索關鍵詞Mana及MP等均無有效結(jié)果。
于是我們搜索人數(shù)屬性相關的智力關鍵詞 Intell (Intelligence簡化)


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


此時無限技能才算真正修改完成,具體請大家進行實際修改和測試。

0x2.速度相關修改
速度相關的一般兩個方面,一個是移動速度,一個是攻擊速度。
我們首先進行movespeed和attackspeed的關鍵詞搜索,發(fā)現(xiàn)有效結(jié)果并不多。


于是我們換另個思路。,將dll腳本文件用ildasm打開后dump出il文件,然后搜索attackspeed以及movespeed。


在搜索結(jié)果中,我們篩選出于attackspeed和movespeed相關的如下的il代碼(搜索結(jié)果中其余結(jié)果也可能進行有效修改)




我們將其就行修改以增加速度,attackspeed可以直接改寫入數(shù)值,movespeed則可以進行乘法加倍操作。




至此完成攻擊速度和移動速度的修改(修改時使用IL直接書寫或者使用工具dnSpy進行修改請視情況自行決定)。

0x3.傷害相關修改
傷害的修改主要兩個思路,強化自身和弱化敵人。
首先是自身強化的修改方向:
在我們進行 get_Intell_absolute_value的修改時,我們發(fā)現(xiàn)附近還有一些其他屬性的修改,比如攻擊防御相關的get_Att_absolute_value與get_Def_absolute_value。



參考智力屬性的修改方式將其返回值修改為666666。



敵人弱化方向:
對于做任務刷圖的敵人,屬性的初始化一般采用的關鍵詞是Monster,我們搜索一下。


我們直接將函數(shù)內(nèi)容修改為:
ldc.i4.0
ret
這樣怪物就無法進行攻擊,從而實現(xiàn)敵人的弱化。

附:手游私服一鍵本地搭建
這里需要用到VMWare虛擬機,用于運行服務端;
服務端的虛擬機鏡像及搭建教程下載路徑 :
感興趣的話,可以去網(wǎng)上找外網(wǎng)搭建教程自行嘗試私服的搭建。

?