挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
游戏交易就上寄售网-专注稳定-诚信赢天下玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)天下盾/国内/免实名/免备案CDN无视一切CC/DD攻击 找塔科夫作者TG @wuhao1954 QQ283931494 →入驻S9企业发卡网各种全黑号辅助群:475351077
██【我要租此广告位】██... .
查看: 6827|回复: 15
打印 上一主题 下一主题

[讨论交流] 规避网络游戏的 检测机制

[复制链接]
4中级会员
330/600

330

积分

138

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
192
海币
673
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-9 18:05:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑



规避网络游戏的 检测机制
I-介绍
你们有些人可能已经知道,很多游戏公司(译注:就是指暴雪)最近对“黑客”采取了严厉措施。他们全方位地实现了基于用户态(userland)的检测机制,手段从非常简单到极其复杂的都有。我在过去几周里花了大量的时间,试图找到一种通用的规避检测的方法。从某种意义上来说,我们面临的处境和游戏公司很像:你只需找到他们的游戏系统的一个缺点就可以加以利用,而他们必须把系统设计得毫无漏洞;同样,在我们隐藏自身躲开他们的检测代码时,他们只要发现一处失误就可以抓住我们,而我们要把系统设计、实现得W美无缺。下面的文章是我在这方面的尝试。它肯定不是完整或者W美的,但我想这是朝着这个目标迈进的第一步。
II-已加载模块的检测
这里假设我们要往目标(译注:指游戏进程)加载一个模块(大部分 或者bot的做法)。我们必须对两种不同的情况加以区分,它们都可能导致恶意模块被检测出来。这两种情况是:注入时和其他时间(译注,指 加载时和 工作时)。
基本上每种DLL注入法都会在某处调用LoadLibrary。因此如果你想捕捉模块,一种简单的检测办法是截获LoadLibrary(或者LdrLoadDll,或更底层的Native API)。
这个问题有两种解决方法。第一种也是最简单的一种方法是把模块名称随机化。由于很多合法软件往系统里所有进程注入DLL(Trillian, AIM, 热键软件,等等),合理的检测系统不会使用“白名单”设计(这种检测方法确认只有那些验证过的模块可以加载,而把那些没在白名单上列出来的统统看成恶意模块),因此他们只能用黑名单,这就使得随机化模块名称是对付这类检测的W美、可行的解决方案。
我实现的另外一种方法是换一种做法来注入DLL,我称之为“手工映射”(manual mapping)。第一眼看上去,去模拟windows的PE loader是一件令人沮丧的事-你很难把每件事情都做正确。但其实它也没那么难,我的ManualMap(附录)代码就是干这个用的。我知道对ManualMap还可以做很多很多改进-事实上我自己有一个改进很大的版本-这个只是一个概念验证(proof of concept)的东西。
模块被注入到正在运行的进程后,有两种办法可以检测到它。第一种是扫描模块链表或者对那些你认为是 的模块调用GetModuleHandle(译注,看GetModuleHandle是否返回NULL)。对付这种检测的办法是利用CloakDll(附录)之类的工具把你的模块从链表中去掉。或者用ManualMap,这样你的模块从一开始就不会被加到链表中。我认为第二种做法好一些,但他们差不多是一样的。
第二种检测已加载模块的方法就聪明多了。它的做法是枚举系统中的所有内存页面(内存页面是1024字节对齐的,所以这其实很容易做),然后检查不良代码的特征码。应对措施是做一个改进的dll loader,把内存页面的边界到实际数据的起始偏移随机化(译注,也就是说不把DLL加载在页面边界处,而是离边界有一个随机的偏移)。然而,我觉得更好的方法是创建两个新的空白页面来包住你的模块,然后用VirtualProtect给这两页设上PAGE_GUARD标志。标有PAGE_GUARD位的内存在访问时会产生一个异常,你可以用未处理异常过滤器(unhandled exception filter)、向量化异常处理(vectored exception handling)或者KiUserExceptionDispatcher hook(我推荐后者)捕捉这些异常,这样碰到扫描时你就有机会做一些处理来避免检测代码抓到你。
III-Hooks,Patches和CRC检查
值得让人一用的 基本上都会以某种方式修改游戏代码。但是修改代码是非常容易被检测到的,到现在也没有人能对这个问题提出一个可行、通用的解决方案。我恐怕也不敢号称我已经完全解决了这个问题,但我发现了一个让它变得驯服点儿的办法。
我提出过一种不用修改任何目标进程代码就能hook函数的方法,唯一的缺点是你只能同时hook4个函数。我的做法是利用调试寄存器(即硬件断点),你可以在附录的CHook类中看到我的实现。由于调试寄存器检测起来相当容易,任何人只要用CONTEXT_DEBUG_REGISTERS来调GetThreadContext就可以发现它,随便一个异常处理例程都会拿到一个包含调试寄存器的上下文结构(context structure),等等。解决办法是hook住NtGetContextThread、NtSetContextThread和KiUserExceptionDispatcher。当然啦,你得用一些patch来hook这些API。由于颇有一些防病毒/防广告/防火墙软件也hook这类函数来“增强系统的整体安全”,所以检测系统如果仅仅因为你改了这些系统dll就认为你作弊也是不大可能的。这意味着你可以安全的hook这4个函数,用不着担心被检测。
即使他们也许不会仅仅因为在系统模块中发现了这些hooks就抓你,但它们还是给检测留下了一点线索-他们可以通过定位你在系统模块中的hooks,分析patch的跳转指令看它跳到了哪里,然后对hook处理过程做一下CRC就足以把你认出来。
这又有两种解决办法。一种是利用int 3断点指令来做hook,然后捕捉异常(如果看的够仔细的话你会发现这在我的CHook类里也实现了)并把异常重定向到合适的hook处理过程-你需要用标准的jmp patch来hook KiUserExceptionDispatcher(这有点和我们的目标矛盾),或者用两种标准的SEH(结构化异常处理)形式之一。
还有一种办法,我觉得要好的多,虽然实现起来有点儿困难。其实也没什么花头,就是写一个hook处理过程的变形引擎,在真正有用的指令之间填充NOP等效指令(NOP等效指令是指mov eax, eax之类的指令。译注:push eax, pop eax这样的也是)。这样,对你的函数做CRC检查就行不通了。我现在还没有这么做,不过以后我可能会写些PoC代码(译注:PoC即Proof of Concept)。
最容易的一种做法是从shellcode那里来的。我敢肯定你们都知道,为了避开IDS签名(译注,IDS=Intrusion-detection system),shellcode通常是加密的,带一个动态解密的loader。用汇编给运行时解密代码写一个简单的变形引擎是很容易的,通过在不同的指令之间放置NOP指令,并且让****在每次加、解密时随机变化,你可以把创建签名的任何企图变得非常困难-即使不是不可能的话,而且不会牺牲多少性能。
调试寄存器在其他很多方面也是相当有用的,你可以用它hook内存读写和指令读取,这意味着你可以为内存修改做一个回调函数(用在内存数据监测上很理想,这意味着你再也用不着轮询了)。对调试寄存器的完整描述可以在附录中找到。
另外一点要考虑的是,他们可能都不检测你的API hooks,简单的用原始数据patch回去就能让你的hooks无效。这种方法实现起来不难,而且有足够的可移植性-因为不同的Windows版本中大多数API的开始几个字节是不会经常改变的-游戏公司是有可能这么干的。要对付这个问题,我们得意识到一点,就是在对进程映象的代码段进行写操作之前,必须调用VirtualProtect临时改变它的页面属性。因此,截获NtProtectVirtualMemory就可以防止他们轻易的覆盖掉你的辛勤劳动成果。
IV-总结
总而言之,注入一个模块并设置4个不可检测(在ring3级别上)的hooks是可能的。也许在某些地方会有漏洞,但我所说的基本原理应该是能到达这个效果的。以上是我对在用户态创建反检测系统的所有尝试。我知道你们肯定有能力在我描述的基础上加上你们自己的见解,我也真诚的希望你们会这么做。这个解决方案不像很多正在搞game hacking的人想的那样是一个秘密的安全体系,也和那些闭源软件开发商的做法不一样。游戏黑客比别人懂得更多,应该知道这一点,因为你们全都是玩逆向工程的。你们活着就是为了击败那些通过晦涩的手段来实现的系统安全。。。自己不要掉进同样的陷阱。



联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:CS 原理及 的源码代码
下一篇:疾风之刃OD附加
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:[email protected]),本站将立即改正。

3正式会员
128/300

128

积分

51

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
6699
交易币
0
沙发
发表于 2015-2-9 18:16:01 | 只看该作者
佩服佩服!
3正式会员
128/300

128

积分

51

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
6699
交易币
0
板凳
发表于 2015-2-12 15:36:59 | 只看该作者
OMG!介是啥东东!!!
3正式会员
146/300

146

积分

58

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
88
海币
831
交易币
0
地板
发表于 2015-2-12 17:13:54 | 只看该作者
无回帖,不论坛,这才是人道。
6高级会员
653/1100

653

积分

226

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
427
海币
10722
交易币
0
5#
发表于 2015-2-17 13:04:10 | 只看该作者
围观 围观 沙发在哪里!!!
6高级会员
762/1100

762

积分

246

主题

14

听众
已帮网友解决0 个问题
好评
0
贡献
516
海币
2257
交易币
0
6#
发表于 2015-3-6 09:57:22 | 只看该作者
路过
贡献
11
海币
582
交易币
0
7#
发表于 2015-3-29 15:36:35 | 只看该作者
我也是坐沙发的
8资深会员
1320/1800

1320

积分

286

主题

35

听众
已帮网友解决0 个问题
好评
11
贡献
1034
海币
3723
交易币
5
8#
发表于 2015-3-30 01:19:07 | 只看该作者
前排支持下
4中级会员
536/600

536

积分

165

主题

7

听众
已帮网友解决0 个问题
好评
0
贡献
371
海币
3255
交易币
0
9#
发表于 2015-6-1 05:33:00 | 只看该作者
看帖是一种习惯,不过我回帖也是一种习惯 更是一种美德

1

积分

0

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
1
交易币
0
10#
发表于 2015-6-8 13:05:27 | 只看该作者
向楼主学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2024-5-9 11:37 , Processed in 0.627400 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表