紅色警戒2,乙個經典的遊戲。我上初中時經常週末回到家就開始玩任務模式,然後半天過不去一關,就開外掛程式……開外掛程式虐冷酷的不開超級**的電腦。
先說一下版本,原版v1.006。其他版本只是基址不一樣,可參考思路,如共和國之輝。當時比較好用乙個外掛程式是勝利之歌的紅色警戒2記憶體修改器,還有就是紅警全能王——各種全能,全能的我不怎麼喜歡用(功能預設全開,沒得選)。
當初剛剛接觸cheat engine,只會改個金錢。快速建造、地圖全開、科技全開什麼的完全不知道怎麼辦。現在貌似突然領悟了什麼,回頭看看,竟然莫名都搞定了。網上找類似的教程或資料,也只有改個金錢的東西。此文的目的,也就是分享些思路,和自己最後的一些成果。
class player24c即是金錢在此結構中的偏移。程式中現在看來大概有這麼乙個變數——player* currentplayer。這個指標儲存固定在game.exe+635db4的位置,那麼[game.exe+635db4]就是很重要的玩家資料區位址。
如果你把遊戲速度調到最慢,然後找乙個建造時間很長的建築,仔細觀察,你會發現從剛開始到就緒,所有單位都有54格變化,每格變化的間隔時間不同。這也說明,將cd改成54就是就緒。
class sometingaboutconstruction分享我找的幾個:盟軍電廠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,還有就是造步兵的時候,只有一兩個兵營,點了十多下由於動畫速度跟不上,只出來一兩個,還要造好多好多兵營來配合這瞬間建造的速度。
遊戲中乙個設定就是,當你存在的兵營多的時候,步兵建造速度加快,軍工廠多的時候,坦克就建造的快,基地多的時候,各種建築就快。這必然有乙個計數值。
然後就是找到基址,直接找什麼改寫了與加速有關的那個位址,會得到: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…
紅色警戒2修改器原理百科(九)
完結了乙個相對比較複雜的修改,其實說起來也簡單,如果不去理解資料結構只追求修改效果的話。筆者的乙個原則就是要搞明白 怎麼找到的,怎麼改,為什麼。乙個線索無法伸展了,換個點,就來下面這個吧。這次我們想試試新方法,這個方法在一些遊戲中有奇效,簡單快捷方便,一秒鐘滿足你!有時很有效的的大殺器 字串搜尋。從...
紅色警戒2修改器原理百科(三)
繼續上次,上次給出的開全圖,是不能看透盟軍的裂縫產生器的,有的修改器的開全圖是可以看透的。它的原理是修改了判斷迷霧的乙個關鍵跳轉。此處不多說,本人覺得不夠優雅 能少改動 則少改動 當然他也有自己的優勢 看透裂縫產生器。可能在最後補充中,再加上吧。當然,如果你事先查詢了一些關鍵字串,可以直接快速的定位...
MongoDB 資料操作(三)資料更新(2)修改器
對 mongodb 資料庫而言,資料的修改會牽扯到內容的變更 結構的改變 包含陣列 所以在 mongodb 設計的時候,就提供有一系列的修改器的應用,如之前的 set就是乙個修改器 1 inc 針對數字字段,增加某個數字欄位的資料內容 將年齡為 19 的成員的成績全部減30,並且年齡 1 db.st...