U3D游戲逆向修改深化-3 : U3D網(wǎng)絡(luò)游戲簡單修改實戰(zhàn)
本文介紹主要對某Android網(wǎng)游進行簡單分析的過程:
< 文中的apk修改僅用于研究學(xué)習(xí),,如涉及權(quán)益侵犯請隨時聯(lián)系處理。 >
PS: 由于測試時發(fā)現(xiàn)該網(wǎng)游已經(jīng)停服,,所以找了一個這個游戲的一鍵端,,可以自己搭建進行使用,詳情參考文末說明,。
網(wǎng)絡(luò)游戲的修改,,本質(zhì)上與單機游戲并無太大區(qū)別,本文介紹常規(guī)修改的一些方向和方法,。
對于大多數(shù)游戲而言,,我們要修改的一般為 技能、速度,、傷害 三個方面,。
我們照舊找出這個游戲的dll腳本文件,使用dnSpy工具來進行具體的分析,,路徑如下:
//assets/bin/Data/Managed/Assembly-CSharp.dll
0x1.技能相關(guān)修改
談到技能,,我們一般最先想到的是無限釋放技能,那么我們無限釋放技能需要滿足什么條件呢,?
冷卻時間為零是必需的,,另外還有很重要的一點,就是魔法值,,如果可以無限釋放技能但是很快MP(Mana Point魔法值)消耗完了,,那也就沒辦法釋放了。
將dll腳本文件拖進dnSpy,,然后搜索關(guān)鍵詞skill看一下結(jié)果(為縮小搜索范圍我們選擇“非泛型類型”,,也就是class類):
經(jīng)過具體查看發(fā)現(xiàn)SkillCastInfo可能是有效的修改點,內(nèi)部有名為InitSkillInfo的方法(method),,方法中有隊SkillCD的初始化,,我們將其修改為0。
在skillCD寫入內(nèi)存之前,,即stfld語句之前插入乘以零的指令,,從而將冷卻時間的初始化值設(shè)置為零。
此時我們已經(jīng)完成了冷卻時間的修改,,但是無限技能仍然無法實現(xiàn),,因為魔法值我們并未做處理,搜索關(guān)鍵詞Mana及MP等均無有效結(jié)果,。
于是我們搜索人數(shù)屬性相關(guān)的智力關(guān)鍵詞 Intell (Intelligence簡化)
搜索到 get_Intell_absolute_value,,將其返回值修改為666666,修改后如下:
此時無限技能才算真正修改完成,,具體請大家進行實際修改和測試,。
0x2.速度相關(guān)修改
速度相關(guān)的一般兩個方面,一個是移動速度,,一個是攻擊速度,。
我們首先進行movespeed和attackspeed的關(guān)鍵詞搜索,發(fā)現(xiàn)有效結(jié)果并不多,。
于是我們換另個思路,。,將dll腳本文件用ildasm打開后dump出il文件,,然后搜索attackspeed以及movespeed,。
在搜索結(jié)果中,我們篩選出于attackspeed和movespeed相關(guān)的如下的il代碼(搜索結(jié)果中其余結(jié)果也可能進行有效修改)
我們將其就行修改以增加速度,,attackspeed可以直接改寫入數(shù)值,,movespeed則可以進行乘法加倍操作,。
至此完成攻擊速度和移動速度的修改(修改時使用IL直接書寫或者使用工具dnSpy進行修改請視情況自行決定)。
0x3.傷害相關(guān)修改
傷害的修改主要兩個思路,,強化自身和弱化敵人,。
首先是自身強化的修改方向:
在我們進行
get_Intell_absolute_value的修改時,我們發(fā)現(xiàn)附近還有一些其他屬性的修改,,比如攻擊防御相關(guān)的get_Att_absolute_value與get_Def_absolute_value,。
參考智力屬性的修改方式將其返回值修改為666666。
敵人弱化方向:
對于做任務(wù)刷圖的敵人,,屬性的初始化一般采用的關(guān)鍵詞是Monster,,我們搜索一下。
我們直接將函數(shù)內(nèi)容修改為:
這樣怪物就無法進行攻擊,,從而實現(xiàn)敵人的弱化,。
附:手游私服一鍵本地搭建
這里需要用到VMWare虛擬機,用于運行服務(wù)端,;
服務(wù)端的虛擬機鏡像及搭建教程下載路徑 :
感興趣的話,,可以去網(wǎng)上找外網(wǎng)搭建教程自行嘗試私服的搭建。