2008年4月2日 星期三

魔獸 2.4 獵人追蹤 patch

for WOW 2.4


獵人追蹤第一個位址: [00E7D9E0]+0x3AD0

填入內容
Nothing: 0
Beasts: 1
Dragonkin: 2
Demons: 4
Elementals: 8
Giants: 16
Undead: 32
Humanoids: 64
Misc: 132
Everything: 255

獵人追蹤第二個位址: [00E7D9E0]+0x3AD1

填入內容
Machines: 1
Slimes: 2

草/礦/寶箱追蹤: [00E7D9E0]+0x3AD4


修改技巧

我個人是比較不愛直接去修改存放數值的記憶體位址,因為這樣將來若改版的話要追出新的位址比較困難,因此我偏好直接去改程式碼,由其是判斷數值的地方,這樣也可以閃過記憶體數值的檢查(Check SUM之類的)陷阱

首先在 [00E7D9E0]+0x3AD0 填入FF(255),然後在這位置設定個中斷點

然後找到 005a4206 mov eax,[eax+000010e0] 這行程式碼會去存取上面那個記憶體位址

向下追了幾行程式發現他 ret 回上一個副程式段:

005a8bdc call 005a41e0 <--- 上面那行的程式碼,返回時 EAX 存的內容為 FF
005a8be1 lea ecx,[esi-01]
....
005a8bed test eax,edx <--- 測試那個位址存的資料,符合就會顯示出來

edx 內存的應該是要顯示的類別,由於我們填入 FF , 因此所有的類別測試後都會成立,因而通通都顯示

此時只要將這行程式碼改成 test edx,edx , 就可以達到相同的效果,無論 eax 取得的數值為何 , 測試結果都會成立,所以不需要再去那個記憶體位址中填入任何數值,直接 bypass 掉檢查的程式碼讓我們把要顯示的東西顯示出來

這樣做的好處是

1. 不修改使用者資料區 , 以避免被 warden 發現
2. 直接修改程式碼可以避開較多的未知陷阱
3. patch 後要轉移到新版上較為容易
4. 練功,訓練自己反組譯的能力

這樣做要注意的地方是 wow 在載入時會對自己的程式碼做檢查,如果發現被修改過,會顯示檔案損毀而不讓你執行,這時必需要結束 wow 程式,重新再載入未修改過程式碼的 wow 程式...

因此最好將此 patch 寫成像 Trainer 的外掛執行檔,登入遊戲後再切換至 Trainer 把 patch 啟動,當不需要時可以還原回來 (on/off 切換)由於是自己寫的程式執行檔,wow 內建的 warden 想要從 process 名稱去判斷是否為外掛也會有困難

測試畫面 :


沒有留言: