两种对战类游戏的全图外挂思路

softadmin 2020-11-1 2218

两种对战类游戏的全图外挂思路(作者:老刀软件)

        感谢各位对9528魔兽版本转换器的支持。网上的版本可能也存在问题(部分软件站点擅自删除了附带的补丁包,导致无法进行版本转换),如无法使用,可以在本站直接下载,也可以寻找大小为几十MB的版本下载。本人也不再从事相关工作(不是外挂制作,请不要臆测-_-),因此,停止更新。为感谢支持,发布此文,分享一些关于实时对抗游戏的外挂与反外挂的浅显看法。

        先说一下反外挂的思路。从防范的时间来说,可以分为预防、检测、追捕等。

        预防,顾名思义就是要扼杀外挂于萌芽状态,主要针对外挂作者。比如,检测od、windbg等调试工具,IDA等静态分析工具,以及一些抓包软件等,或者检测游戏目录下面有没有idb之类的分析工具所生成的文件。一旦发现可疑软件,就主动退出游戏。比较狠的,某大厂似乎直接将类似帐号标记为外挂使用者或外挂作者,然后封号。

        一般来说,大部分游戏公司应该都有类似检测机制,只是严格程度略有不同,而本人上面提到的那些,只是随便举例,每个游戏的具体检测内容又有不同,不可一概而论。

        检测,主要针对外挂使用者,在使用过程中扫描检测。检测手段就比较多了,有针对外挂实现原理的定点检测,也有针对操作行为的检测,主要方式有检测可疑文件、可疑窗口、可疑进程、可疑模块、可疑内存块、可疑驱动、可疑行为,有通过检测结果直接判定的,也有通过检测结果发现外挂的具体文件,进而进行二次扫描。

        比如利用调试控制寄存器的外挂,扫描寄存器就很容易发现。利用输入法注入的,如果这个输入法程序连窗口什么的都没实现,也是可疑的。利用dll注入的,没数字签名认证的dll就是可疑。窗口隐藏、进程隐藏、dll隐藏,这些也算可疑,一般通过驱动实现检测。对进程进行patch的、内存校验或文件校验值不对的,也是可疑。注册了快捷键的,或者键盘钩子的,也是可疑之一。

        行为可疑。比如游戏过程中,游戏窗口被置于后台,而新被激活的窗口即是可疑。

        而不同公司不同游戏的检测方法又不同。因此,反检测手段也不同。比如有的游戏外挂作者回始终将自己的进程窗口置为非激活状态,以躲避激活窗口检测。而针对扫描可疑模块进行类似病毒特征码扫描的方式,有的外挂作者会在进程中分配大内存块使得反外挂检测引擎长时间扫描无用的内存块,也有的外挂作者会不断频繁创建内存可执行模块,然后不断迁移实际执行的内存块。

        而检测端,则可能有直接将内存镜像下来的方式,来实现快速创建快照,避免外挂迁移可执行模块。

        诸如此类的检测方式很多。因此误判的可能性也就比较多。就需要后续确认,或者说是追捕。

        追捕手段因不同游戏而不同。也可以针对所有用户,也可以只针对被举报的用户。针对所有用户的追捕手段一般需要比较精确,具体方法也是因人而异。但可能更多游戏公司采用的是后者,即,只针对被举报的用户。因此出现一些情况,比如一旦被举报可能很快被封禁。而针对被举报的用户,比如被举报+有上述被检测到的可疑内容,那基本上认定为使用外挂,同样,这种肯定是有误报的。也可以对被举报的用户进行重点关注,比如截屏、录屏。

        关于外挂与反外挂的闲聊到此结束。鉴于反外挂的检测,可能更多是通过可疑检测,那么规避可疑行为就是关键之一。因此,针对对战游戏开全图功能,本文提供一个技术方案,进而规避检测。

        大致思路为:本机通过读取游戏进程数据,进而分析出对手所在位置,然后传输到其他机器甚至手机上,进而在其他机器或手机上绘制出对战中各单位的实时位置。由于开图效果在其他机器或手机上,所以本机从视觉效果上和普通玩家无异。并且这种不需要对游戏进程打补丁,适当做好进程或dll的伪装,应该效果不错。

        当然,还有一种更酷的思路,即数据同步。比如,在局域网网关上进行数据转发,或者开启sniffer等等,最终将发往A机器的游戏数据包同步到B机器。而B机器上对游戏进程进行打补丁,最终实现B机器的数据不外发(包括反外挂模块),从而B机器上实现类似录像回放的功能,从而可以看到整个游戏的全貌,而且实时同步,这种对竞技游戏战队应该非常有用。

        有人可能要质疑思路的合理性了,实际上,本人的这个想法主要针对魔兽争霸,而针对魔兽争霸的数据同步,实际实现不难。所以,想质疑的,就抛弃自己的想法吧。转载请注明作者:老刀软件。

        至于这两个方法的检测和防范,相信从业者很轻松就能想出来,这里就不啰嗦了。以下提供第一种方法的部分代码供参考。

        设计思路:通过注入到360安全卫士进程,让360安全卫士给我们的外挂提供安全保护,减少被反外挂扫描的风险,然后在360安全卫士进程不断读取魔兽争霸进程的游戏数据,然后发送到其他电脑或手机,再在其他机器上绘制小地图实时内容。

        既然要绘制小地图,就得解密小地图的背景图等等,这些就不啰嗦了,主要是war3mapPreview.tga文件。

        此外,需要读取英雄单位列表和其他单位列表,这两个是关键。以1.27.1的war3版本为例,英雄列表HeroList的基址为0x570CC(Storm.dll),Unit单位列表的基址为0xD70808(Game.dll)。

        读取HeroList基址的内容,得到g_HeroList,再偏移0x1C,里面存储的是英雄列表的内存块dwAddrListBegin。当然,这个实际不是英雄列表对象,由于逆向水平有限,这里只是假设它是这个对象,方便理解。得到 dwAddrListBegin,之后遍历这个内存块,得到英雄单位列表。单位列表的获取类似。以下是英雄和单位的数据结构,上面的内存块的数据,直接分批次读取到这样的结构体就可以了。

struct UNIT

{

BYTE * pUnit;

STATE state; //单位状态,0x40表示活着

INT ownerPlayerId; //单位的所有者id

TYPE type; //单位类型

bool isDead;

bool isHero;

bool isStructure;

float posX;

float posY;

DWORD unitId;

};

struct HERO :

public UNIT

{

float HPCur;

float HPMax;

float MPCur;

float MPMax;

float armor; //护甲

float moveSpeed; //移动速度

float attackSpeed; //攻击速度

float attackDistance; //攻击距离

int empirical; //经验

int power; //力量

int intelligence; //智力

int agile; //敏捷

int level; //等级

};


        完整代码不提供了,也请不要索取。留一点自己研究的空间,说不定您会有更新奇的想法。

        转载请注明作者:老刀软件


最新回复 (0)
返回