红鹰论坛

 找回密码
 立即注册
查看: 6188|回复: 31

传奇私服外挂制作原理与反外挂技术

  [复制链接]

2239

主题

50

回帖

5165

积分

元首

Rank: 8Rank: 8

积分
5165
发表于 2014-5-18 15:26:48 | 显示全部楼层 |阅读模式
现在大部分的主流外挂,包括按键精灵,自动做一些动作之类的外挂。 都是通过HOOK进游戏窗口,并且用不同的
HOOK类型来完成的,比如对于网络,通常是通过HOOK消息,把DLL弄到我们的游戏程式中,然后通过
GetProcAddress得到DLL中函数的地址和真实的函数地址,然后通writeProcessMemory来把我们的函数地址改成他
们他们的API地址。
那么在我们的游戏执行的时候,收到消息就会先触发他们的钩子,等他们布置好邪恶的陷阱,然后再执行我们的
程式。那么,对于这类型的外挂,该怎么防呢?
WINDOWS的钩子有个特点,就是钩子链,因为对于同一个进程,即使是同一类型的钩子,能同时有多个,也就是说
,对于同一个游戏,开两个功能相同的外挂也能够。那么,怎么样来决定钩子的顺序呢?所谓后来者先得,
WINDOWS的做法是,最后一个HOOK某个进程的钩子最先执行。并且振奋人心的消息是,在钩子里面能够控制下一个
钩子是否执行。
这个函数是CallNextHookEx,也就是说,假如在某个钩子里面不执行这个函数的话,钩子链就会在这中断,那么
我们的思路就很简单了,在游戏运行中,开一个进程,每隔一段时间就hook我们的主程式,然后在钩子里面,不
执行CallNextHookEx,这样就能够避免别人的钩子执行。
要针对不同类型的钩子来采取不同类型的方法了,因为外挂的钩子不管怎么做,无非是出于两种目的,一种是修
改数据,另外就是过滤数据。其核心思想就是我们自己的游戏注册两个钩子,一个总是在钩子链的最底层,另外
一个总是在钩子链的最上层,一比较两个钩子收到的消息,就知道中间有没有别的钩子了。一但发现有别的钩子
,不用想了,肯定是外挂,最少也用了按键精灵,封号,杀档,想怎么干就怎么干。
当然,外挂也不是这么脆弱的,据说有人用raw socket来截获任何的网络消息,这个跟钩子无关,这个更底层一
些。

这里首先要把敌人分类,对于水平最次的外挂,方法也相应要简单得多。最次的外挂一般用的方法是自己写一个
wsock32.dll放在和游戏相同的目录下,来替换掉系统的wsock32.dll。对于这种愚蠢的方法,解决的办法有很多
,把load time的载入wsock32.dll改成run time的载入,然后指定一下路径,就什么问题都没有了。更简单点,
运行游戏的时候检查一下当前目录下有没有wsock32.dll,有的话,那就肯定是外挂钩子了。
比最等级高一点点的外挂,会喜欢用钩子来直接钩,一般的做法是,先通过GetProcAddress来获取SOCKET API的
地址,然后通过WriteProcessMemory的方法来修改入口地址,将其改成jmp 自己的函数地址。这种方法其实很卑
劣的,所谓无毒不丈夫,我们能够通过修改通用的GetProcAddress的代码来防止别人拦截SOCKET,这样,直接连
防火墙都能够突破了。
这里的技术难点在于,我们不能用类似WriteProcessMemory的方法来写内存因为我们不知道究竟外挂是哪个进程
,所以我们需要修改WINDOWS的代码段,这样讲理论上是不可能的,可惜WINDOWS自己给自己留了个后门,在
kernel.dll里面,UINT AllocCsToDsAlias(UINT),通过把API的代码段的选择符传给他,能够返回一个能够写的
数据段的选择符,然后把新的选择符和API的入口地址加在一起,就能够得到一个能够写的代码段的指针。
国内好多取词软件和全屏翻译软件都是用的这个原理,具体的例子如下:
比如GetProcAddress这个API,在kernel.dll里面,我们要做针对他的通用钩子就应该按照以下的步簇: typedef
UINT (WINAPI* FOO)(UINT);
FOO AllocCsToDsAlias;
HMODULE hKernel = GetModuleHandle("kernel");
AllocCsToDsAlias = (FOO)GetProcAddress(hKernel, "AllocCsToDsAlias");
FARPROC entry = GetProcAddress(hKernel, "GetProcAddress");
WORD offset = (WORD)(FP_OFF(entry));
UINT selector = AllocCsToDsAlias(FP_SEG(entry));
BYTE *addr = (BYTE *)MK_FP(selector, offset);
然后就能够往addr这个地址写5个BYTE的东西,第一个BYTE是jmp,不同的CPU可能会不同,之后的一个DWORD是您
的函数的地址。
这样,能够通过保存两份addr的数据来做到钩子的开关,当钩子打开的时候,任何的etProcAddress的调用都会调
到我们的函数,这个时候能够通过检查 假如有人想GetProcAddress wsock32.dll里的东西,我们就干掉他。。
同样,假如有人通过开启socket这个API的SOCK_RAW参数来调用RAW SOCKET监视网络,我们也能够通过上面的方法
来做到先入为主,看谁在监控我们的网络传输。
其实查外挂的原理和捉病毒的原理相同,只是现在做外挂的技术还不成熟。当做外挂的技术和防外挂的技术在同
一条线上的时候,想从技术上防住外挂是不可能的。
其实是无奈,杀毒软件的做法是出来一种新的病毒,在第一时间内公开其特征码,然后更新任何的客户端,看到
这种特征的,就杀。其实查杀外挂也该如此,其实CS的Cheating-Death就是这个原理,不管出了什么新的外挂,
CD总是在第一时间内更新,然后客户端也就傻傻的只要一看到有这个特征的东西就把他干掉。其实仔细想想,这
是个很好的主意,从外挂研发商的动机来分析。他们之所以要研发外挂,估计炫耀技术是一方面,更重要的还是
想赚 钱,或用来挂机之类的,既然要赚钱,或挂机,就必然会被其他玩家发 现或举报,这个时候应该做的就是
尽快的下载一份外挂,或根据其行为研究其特征,并在防外挂的特征码上记下一笔,其实不用太复杂,最简单的
做法就是记住其外挂窗口的名称,然后只要看到这个外挂窗口,做些处理就好了。
那么这样一来,关键的技术就落在怎样设计查外挂这个结构上了,首先客户端需要的是个查外挂引擎,和一个外
挂特征库,根据引擎和特征库生成一个固定的版本号,然后每次登陆的时候就用这个版本号,跟服务器上的版本
号对比,假如不相同的话,则从服务器自动下载最新的查外挂引擎和外挂特征库。
这样虽然不能将外挂赶尽杀绝,却能比较大的限度上围剿使用外挂的风气,相信使用外挂的玩家也只是想更好的
玩游戏,只但是动的念头有些歪了,但其出发点仍是好的,只要在他使用外挂的时候多些阻拦或诱导他不使用外
挂,这样效果就会好很多。设想一下,谁愿意每天等一个外挂的更新,而不去玩他很想玩的游戏呢。这样一来,
制作外挂的人也会逐渐减少,从而进入一个良性循环。





上一篇:传奇0血不死辅助工具详细设置
下一篇:怎么识m6反挂引擎和过反挂检测加载辅助
回复

举报

0

主题

371

回帖

376

积分

二级GM

Rank: 3Rank: 3

积分
376
发表于 2014-5-20 07:08:32 | 显示全部楼层
支持楼主,用户楼主,楼主英明呀!!!

0

主题

458

回帖

518

积分

三级GM

Rank: 4

积分
518
发表于 2014-5-18 18:18:13 | 显示全部楼层
路过,学习下

0

主题

444

回帖

428

积分

二级GM

Rank: 3Rank: 3

积分
428
发表于 2014-5-18 23:57:03 | 显示全部楼层
OMG!介是啥东东!!!

0

主题

368

回帖

471

积分

二级GM

Rank: 3Rank: 3

积分
471
发表于 2014-5-19 10:36:53 | 显示全部楼层
啥玩应呀

2

主题

57

回帖

3212

积分

论坛元老

Rank: 7Rank: 7Rank: 7

积分
3212
发表于 2014-5-19 11:14:29 | 显示全部楼层
是做壳的还是,查看外挂挂链的木马后门?

0

主题

268

回帖

266

积分

二级GM

Rank: 3Rank: 3

积分
266
发表于 2014-5-19 13:05:42 | 显示全部楼层
确实不错,顶先

0

主题

286

回帖

278

积分

二级GM

Rank: 3Rank: 3

积分
278
发表于 2014-5-19 15:34:32 | 显示全部楼层
路过,支持一下啦

0

主题

689

回帖

629

积分

三级GM

Rank: 4

积分
629
发表于 2014-5-19 15:55:41 | 显示全部楼层
很好~~

0

主题

493

回帖

448

积分

二级GM

Rank: 3Rank: 3

积分
448
发表于 2014-5-20 04:18:41 | 显示全部楼层
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!

1

主题

717

回帖

725

积分

三级GM

Rank: 4

积分
725
发表于 2014-5-21 01:11:20 | 显示全部楼层
路过。支持围观。。。

0

主题

513

回帖

577

积分

三级GM

Rank: 4

积分
577
发表于 2014-5-21 08:17:46 | 显示全部楼层
支持,赞一个

0

主题

219

回帖

206

积分

二级GM

Rank: 3Rank: 3

积分
206
发表于 2014-5-21 23:08:47 | 显示全部楼层
楼下的接上

0

主题

137

回帖

137

积分

一级GM

Rank: 2

积分
137
发表于 2014-5-22 03:24:25 | 显示全部楼层
过来看看的

0

主题

411

回帖

411

积分

二级GM

Rank: 3Rank: 3

积分
411
发表于 2014-5-22 07:39:57 | 显示全部楼层
我也顶起出售广告位

1

主题

470

回帖

543

积分

三级GM

Rank: 4

积分
543
发表于 2014-5-22 15:47:15 | 显示全部楼层
非常好,顶一下

0

主题

251

回帖

249

积分

二级GM

Rank: 3Rank: 3

积分
249
发表于 2014-5-23 02:02:41 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持

0

主题

374

回帖

480

积分

二级GM

Rank: 3Rank: 3

积分
480
发表于 2014-5-23 15:07:28 | 显示全部楼层
小手一抖,钱钱到手!

0

主题

418

回帖

408

积分

二级GM

Rank: 3Rank: 3

积分
408
发表于 2014-5-23 16:32:26 | 显示全部楼层
没人回帖。。。我来个吧

1

主题

674

回帖

776

积分

三级GM

Rank: 4

积分
776
发表于 2014-5-23 17:14:49 | 显示全部楼层
看帖回帖是美德!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新手推荐上一条 /1 下一条

传奇服务端|传奇一条龙|站点地图|手机版|gm基地|红鹰论坛 ( 冀ICP备2023015431号-1 )|网站地图

GMT+8, 2024-11-10 11:42

Powered by 传奇版本 X3.4

本站于2013年2月28日成立,至今运行: 天。本站所有资源均来自网络,严禁商业使用,请于24小时内删除!
快速回复 返回顶部 返回列表