简单谈谈“游戏圈”所谓的神乎其技的行为检测

1  旧 2013-03-21, 18:44:50  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(1)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

开始写这些东西只是想说明几件事儿:
1.这个世界有矛,必有盾,相反有盾,也必有矛。世界上没有不透风的墙。
2.有些东西不是传说中的那么神。
3.传说是怎么来的。


游戏圈里不少走上快速发财道路的人对行为检测这个说法不陌生,
从这个词诞生以来,各类封号统一说法行为检测,
而后一直就有人想过各类对抗(什么数值模拟,什么技能模拟),
结果一直没啥明显的效果,
最后悲情的开始宣传行为检测彻底是游戏服务器对于数据分析作出来的。
其实真相不是这样的...

所谓行为检测,其实能够看做几种检测的组合加上一个简单到可怕的监控策略。
首先是程序代码暗桩,不是说这些暗桩 人看不到,只是因为VM的缘由,不少人大脑自动忽略了暗桩——在这里重审一下,代码VM化,真的杀伤性强大...
曾几什么时候一个简单的Flag标记和一小段比较坐标移动记录的代码搞残无数高人,
还曾几什么时候一个简单的不可见标记的暗桩搞残无数全屏...
因为不知道找不到暗桩,因此开始有人大声宣扬这是行为检测。

而后是神秘信息通讯动态检测,这里的神秘信息不少,有进程,有窗体,有各类各样的东西(cpuid,mac,bios,硬盘,系统版本,安装过的软件等等一个不能少)
这些东西拿来检测什么呢?主要是断定多开,多帐户同一机器登陆等等,甚
甚至有的会上传未知进程和运行模块的文件等等东西...
而这一切均可以是一段随时随地到达机器上的shellcode模样的东西(某公司使用的是明文lua脚本,某某公司使用抽象代码——自带解释器??),
因而因为进行逆向分析的人员没有长期监控研究,因此发现不了这种动态检测,
因而被XX后又有一些不肯意继续被坑下去的人就开始加入大叫行为检测的行列。

最后是一个策略,这个策略就是不进行即时处理,好比一个检测发现问题了,能够等3天后把检测出问题的机器上登陆过检测出的问题的账号统一封号,或者干脆次日把与检测到的账号发生交易行为最多的账号封号...因而又有人大叫行为检测。

说这些到底有木有真正的行为检测,实际上是有的,可是基本很少见,也没几个真的大规模应用(本身猜测服务器负担吧~~)


第一篇就到这里吧,后面从第二篇,我开始讲讲一些具体的检测code是怎么写的~~

第二篇  http://bbs.pediy.com/showthread.php?t=166298
第三篇  http://bbs.pediy.com/showthread.php?t=166302
第四篇  http://bbs.pediy.com/showthread.php?t=166309
第五篇  http://bbs.pediy.com/showthread.php?t=166492
第六篇  http://bbs.pediy.com/showthread.php?t=166574
第七篇  http://bbs.pediy.com/showthread.php?t=166703

IGS 国际游戏安全组织 站点 
 
 
1  旧 2013-03-21, 20:19:24  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(2)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

上一篇谈了一些东西。

这里开始想说说检测code是怎么写的。这里不讨论进程,窗体这些常见信息的检测。
假设被检测的东西已经完美突破各类暗桩,各类ws的扫描。


本篇就先来一个日了无数纯CALL模型的辅助的检测吧。
下面每篇再多讲一些~

关键性的代码很简单
服务器发个请求XX检测的包过来
本地返回下面代码计算的数据
代码:
DWORD GetInputAwayTime()
{
  LASTINPUTINFO lpi;
  lpi.cbSize = sizeof(lpi);
  GetLastInputInfo(&lpi);
  return DWORD((GetTickCount()-lpi.dwTime)/1000);
}
做用就是计算键盘,鼠标,手柄这类设备有多少秒不操做了~~
这个代码是有不少变形的,好比使用IdleUIGetLastInputTime这个api,
或者经过设备钩子记录最后输入时间(有的游戏甚至用驱动去记录的...)
服务器根据你的操做离开时间长短和进行了那些不可能离开操做的事情来判断...
 
 
 
1  旧 2013-03-21, 20:58:56  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(3)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

第二篇中谈到了对纯CALL的辅助软件的一种检测手段,索性接着乱谈这种辅助的检测手段。
不过这里谈谈暗桩模式的检测,堆栈遍历逐层找返回的EIP相信不少人都会。
不过在某些Call的地方插入下面这样的代码,好比游戏逻辑的发包call的加密call里面
因而悲情又出来了~
代码:
  WCHAR wzCallerName[MAX_PATH];
  PVOID dwRetArray[62];
  DWORD dwRetCount;
  BOOL bNeedLogStack = TRUE;
  dwRetCount = RtlCaptureStackBackTrace(2,50,dwRetArray,0);//用api是很差的,能够本身实现的说~~
  if (dwRetCount)
  {
    for(DWORD xIndex=0;xIndex<dwRetCount;xIndex++)
    {
      if (CheckExcepAddr((DWORD)dwRetArray[xIndex]))//排除部分白地址
      {
        bNeedLogStack = FALSE;
        break;
      }
    }
    if (bNeedLogStack)
    {
      for(DWORD xIndex=0;xIndex<dwRetCount;xIndex++)
      {
        GetCallerModule((DWORD)dwRetArray[xIndex],wzCallerName);//获取地址模块名称
        ReportToSrv((DWORD)dwRetArray[xIndex],xIndex,wzCallerName);//把信息写入定时返回服务器的数据体里,嘿嘿~
      }
    }
  }

第三篇内容就这些吧,还有几个有意思的检测和暗桩的方法等继续讲~~
 
 
 
1  旧 2013-03-21, 21:42:58  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(4)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

接续上篇 第三篇~
先补充点检测技巧
不少人会注意到检测扫描中的进程,模块,窗口的扫描(大部分写检测的人都以为这些就ok了),可是不会注意到能够经过扫描本地TCP链接信息来检测——好比某辅助会链接固定登陆验证服务器(ip?端口?),因而服务器上添加一个扫描特征,完爆之,之后只要是这个服务器的辅助直接就是不解释封号...

接着进行本篇的部分,上次继续讲了经过call的辅助的检测,此次就不讲它了,我换个话题,讲讲一直以来被不少人推崇的模拟设备操做的辅助的检测。

首先对后台模拟按键的检测
有两种后台模型,一种是消息的,不过估计如今已经绝种了,是个游戏公司开发都会dinput了。
一种是dinput里作手脚,二者检测方式同样,直接用GetKeyState结合GetForegroundWindow爆菊花(经过其余方式获取按键状态和窗体位置层次信息同样能够哦)——检测出来不封号,直接服务器留个记录,等那天高兴了再封。
接着就是纯前台的SendInput或者驱动(NTIO也算是驱动吧)模拟的,这种其实很很差检测,在32位系统里一般是经过内核hook来进行处理的,可是对于64位系统或者重载内核绕过hook的状况则须要一些新的小技巧就是记录按键点击的相对坐标,通常模拟辅助的点击坐标都是很是稳定的,而后经过一组特征来检测,不过这里已经涉及超出本篇的内容了——必须抓到样本才能够了。

第四篇有点水,第五篇尽可能就来点不水的内容。 
 
 
1  旧 2013-03-22, 20:23:31  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(5)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖


尽可能不水~~

开篇先来一种检测小trap,HANDLE检测,这个检测主要是枚举句柄而后检测的东西好比隐藏的进程,特殊的被打开文件之类等东西,有时候也用来检测是否存在多个自身(基于对某些特别句柄的检测...)

接着进入本篇的内容,本篇说2个检测,也是不太常见的,和比较冷门。
第一个是对脱机类型的辅助的检测,服务器上记录累计在线时间长度(好比累计在线3天,1周,2周等),在总时间达到某个值的时候发送一个特殊数据给客户端,客户端抓住特殊数据后返回特殊返回结果。看似简单的东西,可是效果很好很强大。触类旁通一下,还能够是帐户角色等级,好比角色到达70级了,发检测...甚至是邮寄物品的次数啊,角色身上的钱数啊,好多可能的判断标准,因此效果很好,又很难被解决。

第二个是对非脱机的一个检测,这个检测颇有意思,就是经过Windows自带的pnp即插即用接口去获取当前监视器的产品id(目前都是WMI方式的了,不多用SetupApi),而后返回给服务器。这里触类旁通一下,其实还能够检测鼠标链接状态,键盘链接状态等等,甚至有的同事想出来若是存在摄像头则拍照取回判断是否存在人脸等等...

补充一下:
对于非脱机的辅助还有一种比较好的特殊手段,就是发个GM聊天信息给可疑的游戏玩家。

下一篇,准备讲一些关于多开的检测。
PS:若是须要讲一些其余的检测,请在本帖跟帖说明就好了,可是本人不针对任何游戏进行任何阐述,只能对某种检测进行一些解释和说明。
 
 
1  旧 2013-03-23, 14:12:03  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(6)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

接续第五篇,上回说,这篇主要讲讲多开检测。

先来看看通常咱们知道的多开检测有哪些
1.窗口和进程
2.各类各样的互斥体系(Event啊,Mutext啊,信号量啊,冲突域啊,Atom锁啊,pipe啊,本地端口啊,MapView啊,LPC啊,还有用RPC COM的,甚至有用特殊Cookie的~)
3.游戏保护的通讯(

这三种就是常见的通常全宇宙都知道的~
那么这里也再也不多说了,接着我来说讲少数的
1.硬件id记录
2.服务器ip记录
这两种如今也逐渐被重视了,因此也不是我想说的。

我这里提一个不多有人注意到的东西::GUID
关键API:CoCreateGuid
流程:首先读取本地保存记录(能够是临时注册表或者临时文件或者游戏保护公共内存或者交互式Set的Cookie——Cookie这种模型有时间再细说)里的GUID,若是没有就生成一个,而后保存一下;若是有则提取GUID投递给服务器...
服务器上判断不一样帐户登陆的GUID出现重复次数,根据CoCreateGUID重复可能性的说法同一个GUID最多同时存在2个...(系统重启前游戏保存的GUID通常是不消失的...)

下面是解答 某位同窗提出的 内存检测的时间了
内存检测有多种:
常见的是检测HOOK,这个很常见,基本都知道。
接着是检测模块或者代码,这个也是很常见的。
接着是检测游戏信息完备的,这个其实不少都作,可是作的好很差都很差说。
我来谈的也是这种检测 信息完备的,作法有不少种,
最多见的就是用复制多个角色对象,而后对比对象,这种比较麻烦的是服务器刷新数据,你要刷新多个对象数据。比较简单的方法,就是把对象的属性表(这种检测通常都是开发商提供代码的前提下才能进行的)在每次关键操做后计算一个HashStamp发给服务器(服务器上也有角色属性并且也支持Buffer叠加的状况下才ok..)而后就不用说什么了。
还有一种比较取巧的办法就是角色按照等级各类属性有个最大属性值(装备按照id属性也存在最大值,举例,1级的角色最大HP是300,装备加成最大是200,因而最多只有500的HP超过500就悲剧吧~),某一项数值超过最大属性极限时就向服务器发个包,服务器返回一个当前服务器上的角色信息,而后本地再次对比,而后再通知服务器是...

就讲到这里,最后说一下关于VM的问题,归根揭底不少检测都是要调用API的,因此只要顶住API的调用,必然能够发现检测的秘密,因此为了保住检测的秘密,API如今不少都是reload和抽取的~~

下一篇,讲讲 网页游戏怎么作检测的。

从头看起 第一篇位置: http://bbs.pediy.com/showthread.php?t=166288
PS:若是须要讲一些其余的检测,请在本帖跟帖说明就好了,可是本人不针对任何游戏进行任何阐述,只能对某种检测进行一些解释和说明。
 
 
1  旧 2013-03-24, 20:18:34  icon1  【原创】简单谈谈“游戏圈”所谓的神乎其技的行为检测(7)
cvcvxk 当前离线 添加 cvcvxk 的声望 反映此帖

接续上篇,本篇讲讲 网页游戏怎么检测辅助。
网页游戏因为没有客户端能力,因此检测作起来很麻烦,不少操做没法像普通游戏那样随心所遇的去作。并且因为网页游戏自己设计上可能考虑的不周全,从而致使辅助很容易出现(有的网页游戏甚至是能够用CE修改充值的钱数...)。

先讲一下关于网页游戏内存修改的检测,通常是把即时数据发送给服务器作验证,或者干脆服务器负责重要计算,目前没啥好的检测方法。
接着讲一下页游对于封包的检测,FLASH页游基本都有封包的,因此封包修改的辅助也是存在的,大部分页游对于封包修改都无解,不过有一种比较靠谱的封包检测是封包数据自签名...算法MD5+RSA...
最后来讲一下页游对于各种辅助的检测能力
1.输入模拟类,目前无解。
2.Hook封包并修改,目前有sighash方案。
3.本地内存修改,目前靠客户端和服务器的数据对比,也是发包的...
4.Flash解析hook修改,目前无解,由于页游自己环境局限...

页游的麻烦主要是被浏览器局限住了,自己代码运行全面受限,不能作不少事情。
相比之下微端要好不少。

本篇完成,也是这个系列的最后一篇了,其余更系统更细节的内容就再也不作谈论了。
其余东西,如手游啊,设备网游啊(Wii,PSN,xbox上的网游...),这些游戏的检测基本都很相似的说~


从头看起 第一篇位置: http://bbs.pediy.com/showthread.php?t=166288 
相关文章
相关标签/搜索