红色警戒2尤里的复仇科技全开
本帖最后由 KaQqi 于 2019-5-21 18:02 编辑我都不知道我这个东西写了多少期了,所以就不写期号了。。
本来这个内容在这篇帖子
对红色警戒2及尤里的复仇的逆向总结
https://www.52pojie.cn/thread-878171-1-1.html
(出处: 吾爱破解论坛)
已经有所提及,可是写的太不详细。。鉴于私信一堆人让我详细写这个,以及上次科技全开没成功写到程序里的尴尬,于是就写了这篇文章。
先做一下免责声明:
科技全开在红色警戒战网对战可用,所以请不要用于商业用途(上次发的居然有人用于商业用途,一个外挂100块钱,是谁我就不点名说了)。用于商业用途请自己承担所有责任。
从本论坛下载的内容仅供交流学习,请在下载后24小时内删除,请勿用于商业用途,否则后果自负
相关视频:https://space.bilibili.com/251535501
https://static.52pojie.cn/static/image/hrline/2.gif
前情回顾:
上一次我们讲到了无限核弹。
红色警戒实现无限核弹的艰辛之路
https://www.52pojie.cn/thread-935581-1-1.html
(出处: 吾爱破解论坛)
pushad
mov ecx,0x14
call 006ceeb0
mov ebx,eax
mov eax,
mov edx,
mov ecx,
push 0
push 0
mov ecx,
push 1
call 006CB560
mov eax,
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
在逆向总结那一节里,我们提到了NewConstructionOptions的那个call。进去之后可以发现一个大大的switch结构。
006CC103|> \6A FF push -0x1 ;Case 0 of switch 006CC0F3
006CC105|.83CA FF or edx,-0x1
006CC108|.B9 D4248400 mov ecx,gamemd.008424D4 ;EVA_NuclearMissileReady
006CC10D|.EB 6A jmp short gamemd.006CC179
006CC10F|>6A FF push -0x1 ;Case 1 of switch 006CC0F3
006CC111|.83CA FF or edx,-0x1
006CC114|.B9 BC248400 mov ecx,gamemd.008424BC ;EVA_IronCurtainReady
006CC119|.EB 5E jmp short gamemd.006CC179
006CC11B|>6A FF push -0x1 ;Case A of switch 006CC0F3
006CC11D|.83CA FF or edx,-0x1
006CC120|.B9 A4248400 mov ecx,gamemd.008424A4 ;EVA_ForceShieldReady
006CC125|.EB 52 jmp short gamemd.006CC179
006CC127|>6A FF push -0x1 ;Case 2 of switch 006CC0F3
006CC129|.83CA FF or edx,-0x1
006CC12C|.B9 8C248400 mov ecx,gamemd.0084248C ;EVA_LightningStormReady
006CC131|.EB 46 jmp short gamemd.006CC179
006CC133|>6A FF push -0x1 ;Case 7 of switch 006CC0F3
006CC135|.83CA FF or edx,-0x1
006CC138|.B9 70248400 mov ecx,gamemd.00842470 ;EVA_PsychicDominatorReady
006CC13D|.EB 3A jmp short gamemd.006CC179
006CC13F|>6A FF push -0x1 ;Case 3 of switch 006CC0F3
006CC141|.83CA FF or edx,-0x1
006CC144|.B9 58248400 mov ecx,gamemd.00842458 ;EVA_ChronosphereReady
006CC149|.EB 2E jmp short gamemd.006CC179
006CC14B|>6A FF push -0x1 ;Cases 5,6 of switch 006CC0F3
006CC14D|.83CA FF or edx,-0x1
006CC150|.B9 40248400 mov ecx,gamemd.00842440 ;EVA_ReinforcementsReady
006CC155|.EB 22 jmp short gamemd.006CC179
006CC157|>6A FF push -0x1 ;Case 8 of switch 006CC0F3
006CC159|.83CA FF or edx,-0x1
006CC15C|.B9 2C248400 mov ecx,gamemd.0084242C ;EVA_SpyPlaneReady
006CC161|.EB 16 jmp short gamemd.006CC179
006CC163|>6A FF push -0x1 ;Case 9 of switch 006CC0F3
006CC165|.83CA FF or edx,-0x1
006CC168|.B9 14248400 mov ecx,gamemd.00842414 ;EVA_GeneticMutatorReady
006CC16D|.EB 0A jmp short gamemd.006CC179
006CC16F|>6A FF push -0x1 ;Case B of switch 006CC0F3
006CC171|.83CA FF or edx,-0x1
006CC174|.B9 FC238400 mov ecx,gamemd.008423FC ;EVA_PsychicRevealReady
006CC179|>E8 82650800 call gamemd.00752700
006CC17E|>8B0D 84EDA800 mov ecx,dword ptr ds: ;Default case of switch 006CC0F3
根据各种case,我们可以获得超级武器的编号:
0 Nuclear Missle(核弹)
1 Iron Curtan(铁幕,也就是台湾人翻译的无敌)
A force shield(立场护盾,你造了高科之后的那个蓝蓝的东西,跟铁幕差不多,但是只能套建筑)
2 Lightning storm(闪电风暴,盟军的无污染超武,符合科学发展观)
7 PsychicDominator(心灵控制,尤里的无污染超武)
…………
剩下我就不说了,大家都识字。。自己去上面的代码里翻。。
有了这些编号,我们是不是可以调用这些超武呢?
pushad
mov ecx,0x14
call 006ceeb0
mov ebx,eax
mov eax,
mov edx,
mov ecx,
push 0
push 0
mov ecx,
push 1
call 006CB560
mov eax,
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
这些参数的哪些表示超级武器呢?
根据上一节的提示,第一个call是获取eax的。而eax就是超级武器编号,那么我们直接修改eax行不行呢?
我们发现,修改eax的只有mov eax,。那我们把ebx+98变成1,得到:
pushad
mov ecx,0x14
call 006ceeb0
mov ebx,eax
mov eax,
mov edx,
mov ecx,
push 0
push 0
mov ecx,
push 1
call 006CB560
mov eax,1
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
立刻注入,发现:
此时发现:
又是那个不能用的超级武器。。
那说明没有调整cd
而出现了核弹0:00说明调整的是核弹的cd。。
那肯定是调整cd那个call参数错了。。
上面那个参数忘记改了。。
重写代码,得到:
pushad
mov ecx,0x14
call 006ceeb0
mov ebx,eax
mov eax,1
mov edx,
mov ecx,
push 0
push 0
mov ecx,
push 1
call 006CB560
mov eax,1
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
再次注入:
{:301_993:}
不过我们发现一个尴尬的事情,用完之后那个铁幕选项不会消失。。
管它呢,反正我也不追求完美2333
同理,可以得到其他超级武器
因此,我们得到超级武器的注入代码为:
pushad
mov ecx,0x14
call 006ceeb0
mov ebx,eax
mov eax,2//此处为超级武器编号
mov edx,
mov ecx,
push 0
push 0
mov ecx,
push 1
call 006CB560
mov eax,2//此处为超级武器编号
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
https://static.52pojie.cn/static/image/hrline/2.gif
到了这里,还有几个人记得住我们的题目?
对,没错,科技全开。。
顾名思义,添加所有能够添加的建造选项。
那肯定是最后一个call的事情了。
mov ecx,0087f7e8
push eax
push 1f
call 006a6300
popad
ret
我们知道eax是超级武器编号,那么1f是否为类型呢?
我们跟进最后一个增加建造选项的call,发现又是一个大大的switch。
在这里下断点,然后窗口化运行程序,动态调试,当建造选项增加的时候会断下来。
依次造步兵、建筑、坦克,得到:
再看刚刚的代码,1f表示的就是超级武器。
因此,假如我们想要科技全开,首先要做到建筑全开。
然后有个猜想,建筑就不用调cd了吧,都是54下。。
建筑cd相关帖子:
论红色警戒2尤里的复仇如何实现秒建
https://www.52pojie.cn/thread-846492-1-1.html
(出处: 吾爱破解论坛)
那我们直接调用最后一个call
先改个7
pushad
mov ecx,0087f7e8
mov edx,
mov eax,0
push eax
push 7
call 006a6300
popad
retn
提醒一句,前面基地址啊还有字符串的参数该传还要传。。
eax我们先改成0,看看注入后会出现什么。(因为下标一般都从0开始)
然并卵。。
猜想原因:0这个建筑就是盟军电场,因为游戏是美国人做的,美国的建筑 的下标肯定靠前2333
那改成A
pushad
mov ecx,0087f7e8
mov edx,
mov eax,A
push eax
push 7
call 006a6300
popad
retn
精彩!
然后我们把自己的国家换成苏军,依次得到:
0=发电厂
1=盟军矿石精炼厂
2=盟军建造厂
3=盟军兵营
4=沙袋
5=盟军维修厂
6=盟军作5战实验室
7=盟军战车工厂
9=磁能反应炉
A=苏联作战实验室
这要试试到什么年份。。
我怎么知道所有建筑的编号。。
接下来是翻车时间:
——肯定不能这么试试,那我们看看有没有能找到建筑编号的地方,最好就像刚刚那种switch一样
跳转跟过来,得到:
跟进本switch每一个call,得到
最后问了一个红警ini大佬,得到了答案:
因此,可以得到一个简单粗暴的办法:用一个循环来搞定。
2019-5-19:纠正一个错误,上图的je应该写成jnz
这里给出红警大佬所给的全部代码
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;雷鸣导弹
他怎么搞的我就不知道了。。我只在ini里翻出来了建筑编号。。
再提醒一句,这个是10进制,代码注入的时候是16进制
如果你担心不够保险,怕eax=f的时候没跳出去,然后就无线循环了,还可以把je改成ja。。
同理,对于小兵、坦克车的科技全开也是如此。。
我没去翻小兵,坦克车的ini,不知道从0循环到几。。大家自己写就行了
这个代码的好处就是,不会像地图全开那样注入两次程序就堆栈爆炸gg了。。所以可以随便找个地方写下来。
然后要注意的是,千万千万不能写在NewConstructionOptions里面,否则会无限递归。
效果图:
奇葩的事情出现了:小兵和坦克出现了一堆我不认识的什么乱七八糟的东西。。
https://static.52pojie.cn/static/image/hrline/2.gif
写文章不容易求加分点赞..
科技全开在红色警戒战网对战可用,所以请不要用于商业用途(上次发的居然有人用于商业用途,一个外挂100块钱,是谁我就不点名说了)。用于商业用途请自己承担所有责任。
从本论坛下载的内容仅供交流学习,请在下载后24小时内删除,请勿用于商业用途,否则后果自负
https://static.52pojie.cn/static/image/hrline/2.gif
等等,你以为这样就结束了吗?
你以为这种暴力循环就能完美解决科技全开问题了吗?
不!真正的实现方式在下面:
调用添加建造函数的实现方式只是一种。那调用添加建造函数的函数是谁呢?
我们下断点,建造任意能提升科技等级的建筑,断点断下,回到上一层,得到:
我们发现无论是28号车船,还是10号小兵,还是7号建筑,都有着相似的结构——判断建筑是否可用,添加建造选项,删除建造选项
(5-20添加:28号,10号,7号指的是16进制)
那我们是否可以修改判断建筑是否可用的返回值来实现科技全开呢?
我们下断点,动态跟踪,然后ctrl+f9到段尾,发现是retn c,而eax返回值是0.也就相当于c语言里面的return 0。那是不是无法建造就返回0呢?
我们把他修改成0,试试
004F7870 B8 00000000 mov eax,0x0 ;判断建造选项是否可用call
004F7875 C2 0C00 retn 0xC
004F7878|.55 push ebp
004F7879|.8BE9 mov ebp,ecx
004F787B|.56 push esi
那添加建造选项肯定就是-1或者1咯哈哈哈
当x=-1时(啊呸,什么x,是eax)
当x=+1时
发现建筑可用,但是造车场之后车造不出来了。。
同理,x=2时防御建筑可用,但是兵造不出来了。
难道不同的返回值对应不同的建造类别??
用ida f5看一下,发现好像确实是有不同返回值
return 0;
if ( v61 <= 0 )
return 1;
LABEL_189:
v63 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)a2 + 64))(a2);
if ( sub_49FAE0(v63) < *(_DWORD *)(a2 + 952) )
return 1;
if ( !a4 )
return -1;
v42 = 0;
if ( vA83E40 <= 0 )
return -1;
v64 = vA83E34;
break;
}
while ( *(void **)(*(_DWORD *)(v64 + 4 * v42) + 108) != v4 )
{
LABEL_197:
++v42;
if ( v42 >= vA83E40 )
return -1;
}
if ( !((int (*)(void))sub_4CA160)()
|| (v65 = sub_4CA160(*(_DWORD *)(vA83E34 + 4 * v42)), (*(int (__thiscall **)(int))(*(_DWORD *)v65 + 132))(v65) != a2) )
{
v64 = vA83E34;
goto LABEL_197;
}
LABEL_199:
if ( *(_DWORD *)(vA83E34 + 4 * v42) )
return 1;
return -1;
}
那这么搞的话修改起来又有2种思路,一种是造不同的类型,然后看看他是从哪个return出去的,在return 之前把返回值eax修改了。。
我没采用这个方法,因为他的retn和下面的case都连在一起了,修改起来很麻烦,还要写跳转。。
如上图,retn下面就是下一个case。直接改会把下面内容覆盖掉,所以要写跳转。那光返回0的情况就2重,这要写多少个跳转。。太麻烦了
第二种办法是在call外面直接mov eax,对应值。。
还是比较麻烦,一是因为
这也太多了吧。。。
二是因为涉及到一个堆栈平衡的问题,还要把堆栈pop出去,寄存器参数改回去
不过我选的第二种。。
https://static.52pojie.cn/static/image/hrline/2.gif
你以为又结束了?
没错,我也觉得结束了。我修改了10个调用这个函数的地址,基本可以科技全开了
但是修改到第十几个的时候,发现了游戏消息循环的下一层call也调用了这个(这个位置我之前做过标记,所以一眼就能看出来)这是一个令人振奋的消息,因为修改这里很可能就相当于修改了全部
这是一个很大的jnz,直接跳过了很多内容,这些内容通过分析,发现居然是循环删除不可建造的!!
006AA790|> \8B0D 4C3DA800 |mov ecx,dword ptr ds:
006AA796|.8B06 |mov eax,dword ptr ds:
006AA798|.3B81 64020000 |cmp eax,dword ptr ds:
006AA79E|.73 16 |jnb short gamemd.006AA7B6
006AA7A0|.8B89 58020000 |mov ecx,dword ptr ds:
006AA7A6|.8B1481 |mov edx,dword ptr ds:
006AA7A9|.33C0 |xor eax,eax ;kernel32.BaseThreadInitThunk
006AA7AB|.8A42 6D |mov al,byte ptr ds:
006AA7AE|.3BC7 |cmp eax,edi
006AA7B0|.0F85 B2020000 |jnz gamemd.006AAA68
006AA7B6|>8B4424 2C |mov eax,dword ptr ss:
006AA7BA|.3938 |cmp dword ptr ds:,edi
006AA7BC|.0F84 BA000000 |je gamemd.006AA87C
006AA7C2|.8B4C24 18 |mov ecx,dword ptr ss:
006AA7C6|.33D2 |xor edx,edx ;gamemd.<ModuleEntryPoint>
006AA7C8|.8A93 CE0C0000 |mov dl,byte ptr ds:
006AA7CE|.8B01 |mov eax,dword ptr ds:
006AA7D0|.8B0E |mov ecx,dword ptr ds:
006AA7D2|.52 |push edx ;gamemd.<ModuleEntryPoint>
006AA7D3|.51 |push ecx
006AA7D4|.50 |push eax ;kernel32.BaseThreadInitThunk
006AA7D5|.A1 4C3DA800 |mov eax,dword ptr ds:
006AA7DA|.6A 10 |push 0x10
006AA7DC|.8B48 30 |mov ecx,dword ptr ds:
006AA7DF|.51 |push ecx
006AA7E0|.8D8C24 880000>|lea ecx,dword ptr ss:
006AA7E7|.E8 84C1E1FF |call gamemd.004C6970
006AA7EC|.813D C802A800>|cmp dword ptr ds:,0x80
006AA7F6|.7D 53 |jge short gamemd.006AA84B
006AA7F8|.8B0D D002A800 |mov ecx,dword ptr ds:
006AA7FE|.8BF0 |mov esi,eax ;kernel32.BaseThreadInitThunk
006AA800|.8D14C9 |lea edx,dword ptr ds:
006AA803|.8D0C91 |lea ecx,dword ptr ds:
006AA806|.8DBC49 D402A8>|lea edi,dword ptr ds:[ecx+ecx*2+0xA802D>
006AA80D|.B9 1B000000 |mov ecx,0x1B
006AA812|.F3:A5 |rep movs dword ptr es:,dword ptr d>
006AA814|.66:A5 |movs word ptr es:,word ptr ds:[esi>
006AA816|.A4 |movs byte ptr es:,byte ptr ds:[esi>
006AA817|.FF15 30157E00 |call dword ptr ds:[<&WINMM.timeGetTime>>;winmm.timeGetTime
006AA81D|.8B0D D002A800 |mov ecx,dword ptr ds:
006AA823|.8B7424 10 |mov esi,dword ptr ss:
006AA827|.89048D 543AA8>|mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AA82E|.8B15 D002A800 |mov edx,dword ptr ds:
006AA834|.A1 C802A800 |mov eax,dword ptr ds:
006AA839|.42 |inc edx ;gamemd.<ModuleEntryPoint>
006AA83A|.83E2 7F |and edx,0x7F
006AA83D|.40 |inc eax ;kernel32.BaseThreadInitThunk
006AA83E|.8915 D002A800 |mov dword ptr ds:,edx ;gamemd.<ModuleEntryPoint>
006AA844|.A3 C802A800 |mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AA849|.33FF |xor edi,edi
006AA84B|>8B4424 18 |mov eax,dword ptr ss:
006AA84F|.8B00 |mov eax,dword ptr ds:
006AA851|.83F8 07 |cmp eax,0x7
006AA854|.74 05 |je short gamemd.006AA85B
006AA856|.83F8 06 |cmp eax,0x6
006AA859|.75 21 |jnz short gamemd.006AA87C
006AA85B|>57 |push edi
006AA85C|.B9 E8F78700 |mov ecx,gamemd.0087F7E8
006AA861|.893D 8C098800 |mov dword ptr ds:,edi
006AA867|.893D 90098800 |mov dword ptr ds:,edi
006AA86D|.C705 94098800>|mov dword ptr ds:,-0x1
006AA877|.E8 74E3DFFF |call gamemd.004A8BF0
006AA87C|>3BDF |cmp ebx,edi
006AA87E|.0F84 AD000000 |je gamemd.006AA931
006AA884|.8A8B CE0C0000 |mov cl,byte ptr ds:
006AA88A|.8B13 |mov edx,dword ptr ds:
006AA88C|.57 |push edi
006AA88D|.51 |push ecx
006AA88E|.8BCB |mov ecx,ebx
006AA890|.FF52 2C |call dword ptr ds:
006AA893|.8B0D 4C3DA800 |mov ecx,dword ptr ds:
006AA899|.50 |push eax ;kernel32.BaseThreadInitThunk
006AA89A|.E8 715CE5FF |call gamemd.00500510
006AA89F|.85C0 |test eax,eax ;kernel32.BaseThreadInitThunk
006AA8A1|.0F84 8A000000 |je gamemd.006AA931
006AA8A7|.8B0E |mov ecx,dword ptr ds:
006AA8A9|.8B5424 18 |mov edx,dword ptr ss:
006AA8AD|.33C0 |xor eax,eax ;kernel32.BaseThreadInitThunk
006AA8AF|.8A83 CE0C0000 |mov al,byte ptr ds:
006AA8B5|.50 |push eax ;kernel32.BaseThreadInitThunk
006AA8B6|.8B02 |mov eax,dword ptr ds:
006AA8B8|.51 |push ecx
006AA8B9|.8B0D 4C3DA800 |mov ecx,dword ptr ds:
006AA8BF|.50 |push eax ;kernel32.BaseThreadInitThunk
006AA8C0|.6A 2E |push 0x2E
006AA8C2|.8B51 30 |mov edx,dword ptr ds:
006AA8C5|.8D8C24 F40000>|lea ecx,dword ptr ss:
006AA8CC|.52 |push edx ;gamemd.<ModuleEntryPoint>
006AA8CD|.E8 9EC0E1FF |call gamemd.004C6970
006AA8D2|.813D C802A800>|cmp dword ptr ds:,0x80
006AA8DC|.7D 53 |jge short gamemd.006AA931
006AA8DE|.8B0D D002A800 |mov ecx,dword ptr ds:
006AA8E4|.8BF0 |mov esi,eax ;kernel32.BaseThreadInitThunk
006AA8E6|.8D14C9 |lea edx,dword ptr ds:
006AA8E9|.8D0C91 |lea ecx,dword ptr ds:
006AA8EC|.8DBC49 D402A8>|lea edi,dword ptr ds:[ecx+ecx*2+0xA802D>
006AA8F3|.B9 1B000000 |mov ecx,0x1B
006AA8F8|.F3:A5 |rep movs dword ptr es:,dword ptr d>
006AA8FA|.66:A5 |movs word ptr es:,word ptr ds:[esi>
006AA8FC|.A4 |movs byte ptr es:,byte ptr ds:[esi>
006AA8FD|.FF15 30157E00 |call dword ptr ds:[<&WINMM.timeGetTime>>;winmm.timeGetTime
006AA903|.8B0D D002A800 |mov ecx,dword ptr ds:
006AA909|.8B7424 10 |mov esi,dword ptr ss:
006AA90D|.89048D 543AA8>|mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AA914|.8B15 D002A800 |mov edx,dword ptr ds:
006AA91A|.A1 C802A800 |mov eax,dword ptr ds:
006AA91F|.42 |inc edx ;gamemd.<ModuleEntryPoint>
006AA920|.83E2 7F |and edx,0x7F
006AA923|.40 |inc eax ;kernel32.BaseThreadInitThunk
006AA924|.8915 D002A800 |mov dword ptr ds:,edx ;gamemd.<ModuleEntryPoint>
006AA92A|.A3 C802A800 |mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AA92F|.33FF |xor edi,edi
006AA931|>8B4C24 30 |mov ecx,dword ptr ss:
006AA935|.3BCF |cmp ecx,edi
006AA937|.7E 64 |jle short gamemd.006AA99D
006AA939|.8B4424 1C |mov eax,dword ptr ss:
006AA93D|.8BD1 |mov edx,ecx
006AA93F|>8B08 |/mov ecx,dword ptr ds:
006AA941|.8B1E ||mov ebx,dword ptr ds:
006AA943|.3BCB ||cmp ecx,ebx
006AA945|.75 50 ||jnz short gamemd.006AA997
006AA947|.8B48 04 ||mov ecx,dword ptr ds:
006AA94A|.8B5E 04 ||mov ebx,dword ptr ds:
006AA94D|.3BCB ||cmp ecx,ebx
006AA94F|.75 46 ||jnz short gamemd.006AA997
006AA951|.8B0D 84EDA800 ||mov ecx,dword ptr ds:
006AA957|.897C24 34 ||mov dword ptr ss:,edi
006AA95B|.897C24 38 ||mov dword ptr ss:,edi
006AA95F|.897C24 3C ||mov dword ptr ss:,edi
006AA963|.897C24 40 ||mov dword ptr ss:,edi
006AA967|.897C24 48 ||mov dword ptr ss:,edi
006AA96B|.894C24 50 ||mov dword ptr ss:,ecx
006AA96F|.897C24 58 ||mov dword ptr ss:,edi
006AA973|.897C24 5C ||mov dword ptr ss:,edi
006AA977|.B9 0D000000 ||mov ecx,0xD
006AA97C|.8D7424 34 ||lea esi,dword ptr ss:
006AA980|.8BF8 ||mov edi,eax ;kernel32.BaseThreadInitThunk
006AA982|.C64424 4C 00||mov byte ptr ss:,0x0
006AA987|.C74424 60 010>||mov dword ptr ss:,0x1
006AA98F|.F3:A5 ||rep movs dword ptr es:,dword ptr >
006AA991|.8B7424 10 ||mov esi,dword ptr ss:
006AA995|.33FF ||xor edi,edi
006AA997|>83C0 34 ||add eax,0x34
006AA99A|.4A ||dec edx ;gamemd.<ModuleEntryPoint>
006AA99B|.^ 75 A2 |\jnz short gamemd.006AA93F
006AA99D|>8B45 54 |mov eax,
006AA9A0|.83F8 01 |cmp eax,0x1
006AA9A3|.7E 29 |jle short gamemd.006AA9CE
006AA9A5|.8B4C24 28 |mov ecx,dword ptr ss:
006AA9A9|.8D50 FF |lea edx,dword ptr ds:
006AA9AC|.3BCA |cmp ecx,edx ;gamemd.<ModuleEntryPoint>
006AA9AE|.7D 1E |jge short gamemd.006AA9CE
006AA9B0|.8D0C40 |lea ecx,dword ptr ds:
006AA9B3|.8D1488 |lea edx,dword ptr ds:
006AA9B6|.8B4424 24 |mov eax,dword ptr ss:
006AA9BA|.C1E2 02 |shl edx,0x2
006AA9BD|.2BD0 |sub edx,eax ;kernel32.BaseThreadInitThunk
006AA9BF|.8B4424 20 |mov eax,dword ptr ss:
006AA9C3|.52 |push edx ;gamemd.<ModuleEntryPoint>
006AA9C4|.50 |push eax ;kernel32.BaseThreadInitThunk
006AA9C5|.56 |push esi
006AA9C6|.E8 C5F61100 |call gamemd.007CA090
006AA9CB|.83C4 0C |add esp,0xC
006AA9CE|>8B45 54 |mov eax,
006AA9D1|.C64424 16 01|mov byte ptr ss:,0x1
006AA9D6|.48 |dec eax ;kernel32.BaseThreadInitThunk
006AA9D7|.C64424 17 01|mov byte ptr ss:,0x1
006AA9DC|.8D0C40 |lea ecx,dword ptr ds:
006AA9DF|.8D1488 |lea edx,dword ptr ds:
006AA9E2|.8D4C95 00 |lea ecx,dword ptr ss:
006AA9E6|.8D5440 06 |lea edx,dword ptr ds:
006AA9EA|.8979 64 |mov dword ptr ds:,edi
006AA9ED|.8979 58 |mov dword ptr ds:,edi
006AA9F0|.8D4490 02 |lea eax,dword ptr ds:
006AA9F4|.8979 5C |mov dword ptr ds:,edi
006AA9F7|.8979 60 |mov dword ptr ds:,edi
006AA9FA|.8D59 74 |lea ebx,dword ptr ds:
006AA9FD|.897C85 00 |mov dword ptr ss:,edi
006AAA01|.8979 6C |mov dword ptr ds:,edi
006AAA04|.A1 84EDA800 |mov eax,dword ptr ds:
006AAA09|.33D2 |xor edx,edx ;gamemd.<ModuleEntryPoint>
006AAA0B|.8903 |mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AAA0D|.8B4424 6C |mov eax,dword ptr ss:
006AAA11|.89B9 80000000 |mov dword ptr ds:,edi
006AAA17|.8943 04 |mov dword ptr ds:,eax ;kernel32.BaseThreadInitThunk
006AAA1A|.8953 08 |mov dword ptr ds:,edx ;gamemd.<ModuleEntryPoint>
006AAA1D|.8B5C24 28 |mov ebx,dword ptr ss:
006AAA21|.8B5424 24 |mov edx,dword ptr ss:
006AAA25|.89B9 88000000 |mov dword ptr ds:,edi
006AAA2B|.8B45 54 |mov eax,
006AAA2E|.B9 34000000 |mov ecx,0x34
006AAA33|.48 |dec eax ;kernel32.BaseThreadInitThunk
006AAA34|.4B |dec ebx
006AAA35|.2BD1 |sub edx,ecx
006AAA37|.8945 54 |mov ,eax ;kernel32.BaseThreadInitThunk
006AAA3A|.8B4424 2C |mov eax,dword ptr ss:
006AAA3E|.895C24 28 |mov dword ptr ss:,ebx
006AAA42|.8B5C24 18 |mov ebx,dword ptr ss:
006AAA46|.895424 24 |mov dword ptr ss:,edx ;gamemd.<ModuleEntryPoint>
006AAA4A|.8B5424 20 |mov edx,dword ptr ss:
006AAA4E|.2BC1 |sub eax,ecx
006AAA50|.2BD9 |sub ebx,ecx
006AAA52|.2BD1 |sub edx,ecx
006AAA54|.C645 3C 01 |mov byte ptr ss:,0x1
006AAA58|.894424 2C |mov dword ptr ss:,eax ;kernel32.BaseThreadInitThunk
006AAA5C|.895C24 18 |mov dword ptr ss:,ebx
006AAA60|.895424 20 |mov dword ptr ss:,edx ;gamemd.<ModuleEntryPoint>
006AAA64|.2BF1 |sub esi,ecx
!!!!!
靠,为什么我一开始分析的时候想不到从游戏主循环这里下手???一层就能分析到这!!
立刻jnz改成jmp,完美了!只需要科技全开一次,本次游戏就可以永久保留科技等级了!!!
https://static.52pojie.cn/static/image/hrline/2.gif
你以为这就结束了吗??
这还真就结束了。。
科技全开在红色警戒战网对战可用,所以请不要用于商业用途(上次发的居然有人用于商业用途,一个外挂100块钱,是谁我就不点名说了)。用于商业用途请自己承担所有责任。
从本论坛下载的内容仅供交流学习,请在下载后24小时内删除,请勿用于商业用途,否则后果自负
相关视频:https://space.bilibili.com/251535501 有下载直接用的吗? xwk 发表于 2019-5-19 18:39
单机模式下,只有玩家有超武,电脑没有
你怕是没有玩过红警吧~~ 本帖最后由 KaQqi 于 2019-5-21 18:05 编辑
从本论坛下载的内容仅供交流学习,请在下载后24小时内删除,请勿用于商业用途,否则后果自负
建筑物代码相关资料我会以其他形式上传 苏紫方璇 发表于 2019-5-19 11:47
膜拜大神,大神好厉害,看完大神的帖子终于可以完爆1v7超武冷酷了
表示我不开挂就能1v7冷酷23333 KaQqi 发表于 2019-5-19 11:57
表示我不开挂就能1v7冷酷23333
我除了有桥的可以断桥来做的基本上玩不过1V7把你改的这个发上来我们也玩一下呗 膜拜大神,大神好厉害,看完大神的帖子终于可以完爆1v7超武冷酷了 单机是不是可以1挑8了 KaQqi 发表于 2019-5-19 11:26
从本论坛下载的内容仅供交流学习,请在下载后24小时内删除,请勿用于商业用途,否则后果自负
我好想明白有什么深层含义了。{:17_1068:}
我是不是知道的太多了?{:17_1062:}
大神给点封口费吧。{:17_1074:} bbsokok 发表于 2019-5-19 12:05
有下载直接用的吗?
没有了。。上次外挂泛滥了,本来ra2ol平台没有外挂。。 可惜了,我就喜欢单机玩而已 KaQqi 发表于 2019-5-19 12:06
没有了。。上次外挂泛滥了,本来ra2ol平台没有外挂。。
。。。我寄几和寄几玩是吧。。。。
楼主可真皮。。。。
攻防转换。。好快啊。。。{:17_1089:}