正确分类游戏检测与浅谈如何过游戏检测
游戏内存检测的大体分类
1.数据校验
2.CRC校验
--------------------------------------------------------------------
关于数据校验,顾名思义也就是校验数据
数据校验到底是校验什么呢?
①如鼠标的XY 和人物的XYZ等
数据校验其实主要就是校验鼠标的XY因为如果我们要写内存辅助,那么鼠标的XY是必须的,因为要写内存自瞄
校验人物的XYZ就是针对某些功能 比如瞬移
②人物手持枪械的数据,比如后坐力和射速
后坐力和射速,基本的数据在本地。我们要实现完美无后和超级射速,也必须要过掉这些校验我们数据的检测
还有很多就不一一列举了。
怎么区分数据校验呢?
①看数据类型 一般来说:四字节和浮点型等 通过直接改数据就可以实现的功能
比如鼠标的XY假如当前鼠标X=20.0我们把他改动为30.0 游戏里直接可以看到鼠标移动,那么这样的一般只是数据校验在工作
②看相关地址的汇编代码
比如你跳转到那个内存地址,看到的是一大堆乱码,而且是跟随你改变数值而变动的,那么一般是数据校验
因为CRC没理由去对这一部分相当于乱码的汇编代码去进行校验
还有很多方法,主要是依据经验去判断
数据校验一般在TP中存在于哪些模块?
根据笔者这几年来的经验来说 数据校验一般是存在于GameRpcs这个模块,当然这个说法不绝对,需要跟进去具体分析
有些数据校验也存在于游戏的主模块里 比如QQ的主模块就是QQ.exe也就是它的进程名
数据校验的原理是什么?
关于数据校验的原理,学过编程的人应该都知道数据算法这玩意
所谓的数据校验
就是把你的当前的游戏数据与服务器的数据进行比对,这是一种
把你的数据校验 通过一个算法计算 看看是否正确,这也是一种
如果不正确,相信结果大家也都知道,无非就是数据异常,封号
举一个小小的例子:
如游戏里 人物的血值(HP)为10的倍数 ,比如110.100等
如果我们这时候通过内存修改器(CE)去修改,比如改为999等
显然999是不能被5整除的我在代码段里去写一个子程序 判断HP是否可以被5整除,如果可以就返回1,不可以就返回0
服务器接收到我的数据为1就是正常游戏,服务器接收到我的数据为0 就是异常游戏
这样就是数据校验的原理了
关于数据校验的分析就到这里 相信大家也都明白了
什么是CRC?如何区分CRC
这里有一篇文章:https://baike.baidu.com/item/CRC/1453359?fr=aladdin
游戏里的CRC,无非就是对游戏内存的汇编代码段进行校验 如add,mov等代码
给大家举个例子:
首先,通过CE查找对象的血量 然后对对象的血量进行内存访问,发现我们攻击对象,对象的血量就会减少,访问框里会有一个mov进行赋值
我们跳转到该地址,例如mov eax,0x100,我们改为mov eax,0这样我们就达到一枪秒杀的效果
但是游戏开发者们不会那么傻
他们会通过CRC对这一大段汇编代码进行校验 如果发现和初始的代码不一样 也就是被改动了 游戏会立刻弹出异常
上面就是CRC的相关介绍
如何找出CRC?
举个例子,比如 0x400000的代码为 mov eax,我们要实现一枪秒杀 要把代码改为 mov eax,0这明显与原来的代码不同
这时候 我们把0x400000这个地址添加到ce的地址表里 然后右键查找是什么访问了该地址
CRC只会访问 不会去改写
大约等几秒(CRC是有一个周期的,这个看游戏开发者设置)
访问框里会出现相关代码,我们跟上去把他干掉就可以了(方法以后会介绍)
CRC一般在哪个模块里?
主要在TenRpcs 这个模块,当然说法依旧不绝对
不同游戏有不同游戏的检测方式,这些都需要去积累 我们才能准确的判断
关于CRC和数据校验前者是校验游戏的汇编代码 后者是校验游戏的数据
如一枪秒杀等 一般属于CRC校验 内存自瞄的一般属于数据校验这说法不绝对,如CX,DXF等游戏的检测十分变态
过游戏检测的时候就是和游戏开发者斗智斗勇的时候,这种感觉非常刺激
关于如何过游戏检测的相关介绍
1.直接hook游戏相关代码 让检测无法执行
2.在校验的时候 jmp到一个空白地址 对返回值或校验值进行赋值,或把校验jmp一个干净的代码段
3.线程过检测 直接斩断线程,让检测无法执行
4.阻止游戏的相关DLL加载
页:
[1]