前面的外掛系列教程,我們都是以一些簡單的單機游戲作為演示的,今天我們將來玩一下鬼泣4這款劇情類游戲,該游戲是由日本游戲開發商CAPCOM開發的一款動作冒險游戲,記得筆者在小時候就玩過這款游戲,在畫質等各方面做的都很不錯。
游戲下載地址:鏈接: https://pan.baidu.com/s/1gfjzw1NmXnlkOmvCtA4MjA 提取碼: fwyp
該游戲尋找基址與以往的游戲略有不同,游戲中的多數數值都不是以數值方式呈現的,而是以血條的方式展現出來的,我覺得這款游戲的搜索方式能讓大家學到東西,所以就下載了該游戲,來為大家演示一下常用基地址的找法。
尋找生命基址+偏移: 這里的血量是一個血條,默認我們不知道是多少,所以要搜索位置初始值,又因為像血量等這些數據默認會用浮點數存放,我們搜索浮點數即可。
搜索方式,就是首先搜索未知浮點數,然后讓人物掉血,搜索減少的數值,繼續搜索未變動數值,然后再次掉血,繼續搜索減少的數值,最后能找到一些數值,這個數值在0-6000之間,其他的可以排除掉了。

這四個值,我們依次修改,然后觀察,發現第一個是血量的,默認就是6000,如果改成20000則會撐滿血條。

這里查找一級偏移,查找訪問地址,

這里我們盡可能排除不是mov等指令的,此處選擇 004FF282 - F3 0F10 85 CC150000 - movss xmm0,[ebp+000015CC] <<

把前面的幾個拿下來依次測試。

這個可能是一個數組,不太像:008F6260 - 89 84 CE 98000000 - mov [esi+ecx*8+00000098],eax << 這樣的八成是數組不用考慮。

找到一個基地址,添加上 0040E405 - 8B 48 24 - mov ecx,[eax+24] <<

繼續向下找,沒了,到頭了:00463C50 - A1 B858E500 - mov eax,[DevilMayCry4_DX9.exe+A558B8] <<

這個可能就是血量, 最終公式: [[[DevilMayCry4_DX9.exe+A558B8] + 24] + 15cc] = 人物血量

那我們該如何編寫一個輔助呢,前面的外掛教程中我並沒有過多的演示,偏移讀寫,現在我們就來實現一下。
關於偏移讀寫模塊,我們就是用上一次教程中封裝過的D3D內存讀寫模塊來演示,該模塊可在GDI透視教程中找到。
這里的 DevilMayCry4_DX9.exe+A558B8 其實等於 161d64e0 有些朋友會說,如果我就像動態讀取,那么你需要先取出模塊基地址。

通過模塊基地址與偏移地址A558B8相加得到的一個內存地址,再通過讀取該地址,取出該地址中的地址,同樣也可以得到我們的 161d64e0 也就是基地址。

下一步就是對該基地址進行相加,最終得到血量的完整動態地址,即可讀出數據,效果圖如下所示。

最終這個功能就實現了,之所以鎖定6000是因為該值最大為6000當然也可以鎖定為30000,盡量鎖定的值不要超出預定義范圍,以確保游戲能夠正常。

實現無限劍氣: 這里我說一下鬼泣游戲中的劍氣設置,當我們按下Q鍵位是,游戲中的人物會蓄力,當蓄力值達到一定條件時,會增加一格劍氣,當劍氣值達到三格時即可觸發劍氣開關,攻擊力上升,效果變得炫酷,如下時正常積累劍氣時數據的變化。

游戲左上角的紅色格子,就是劍氣值的累加,這里的搜索方式有多種形式,第一種搜索未知數據,第二種應該可以搜索1-3之間的常量,當我們釋放技能時劍氣會減少,所以我們需要鎖定他。
起初我時通過位置初始值來尋找的,想當然認為時浮點數,篩選過程就是首先搜索未知初始值(浮點數),積累1格劍氣,然后搜索增加的,在積累一個繼續搜索增加的,然后釋放一格,搜索減少的,最后,我找到了這個劍氣值的地址,浮點數顯示出現了一些不和諧,才知道這個使用四字節表示的,也就是說搜索精確值1-3篩選同樣可以找到。作者是使用了一個int類型來存儲劍氣值的。

接着找訪問地址,直覺告訴我選擇第二個。00508DD4 - 8B 80 E8CC0000 - mov eax,[eax+0000CCE8] << eax = > 179811C0

繼續找訪問地址,直覺再次告訴我,選擇第三個。 0079D841 - 8B 70 24 - mov esi,[eax+24] << eax = > 161F64E0

此時基地址已經找到了:00776792 - 8B 0D B858E500 - mov ecx,[DevilMayCry4_DX9.exe+A558B8] << base => 00e558b8
看到上方的 DevilMayCry4_DX9.exe+A558B8 是不是很熟悉,沒錯就是與上方生命的取法相同,其結構相差不會太遠。

添加指針,鎖定后,釋放技能觀察是否可以無限劍氣了,沒問題了,這個就是,接着就是寫一下輔助了。

寫輔助,就簡單了,和上面差不多,但需要注意最后是寫內存整數型,其默認劍氣為3,這里鎖定三即可。

這樣就可以無限釋放劍氣了,基本上都是暴擊,如下效果。

尋找無限暴怒: 暴怒模式就是當人物被攻擊時暴怒值會增加一點,具體增加多少不清楚,排查時應使用未知初始化搜索,然后怪物打一下搜索增加的,然后慢慢排查,這個的話感覺應該會是浮點數。

怪物沒打我們幾次我們就搜索增加的數值,最后能夠找到該數,該數值范圍在0-10000之間,經過搜索我發現其確實使用float存儲。

下一步查找訪問,然后找基地址即可: 00508EBD - F3 0F10 89 241F0000 - movss xmm1,[ecx+00001F24] << ecx = > 179C11C0

找二級指針,這個 00776798 - 8B 71 24 - mov esi,[ecx+24] << ecx => 162364E0

上面代碼中可看出來,偏移的上面是一條 00776792 - 8B 0D B858E500 - mov ecx,[DevilMayCry4_DX9.exe+A558B8] 這個就很像,直覺告訴我,我該選擇這個,添加指針測試,沒錯了。

接着就是寫好輔助,這個就簡單了,代碼如下所示,需要注意讀寫類型的區別。

最終測試效果,當我們按下n時即可觸發暴怒,開啟輔助后即可無限釋放。

基本上,這三個功能即可爽完了,沒有過不去的關卡了,但你是否會發現,我們找的這三個地址有些聯系呢?
生命:DevilMayCry4_DX9.exe+A558B8 + 24 + 15cc
劍氣:DevilMayCry4_DX9.exe+A558B8 + 24 + cce8
暴怒:DevilMayCry4_DX9.exe+A558B8 + 24 + 1f24
聯系很緊密,我們計算一下偏差,即可得到一些想要的數據,拿基地址遍歷器跑一下會得到更多有用的數據,這里我就不帶大家繼續了,你自己可以去試試。
轉載請添加出處,不然,我也沒什么動力繼續寫下去了!
