1. 程式人生 > >紅色警戒2修改器原理百科

紅色警戒2修改器原理百科

原因 網上 edi 位置 .html col key back hellip

紅色警戒2,一個經典的遊戲。我上初中時經常周末回到家就開始玩任務模式,然後半天過不去一關,就開外掛……開外掛虐冷酷的不開超級武器的電腦。

先說一下版本,原版V1.006。其他版本只是基址不一樣,可參考思路,如共和國之輝。當時比較好用一個外掛是勝利之歌的紅色警戒2內存修改器,還有就是紅警全能王——各種全能,全能的我不怎麽喜歡用(功能默認全開,沒得選)。

(一)最簡單的開始——修改金錢

當初剛剛接觸Cheat Engine,只會改個金錢。快速建造、地圖全開、科技全開什麽的完全不知道怎麽辦。現在貌似突然領悟了什麽,回頭看看,竟然莫名都搞定了。網上找類似的教程或資料,也只有改個金錢的東西。此文的目的,也就是分享些思路,和自己最後的一些成果。

此處假定讀者對基本的CE使用已經了解,得到金錢的地址:[game.exe+635DB4]+24C。目前來看玩家的數據結構大概描述為:

1 2 3 4 5 6 7 8 9 10 11 class Player { private: //…其他變量 int nMoney; //金錢 int nPower; //電力 int nLoad; //負載 //… public: //各種函數 }

24C即是金錢在此結構中的偏移。程序中現在看來大概有這麽一個變量——Player* CurrentPlayer。這個指針存儲固定在game.exe+635DB4的位置,那麽[game.exe+635DB4]就是很重要的玩家數據區地址。

(二)建造CD基址查找——實現瞬間建造

如果你把遊戲速度調到最慢,然後找一個建造時間很長的建築,仔細觀察,你會發現從剛開始到就緒,所有單位都有54格變化,每格變化的間隔時間不同。這也說明,將CD改成54就是就緒。

首先,建造一個發電廠,等到CD剛變化了兩三格,暫停建造,然後搜索1-10之間的數值。接著仔細觀察CD變化了幾格,然後搜索數值增加了幾格,如此重復2次左右。這時能得到一個地址,將此值改為1,會發現CD又重新開始了。為了繼續進行下去,千萬別變成就緒狀態或取消建造,可以先將此值鎖定。查找什麽改寫了這個值,應該會得到一條指令:004B9367 - mov [esi+24],edx

,然後搜索ESI寄存器的值,可以得到一個綠色地址game.exe+433A80,即基址。[game.exe+433A80]+24就是發電廠的CD地址。重復可以得到礦場、兵營……這時聰明的你,應該會想到一種實現秒建的方法了吧——當這個指針有效的時候(即不是0的時候),且數值小於54時,把CD都改成53。基址存放的指針指向的大概可以想象是如下類,+24偏移是CD,裏面應該還有些其他信息……一旦建造完成或取消,這個相關的對象可能就要被銷毀以創建新的,這就是上面不要等到變成就緒或取消的原因

1 2 3 4 5 6 class SometingAboutConstruction { //… int nCD; //+24偏移 //… }

分享我找的幾個:盟軍電廠CD([game.exe+433A80]+24),以下只給出基址:盟軍礦場(game.exe+433AB0),盟軍兵營(game.exe+433AE0)。技術分享圖片我才沒有找全呢,也不會告訴你CD基址相差0x30偏移

=====================

本文補丁,2015/09/01:

1.CD基址並不關聯於建造的單位,也就是說不是盟軍電廠、盟軍礦場之類的,它是對應他所在的位置的——第一格、第二格……

2.以上實際上有兩個結構相關,而並非只有一個,這在第七篇有介紹。這裏可以先這麽簡單的理解,為了避免以後理解上的混淆已經對上文進行了簡單修改。

=====================

但是這麽多個種類,都要找是很麻煩的。我們換個思路……熟悉遊戲的你,應該都習以為常了:每種類型的單位只能同時建造一個——建築,武器,步兵,戰車,戰船等等。程序中為了實現這個功能,可以枚舉每種類型的所有單位,看是否有一種正在建造中,然後拒絕同時建造其他的同種單位。當然這是一種方案,但總覺得每當CD變化一次就要枚舉這工作好累技術分享圖片。有點技巧的方法是為每種類型設置一個標誌變量,有正在建造的此類型單位就設置一個標誌值。

紅警2每種類型設置了一個指針,指向正在建造的單位的上述結構,+24偏移就是CD。怎麽發現這個指針?上面你已經獲得了不同建築的CD地址,當你造一座電廠,暫停,這個指針應該指向電廠的上述相關對象,造礦場時指向礦場的,造兵營時指向兵營的。要精確搜索的內容就是CD地址減去偏移24——即SomethingAboutConstuction對象的起始地址。如此查找3次,最後我找到兩個地址都符合,造什麽時指向什麽的描述對象,到底是哪一個!!突然想到,我什麽都不造,應該是NULL,果斷只剩下一個了。然後找什麽改寫,得到一條指令:004E607A - mov [edi+000052E8],esi,然後精確查找EDI的值,得到game.exe+635DB4——這個值熟悉不,和金錢起始基址一樣,這更說明了,這個地址存放的是與玩家有關的數據,也就是CurrentPlayer對象的地址。

這樣就把上面找每種建造單位的CD基址,變成了找每種類型的CD基址,只有建築、武器、步兵、飛行器、戰車和船只六種了。分享我找的結果:建築CD([[game.exe+635DB4]+52E8]+24),以下只給出一級偏移:武器CD(52F8),步兵CD(52DC),飛機CD(52D8),戰車CD(52E0),船只CD(52E4)。

(三)更優雅的方式——快速建造

上面實現了瞬間建造,有不少修改器是這樣實現的。我不怎麽喜歡這種方式,編程要用Timer,還有就是造步兵的時候,只有一兩個兵營,點了十多下由於動畫速度跟不上,只出來一兩個,還要造好多好多兵營來配合這瞬間建造的速度。技術分享圖片

遊戲中一個設定就是,當你存在的兵營多的時候,步兵建造速度加快,軍工廠多的時候,坦克就建造的快,基地多的時候,各種建築就快。這必然有一個計數值。

當你有一個兵營的時候搜索1,兩個兵營搜索2,三個搜索3,這時就剩5個地址了,再建造第四個,都變成4了。哪個是?一個個嘗試是一種方法。可是如果弄清楚點,可以得到更多信息哦。換點不同操作,賣掉一個兵營!有三個變成3,兩個還是4。再建造一個兵營——5個地址都增加了1。你建造一個兵營,取消,會發現有一個已經增加1了,再建造,取消,它又增加1,這個地址大概就是你曾經試圖建造的所有兵營數。剩下4個地址,3個為4,一個為5。繼續建造一個兵營,暫停,發現有一個增加了1,取消會再減少1,這個地址就是包含正在建造的所有兵營數。還有一個地址是隨著你成功建造的兵營數,只增加不減少,這個地址就是該局遊戲總共建造的兵營數。現在剩下兩個地址,都是對應地圖上實際的兵營數。正常遊戲,我是沒發現怎麽讓他兩個不同。這兩個地址一個就是與加速建造有關的,一個就是僅僅保存地圖上兵營數的,兩個地址修改一個看效果就區分完畢。

下圖是我測試的時候的地址截圖,在你電腦上肯定不一樣,不過圖中第一個和最後一個的相對偏移以及中間3個的相對偏移應該是相同的,可以參考。

技術分享圖片

然後就是找到基址,直接找什麽改寫了與加速有關的那個地址,會得到:004EACF4 - inc [eax],然而直接內存中搜索EAX,即上面找到的地址09F96EA4,你不會找到什麽。此時一般有兩條路可選:1.OD調試,跟蹤EAX從哪裏來。2.聰明人直接就知道了

我反正直接知道了技術分享圖片,我沒誇我自己,我沒誇我自己,你一定要相信——快速建造-步兵([game.exe+635DB4]+52BC)。這顯然是與玩家有關的數據,而這個地址又與上面提到的玩家數據地址不算遠也不算近(這麽一大塊都存了些什麽技術分享圖片,地圖迷霧肯定也在),直接相減,就是偏移了。

慣例,因為這是百科,分享我找到的結果:快速建造-步兵([game.exe+635DB4]+52BC),以下只給出偏移:快速建造-建築(52C4),快速建造-船塢(52C8),快速建造-戰車(52C0),快速建造-飛機(52B8)。其實也不用找,肯定都在附近,嘗試+4,-4就OK了。因為程序員肯定不會把相似變量定義在相距太遠的位置,除非是傳說中吃飽撐的。

說到這,如果還不知道如何快速建造,我是服了,提示下,把這個值適當加大,15是個不錯的數技術分享圖片,這個數來源於勝利之歌的內存修改器,這個優雅的方式也是受其啟發。

To be continued…

技術分享圖片轉載請註明來源,http://www.cnblogs.com/viewll/p/4768880.html

紅色警戒2修改器原理百科