上一篇中介紹了,金錢的修改,瞬間建造以及快速建造。很少說,本篇開始html
電力和負載的精確數值,能夠選中任意一個發電廠來查看shell
直接給出電力的地址:[game.exe+635DB4]+52D0數組
負載地址:[game.exe+635DB4]+52D4函數
紅警2中,電廠提供的電力根據其健康程度是不一樣的,生命值越少提供的電力越少。因此當電廠被攻擊時會更新電力值。當新放置建築,或建築被摧毀,賣掉建築物,都會更新電力和負載。要實現無限電力,能夠把電力改大,也能夠將負載減少。我選擇第二種,將負載清零。第一種方法改多大是個問題,我的不喜歡顯示99999,不優雅。測試
直接查找誰改寫了負載,進入遊戲沒進行任何操做就有一個地址004E44FE - mov [esi+000052D4],eax,根據經驗八成不是,由於你還沒進行操做,經測試NOP後也沒效果。新建一座發電廠,出現3條指令,而後強制攻擊本身的電廠,發現這條指令004F2D9B - mov [esi+000052D4],ecx計數增長,就是它了,NOP掉,當你讓電力發生變化時,負載成功清零。spa
那麼問題來了,這段代碼是共用的,電腦AI也實現了無限電力,不信去試試打掉電腦的全部發電廠,防護建築還在工做,並且電腦也只建造一個電廠。這就要處理共用代碼了,個人實現是,判斷是否是玩家的負載地址,若是是則清零,若是不是則正常操做,以下CE腳本。code
[ENABLE] alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) game.exe+F2D9B: //要修改的指令地址 jmp newmem nop returnhere: newmem: push eax mov eax,game.exe+635DB4 //玩家數據地址 mov eax, dword ptr [eax] cmp eax, esi pop eax jnz originalcode //若是不是我方則跳轉 mov [esi+000052d4],0 //修改後的指令 jmp exit originalcode: mov [esi+000052d4],ecx exit: jmp returnhere
方法同上,查找讓金錢減小的代碼,一樣須要處理共用代碼。htm
最初一直沒有如何地圖全開的思路,找過地圖迷霧數組,搜索未知,而後一直搜索變化實在是不靠譜,是否有大神告知這種如何操做?blog
而後看紅警2對戰直播的時候,發現地圖上的隨機箱子能夠得到開全圖。獲得思路,遂今後下手,通常的箱子都是加錢的,就查找誰更改了金錢(讓你的礦車都停下來,減小干擾),而後去吃箱子,獲得一個地址(後來發現這個地址也是全部與金錢增長有關的地方)。用OD在這個地址下斷點,而後繼續找箱子,遇到加錢箱子,程序斷下來。遊戲
而後查看調用堆棧,一層層下斷點。返回一層:
返回二層:
最初尋找的時候,下斷了4層,有些你會發現,剛進遊戲,就被斷下來,這樣的斷點直接取消就好。根據上圖已經有的註釋,實際兩層就好。並且當你返回一層的時候,往上面翻,你會看到以下關鍵字符串:
再往上翻還有其餘的,好比開全圖的,和從新關閉全圖的:
最後開全圖的CALL就是:
pushad mov ecx,008324E0 //遊戲數據區 call 0055A120 popad ret
代碼注入器CodeinEx,調用便可。這個函數裏面就是把全圖的迷霧改寫爲已經探索。不深究。
To be continued…
轉載請註明來源,http://www.cnblogs.com/viewll/p/4769346.html