【原创】红色警戒2-尤里复仇之游戏内部集成辅助002
2021-11-17 09:40:00 Author: mp.weixin.qq.com(查看原文) 阅读量:24 收藏

作者坛账号:blbljj008

鉴于上一个帖子有点火,于是我加班加点把2号界面也设计完成了,并且调整了1号界面。代码也全部完成,虽然不完美,也许有bug,但是能用。

游戏成品图

1号界面集成跟玩家有关的控制类功能。
    功能说明:在游戏中,你只能控制一个玩家的生产,至于想控制谁,由你决定,这里为了你听得更清楚,我用本机玩家来表示你出生的玩家,
    用被控制的玩家来表示你侵入的殖民玩家,当你从本机玩家切换到被控制玩家的时候,你需要先刷新一下电力,比如收一下基地,或出售一
    个电厂,这样建造界面才会刷新,刷新之后就可以正常被控制的玩家的建筑界面了,这时本机玩家属于无人控制状态,你一切操作都在玩被
    控制玩家,这时如果你选择了观战,那么你和网络对面的他,都会观战,这时你再切回本机玩家,那么就相当于踢出了他。如果你选择退出,
    那么相当于你和他同归于尽了。还可以取消他生产的东西,或者移动他的部队等等吧,做点坏事,戏耍一下室友非常好用。
    此项功能属于可以联机使用。
2号界面集成跟的是一切普遍的功能,功能的名字都很简单,一看即懂。
    控制所有部队-------->所有能看见的部队,无论陆海空,无论隶属于谁,你都能控制移动。
    获得全球卫星-------->就是开全图,这个有很多种方式实现,我用的最简单一种。
    这两项功能属于可以联机使用。
    无限钱      -------->一次性加很多钱。
    随处建造    -------->哪都可以建造建筑,除了水里和天上还有地图外面。
    无限电力    -------->把电力负载改为0。
    无限超级武器-------->超级武器随便用。
    一星兵营    -------->偷兵营,使生产的大兵都是一星的。
    一星坦克    -------->偷重工,使生产的坦克都是一星的。
    小兵自动疗伤-------->大兵受伤后,自动回血。
    坦克自动疗伤-------->坦克受伤后,自动回血。
    瞬间建造    -------->生产的东西,点击生产即可完成生产。
    以上是单机功能,联机使用会崩溃。  

下面说正题,设计2号界面,我就不细说了,请看上一贴,原理一样。本帖重点说怎么写入这些选择框的代码。分以下步骤:
1、实现这些功能的游戏代码研究,此步骤略过,我直接说结果。以几项功能举例,全说累得慌。下载我改编好的,自己分析去吧。
   很多功能,网上都有资料以及辅助,都可以参考研究。
   1)、控制的原理
        游戏内部有个基址,是本机指挥系统的基址 00A83D4C 。
        还有个玩家列表的基址 [00A8022C]+i*4  i表示玩家序号。
        把 i玩家的基址赋值给指挥系统,就能控制谁,就这么简单。
        控制1号的代码例如:

        mov ebx, 00A8022C        mov ebx, [ebx]        mov ecx, 1        mov esi, [ebx+ecx*4]        mov [00A83D4C], esi


   2)、全图
        实现的方式很多,改跳转、调用间谍卫星的call、直接写地图数据。
        我用简单的改跳转来实现。

        006D88FC - 75 05                 - jne 006D8903      -------->   改 jmp

   3)、控制所有
        游戏内有个call(子函数的意思),判断单位的所属,自己的返回1,不是自己的返回0。谁来都返回1,就控制了所有部队。

        call 0050B6F0 判断所属的函数。        内部        0050B716 - 8B 15 4C3DA800  - mov edx,[00A83D4C] <<        0050B71C - 33 C0  - xor eax,eax        0050B71E - 3B CA  - cmp ecx,edx                      -------->   比较所属,改 nop


2、点击选择框的时候,拦截一下,加入游戏功能的代码。
   1)、拦截选择框消息,点击任何的选择框都会进过这里,从这里跳走,判断点击的哪个选择框,执行相应代码。        

        00616785   .  68 11010000        push    0x111                                       |Message = WM_COMMAND        0061678A   .  57                 push    edi                                         |hWnd = 0x12B9B4        0061678B   .  FF15 A4147E00      call    dword ptr ds:[<&USER32.SendMessageA>]       \SendMessageA

   2)、写入执行代码,以控制全部部队为例,需要用到3个api,完全现xiao的。

        GetCurrentProcessId        OpenProcess        WriteProcessMemory                代码如下:        pushad                                                     call dword ptr ds:[<&KERNEL32.GetCurrentProcessId>]             ; [GetCurrentProcessId                                                           mov ebx,0x8                                                                                                  mov ecx,0x20                                                                                                 or ebx,ecx                                                      ; /ProcessId = 0x650                                                              push eax                                                        ; |Inheritable = TRUE                                                              push 0x1                                                        ; |Access = VM_OPERATION|VM_WRITE           push ebx                                                        ; \OpenProcess                               call dword ptr ds:[<&kernel32.OpenProcess>]                            push 0x9090                                                           mov ecx,esp                                                                                                                          push 0x0                                                        ; /pBytesWritten = NULL                      push 0x2                                                        ; |BytesToWrite = 0x2                       push ecx                                                        ; |Buffer = 0012D2B8                         push 0050B71E                                                   ; |Address = 0x50B71E                       push eax                                                        ; |hProcess = 00000470                       call dword ptr ds:[<&kernel32.WriteProcessMemory>]              ; \WriteProcessMemory                       popad                                                                       

一号界面的功能,我是盟军,上来就控制了粉色电脑


2号界面的功能,无限钱,开地图等等


我改写的代码,没考虑代码健壮性这些问题,比如 mov ebx, 00A8022C 之后没有test ebx,ebx 之类的,存在bug在所难免,待你完善!      
以上都是现xiao现卖的,一切的一切都是我瞎编的,你上了我的急了咣当了吗?如果你有不同的思路,回帖一起研究!
战网坦克大战,走起!如果你发现了我,下手轻点!如果我定点清除了你的隐形基地,有可能就是我哦!
最最后,把评分刷起来,家人们,老铁们,后排的同学,别睡了,你们xiao会了吗?

附件见左下角原文。

--

www.52pojie.cn

--

pojie_52


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5Mjc3MDM2Mw==&mid=2651137047&idx=1&sn=500a222521102930c6622821b65bff64&chksm=bd50b4438a273d55d52ad289f0f9f7e8a95de6f3d6653c7b12f901818db6ca48b5ac1acba18d#rd
如有侵权请联系:admin#unsafe.sh