Ra2辅助制作(1)
序言
- 序言
- 0x0 修改金幣
- 0x1 修改電力
- 0x2 瞬間建造
- 0x3 隨處建造
- 0x4 超級武器無CD
- 0x5 地圖全開
- 0x6 獲得一次超級武器使用權
- 0x7 選中單位無敵
- 0x8 載具無限容量
- 0x9 選中單位升三星
- 0xa 清除選定的建筑里的人
- 0xb 自動修理
- 控制選中的單位
- 科技全開
- 附錄
- 參考文獻
紅警2是個非常經典的游戲,承載過我小學時候的一段歲月,而我對他的探究是從初中才開始的,那時只會改改顯而易見的游戲數據,比如金錢和電力。也是限于當時沒有學C/C++、Assembly,沒有指針的概念和反匯編的能力。時隔多年,到了上個寒假才開始深入探究,而學務繁忙,斷斷續續實現了幾個功能就開學了,現完成了上個假期留下的紅警2游戲輔助探究&制作。
0x0 修改金幣
【思路】:
CE掃描初始化的金幣,然后花一些金幣,再掃描此時的金幣。重復幾次最后得到一個地址,然后查看是誰訪問了這個地址,得到的代碼中有個偏移為0x30c,后面跟著的是基址的值,搜索這個值就得到了基址。
【地址】:金幣=[[0A83D4C]+30C]
【注意】:0A83D4C 是個很重要的角色基址,與后面實現控制對方有關。
0x1 修改電力
【思路】:主要是修改負載。和修改金幣類似的思路,略
【地址】:
將 00508D16 |. 03D0 |add edx,eax 改為 00508D16 |. 03D0 |add edx,0【注意】:可能要判斷來源是否為我方,否則就是全局修改了!
0x2 瞬間建造
【思路】:將游戲速度調為最慢,然后生產一個單位。每走動一格,CE掃描增加的值;暫停生產,CE掃描未變動的值,如此反復掃描。注意這個過程必須在生產中進行,不要等到生產完畢還沒找到,否則地址又被重置了。得到一個比較靠譜的地址
查看是誰訪問了這個地址,回到游戲,繼續未完成的生產。得到若干個可以的代碼:
主要看紅色方框的地方,然后OD附加游戲進程,跟隨到地址004C9B49
動態分析得知,將add edx,ecx改為add edx,0x36即可,不夠優雅的是改了全局的,電腦也可以瞬間建造,無所謂了,電腦綜合速度本來就比人快。
【地址】:
將 004C9B7E 03D1 add edx,ecx 修改為: 004C9B7E 03D1 add edx,36【注意】:極有可能是全局修改,但是無所謂,電腦的速度總是比人快!
0x3 隨處建造
【思路】:
在不可以建造的地方,游戲會播放語音,搜索對應的字符串,跟隨跳轉:
動態分析這兩個跳轉就知道跳過去就是不能建,所以nop掉就能隨處建造了。
【地址】:
nop以下兩處: 004ABAAC /0F84 C4010000 je 尤里單機.004ABC76 004ABABA /0F84 B6010000 je 尤里單機.004ABC760x4 超級武器無CD
【思路】:
當超級武器CD結束時,會播放一段聲音告知玩家是哪一個超級武器準備完畢。現在就拿閃電風暴來入手吧。搜索對應的字符串“LightningStormReady”,將找到的所有地方都下斷。回到游戲,等待斷下。
順著跳轉往上找的過程中得知這是一個switch結構
根據eax的值來跳轉的,再往上找到
發現這處跳轉在超級武器CD沒有到0時是不會發生跳轉的,果斷改為jmp后實現了超武無CD,但是不夠完美就是游戲中顯示超級武器的CD還是沒有變化到0,無所謂啦~
【地址】:
將 006CBD67 /7D 0A jge short gamemd.006CBD73 改為 006CBD67 /7D 0A jmp short gamemd.006CBD730x5 地圖全開
【思路】:
1.已知在撿箱子的時候會隨機得到一地圖全開,可以從這里下手。
2.搜索字符串 “Crate at”,找到包含“reveal”的字符串,定位到:
①處的call是空函數,通過動態試驗得知②處的call即是清除地圖上的黑霧的函數。不難分析這個call的參數,其中esi存放的是基址里的值。僅是這個call還不能打開小地圖,這樣的地圖全開不完美。
當我們建造雷達或者空軍指揮部的時候,小地圖會打開。假設,未打開前是0,打開后是1。現在用CE搜索字節,建了又售出,搜0再搜1。交替了5次,還有幾十個地址。此時,把空軍指揮部的售出,建一個雷達,再搜1。最后得到兩個地址
首先試了第一個地址,查看是誰訪問了它,接著后續用OD來操作,追了好久沒有得到關鍵地址。后來換了第二個地址,也就是0B77864 這個地址
然后用OD跟進,來到此處:
看到這處,很高興的就用代碼注入器試了,結果奔潰!!!看來得進入到call 00656BE0 里去看看
通過動態分析,得到一個完美的地圖全開代碼。
【代碼】:
nop掉以下指令 00656BE9 /75 5D jnz short gamemd.00656C48 注入以下代碼: pushad mov dword ptr ds:[0xBAD3E8],1 mov esi,0087F7E8 mov dword ptr ds:[esi+0x14AC],0x3 mov ecx,00a83d4c mov edx,dword ptr ds:[ecx+0x21C] mov ecx,0087F7E8 push edx call 00577d90 popad ret0x6 獲得一次超級武器使用權
【思路】:
1.同地圖全開一樣的分析思路,在此之前要先實現撿箱子都撿到核彈(ICBM)。撿箱子觸發器函數中會隨機產生一個數字,然后根據這個數字,進入到switch結構里,隨機走一個分支。所以要先把switch結構的跳轉都改跳到獲得核彈這個分支。獲得核彈的分支如下:
switch頭部:
第一個call跟進去就是一個返回,沒什么用;第二個call是獲取eax的值,而這個eax的值后面會用到,很關鍵。現在我們去撿一個箱子觸發這個函數,然后往下分析
2.跟進 call 006CB560 ,步入到倒數第一個 call的時候,我們發現許多諸如此類的字眼
結合前面探究的超級武器無CD,改的就是這里邊的代碼,只不過是另一個call,與這個call結構相似,所以兩個都是超級武器CD函數。
3.單步到返回,接著往下繼續,來到關鍵的call
動態調試可知,這個call就是根據傳進來的數據作為武器的類型,添加到相應的頁面中。可知0x1f 表示的是武器,添加到武器頁面;0x7 表示建筑,添加到建筑頁面;0xf 表示步兵,添加到步兵頁面;0x28 表示車輛,添加到車輛頁面。而傳進來的另一個參數則是對應的建筑標識,或是武器標識,或是步兵標識,或是車輛標識。這里已經是為后面實現科技全開做了鋪墊。那么回溯到外部調用是這樣的,在關鍵的地方都做了注釋:
可以知道 eax里就是對應的標識,0x1f 表示的是類型。那么獲得一次超級武器使用權的代碼就可以歸納出來了。
【代碼】:
pushad mov ecx,0x14 call 006CEEB0 mov ebx,eax mov eax,超級武器編號 mov edx,dword ptr ds:[00a83d4c] mov ecx,dword ptr ss:[edx+0x258] push 0x0 push 0x0 mov ecx,dword ptr ds:[ecx+eax*4] push 0x1 call 006CB560 mov eax,超級武器編號 mov ecx,0087F7E8 push eax push 0x1F call 006A6300 popad ret【注意】:超級武器編號詳見附錄
0x7 選中單位無敵
【思路】:
常規搜索一個選中目標的血值基址,然后加上一定的偏移。發現存在一級偏移則是根據選中的人數*4,二級偏移為 +6C。
【地址】:
使用timer寫 選中對象的血量=[[[0A8ECBC]+EAX*4]+6C] EAX=選中單位的數量=[A8ECC8] 寫入65536,T=20s0x8 載具無限容量
【思路】:
先用CE搜索0,依次進入一個人,用CE搜索加一個,最后得到一個地址。CE查看是誰訪問了這個地址。
而方框中的地址就是當前選中的目標的地址
【注意】:修改后會導致人出不來,只能恢復修改才可以讓人出來。
【地址】:
當前選中目標的容量=[[[0A8ECBC]]+0x114]【注意】:
鎖定為0就可以實現無限容量,并且載具的威力也可以疊加,但是就不能把人放出來了。得處理一下,方式很多看個人吧。
0x9 選中單位升三星
【思路】:
按照編程經驗——等級和血量都是在同個類中,所以基址不變,變得是偏移。用CE的數據分析工具枚舉一個0x500范圍內的數據,然后對比一下,升級前和升級后,每個偏移的數據變動情況。最后發現在偏移為0x150指向的就是等級的地址。三星對應的數值的十六進制為0x40000000
【地址】:
選中對象的等級=[[[0A8ECBC]+EAX*4]+0x150] EAX=選中單位的數量=[0A8ECC8]0xa 清除選定的建筑里的人
【思路】:和載具無上限的思路一致
【地址】:
選中建筑的已經進駐人數=[[[0A8ECBC]]+0x694] 改為0即可在不破壞建筑的情況下清除里邊的人,然后可以進駐新的人!0xb 自動修理
【思路】:
當我們修理一個建筑的時候,游戲會播放 “repairing“ 聲音,于是可以從OD中搜索到關鍵字符串”EVA_repairing“,定位到關鍵函數,然后動態分析:
不難分析這兩個call的功能。其中第一個call可以用我們自己得到的基址計算一下,傳給esi調用第二個call就行了。
【代碼】:
pushad mov esi,建筑地址 mov eax,dword ptr ds:[esi] push -0x1 mov ecx,esi call dword ptr ds:[eax+0x19C] popad ret【注意】:
建筑地址只能讀取到當前選擇的建筑,所以事先要先緩存選擇過的地址。
當前選中建筑的地址=[[0A8ECBC]]
控制選中的單位
【思路】:
尤里能夠控制敵人,防御塔能夠分辨上是敵是友,說明每個單位的類中有這么一個屬性是用來起分辨作用的。在前面的探究中已經得到了選中單位的基址0A8ECBC和我方的基址0A83D4C,只要找到它的偏移就ok了。
使用CE的數據分析工具,枚舉0x500范圍內的數據,然后搜索哪個位置的數據與 [0A83D4C] 一致
有兩處,此時需要驗證一下:選中敵方的一個單位,把這個位置的值修改為**[0A83D4C],發現0x21c** 有效。
【地址】:
將選中單位的歸屬改為[0A83D4C]即可實現控制 選中單位的歸屬=[[[0A8ECBC]+EAX*4]+0x21C]【注意】:最好別控制對方的主基地,否則不能贏得勝利!
科技全開
【思路】:
在獲得一次超級武器的使用權一節中做了鋪墊,所以這里很快就能歸納出代碼。
【代碼】:
;添加建造選項 pushad push 標識 push 類型 mov ecx,0087F7E8 call 006A6300 popad ret 將 004F9276 /0F84 86000000 je gamemd.004F9302 改為jmp【補充】:需要使用循環來寫,標識參見附錄中的建筑代碼,類型參見附錄。
附錄
【超級武器編號】:
0=核彈 1=鐵幕 2=閃電風暴 3=超時空傳送 4=超時空動員 7=心靈控制 9=基因突變器 10=力場護盾 11=心靈控制探測【類型】:
0x7=建筑 0xf=步兵 0x28=車輛 0x1f=武器【建筑選項編號】:
0=GAPOWR;盟軍發電廠 1=GAREFN ;盟軍礦廠 2=GAPILE ;盟軍兵營 3=GAWEAP ;盟軍兵工廠 4=GAAIRC ;盟軍空軍指揮部 5=AMRADR ;美國空軍指揮部--AmericanParaDropSpecial 6=GADEPT ;盟軍維修廠 7=GAYARD ;盟軍船廠 8=GATECH ;盟軍實驗室 9=GAROBO; 控制中心 --- 10=GAOREP; 礦石精鍊器 11=GAWALL; 盟軍圍墻 12=GAPILL; 機槍碉堡---Vulcan2 13=NASAM ;愛國者飛彈 --RedEye2 14=GAGAP ;裂縫產生器 15=ATESLA ;光棱塔----PrismShot / PrismSupport 16=GASPYSAT; 間諜衛星 17=GACNST ;盟軍建造場 18=GTGCAN ;法國巨炮 GrandCannonWeapon 19=GACSPH ;超時空傳送儀 --- ChronoSphereSpecial 20=GAWEAT ;天氣控制器 --- LightningStormSpecial 21=GASAND ;沙袋 22=GAGATE_A; 閘門 23=;===蘇軍======; 24=NAPOWR; 磁能反應爐 25=NAREFN ;蘇軍礦廠 26=NAHAND; 蘇軍兵營 27=NAWEAP; 蘇軍兵工廠 28=NARADR ;蘇軍雷達 --- SpyPlaneSpecial 29=NADEPT ;蘇軍維修廠 30=NAYARD ;蘇軍造船廠 31=NATECH ;蘇軍實驗室 32=NANRCT ;核子反應堆 --- NukePayload 33=NAINDP ;工業工廠 34=NAWALL ;蘇軍圍墻 35=NABNKR ;戰斗碉堡 36=NALASR ;哨戒炮--Vulcan 37=NAFLAK ;防空炮--FlakWeapon 38=TESLA ;磁暴線圈 -- CoilBolt / OPCoilBolt 39=NACNST ;蘇軍建造廠 40=NAIRON ;鐵幕 --- IronCurtainSpecial 41=NAMISL ;核彈發射井 -- NukeSpecial 42=NAPSYB ;心靈信標 43=;===尤里======; 44=YAPOWR ;生化反應爐 45=YAREFN ;奴隸礦廠 46=YABRCK ;尤里兵營 47=YAWEAP ;尤里兵工廠 48=NAPSIS ;心靈感應器 --- PsychicRevealSpecial 49=YAYARD ;尤里船廠 50=YAGRND ;部隊回收廠 51=YATECH ;尤里實驗室 52=GAFWLL ;尤里圍墻 53=NATBNK ;坦克碉堡 54=YAGGUN ;蓋特機炮 55=YAPSYT ;心靈控制塔----MultipleMindControlTower 56=NACLON ;復制中心 57=YAGNTC ;基因突變器 --- GeneticConverterSpecial 58=YAPPET ;心靈控制器 --- PsychicDominatorSpecial 59=YACNST ;尤里建造場 60=YAROCK ;不明建筑物 61=YACOMD ;尤里指揮中心 62=;===平======; 63=GASAND;沙墻 64=CAAIRP;科技機場---ParaDropSpecial 65=CAOILD;=科技鉆油廠 66=CAPARS01;=艾菲爾鐵塔 67=CAEAST02;=尤里雕像----PrismShot 68=CATRAN03;=尤里要塞 69=CAEAST01;=復活島石像 [步兵類代碼] 0=E1;美國大兵 1=E2;蘇聯動員兵 2=SHK;磁爆步兵 3=ENGINEER;盟軍工程師 4=JUMPJET;火箭飛行兵 5=GHOST;海豹部隊 6=YURI;尤里 7=IVAN;瘋狂伊萬 8=DESO;生化步兵 9=DOG;蘇聯軍犬 10=CIV1;平民1 11=CIV2;平民2 12=CIV3;平民3 13=CTECH;技師 14=WEEDGUY;防IE掛載(沒用) 15=CLEG;超時空兵團 16=SPY;間諜 17=CCOMAND;超時空突擊隊 18=PTROOP;傘兵 19=CIVAN;超時空伊萬 20=YURIPR;尤里改 21=SNIPE;狙擊手 22=COW;奶牛 23=ALL ;鱷魚 24=TANY;譚雅 25=FLAKT;防空步兵 26=TERROR;恐怖分子 27=SENGINEER;蘇聯工程師 28=ADOG;盟軍軍犬 29=VLADIMIR;VLADIMIR 30=PENTGEN;PENTGEN 31=PRES;總統 32=SSRV;終級保鏢 33=CIVA;德克薩斯平民A 34=CIVB;德克薩斯平民B 35=CIVC;德克薩斯平民C 36=CIVBBP;棒員運動員 37=CIVBFM;海灘肥男 38=CIVBF;海灘女 39=CIVBTM;海灘瘦男 40=CIVSFM;雪中肥男 41=CIVSF;雪中肥女 42=CIVSTM;雪中瘦男 43=POLARB;北極熊 44=JOSH;猴子 45=YENGINEER;尤里工程師 46=GGI;重裝大兵 47=INIT;尤里新兵 48=BORIS;鮑裏斯 49=BRUTE;狂獸人 50=VIRUS;病毒狙擊手 51=CLNT;快槍手 52=ARND;終結者 53=STLN;藍波 54=CAML;駱駝 55=EINS;愛因斯坦 56=MUMY;木乃伊 57=RMNV;洛馬諾夫總理 58=LUNR;登月火箭兵 59=DNOA;暴龍 60=DNOB;暴龍 61=SLAV;奴隸礦工 62=WWLF;(木乃伊) 63=YDOG;尤里軍犬 64=YADOG;尤里軍犬 65=CIVFM;海灘肥女 [戰車類代碼] 0=AMCV;盟軍移動基地車 1=HARV;尤里奴隸采礦車 2=APOC;天啟坦克 3=HTNK;犀牛坦克 4=SAPC;裝甲運輸船 5=CAR;汽車 6=BUS;校車 7=WINI;wini 8=PICK;小貨車 9=MTNK;灰熊坦克 10=HORV;武裝采礦車 11=TRUCKA;貨車A 12=TRUCKB;貨車B 13=CARRIER;航空母艦 14=V3;V3火箭車 15=ZEP;基洛夫空艇 16=DRON;恐怖機器人 17=HTK;防空履帶車 18=DEST;驅逐艦 19=SUB;颶風級戰艦 20=AEGIS;宙斯盾戰艦 21=LCRF;盟軍運輸船 22=DRED;無畏級戰艦 23=SHAD;夜鷹直升機 24=SQD;烏賊 25=DLPH;海豚 26=SMCV;蘇聯移動機基車 27=TNKD;坦克殺手 28=HOWI;榴彈炮 29=TTNK;磁爆坦克 30=LTNK;輕坦克 31=CMON;超時空采礦車(不回) 32=CMIN;超時空采礦車 33=SREF;光棱坦克 34=XCOMET;位置標定器 35=HYD;海蝎 36=MGTK;幻影坦克 37=FV;多功能步兵車 38=VLAD;維拉迪摩指揮艦 39=DTRUCK;自爆卡車 40=PROPA;宣傳車 41=CONA;挖掘機 42=COP;cop 43=EUROC;歐洲汽車 44=LIMO;豪華轎車 45=STANG;小轎車 46=SUVB;小汽車A 47=SUVW;小汽車B 48=TAXI;出租車 49=PTRUCK;貨車C 50=CRUISE;巡游船 51=TUG;拖船 52=CDEST;海岸巡邏船 53=YHVR;尤里氣墊船 54=PCV;尤里機動基地車 55=SMIN;尤里奴隸礦廠 56=SMON;超時空采礦車 57=YCAB;黃色計程車 58=YTNK;蓋特炮坦克 59=BFRT;戰斗要塞 60=TELE;磁電坦克 61=CAOS;神經突襲車 62=DDBX;巴士 63=BCAB;黑色計程車 64=BSUB;雷鳴潛艇 65=SCHP;武裝直升機 66=JEEP;卡車 67=MIND;精神控制車 68=DISK;鐳射幽浮 69=UTNK;激光坦克 70=ROBO;遙控坦克 71=SCHD;武裝直升機 72=DOLY;攝影車 73=CBLC;電車 74=FTRK;救火車 75=AMBU;救護車 76=CIVP;民航機 77=V3V3;V3火箭車 78=TURCKB;貨車B [飛機類代碼] 0=APACHE;阿帕奇 1=ORCA;入侵者戰機 2=HORNET;大黃蜂 3=V3ROCKET;V3火箭 4=ASW;艦載反潛機 5=DMISL;無畏級導彈 6=PDPLANE;運輸機 7=BEAG;黑鷹戰機 8=BPLN;米格戰機(鮑里斯的飛機) 9=SPYP;偵察機 10=CMISL;雷鳴導彈參考文獻
[1]https://www.cnblogs.com/viewll/
[2]https://space.bilibili.com/251535501
總結
以上是生活随笔為你收集整理的Ra2辅助制作(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: access字体变为斜体_Linux折腾
- 下一篇: java中类型转换的造型_Java总结篇