首页
社区
课程
招聘
[原创]一般游戏的反外挂保护方案
发表于: 2007-12-25 19:28 53799

[原创]一般游戏的反外挂保护方案

2007-12-25 19:28
53799

【文章标题】: 一般游戏的反外挂保护方案
【文章作者】: pathletboy
【作者邮箱】: pathletboy@gmail.com
【作者声明】: 初涉反外挂,思路不成熟,大家请指教。
【原文地址】: http://bbs.pediy.com/showthread.php?p=395840

所谓知己知彼方能百战不殆,要想减少或避免外挂对游戏的侵害,必须从根本上知晓外挂的原理,及其常用的技术手段,从而在技术手段上对其进行封堵。

一、外挂的分类

外挂一般的分为2类,脱机式 和 内挂式。

脱机式外挂的定义:完全脱离官方发布的客户端程序,可以与游戏服务器自由的进行通讯的外挂程序,这类外挂的实现是2类外挂里最困难的,主要难点在于外挂制作者需要对游戏的通讯协议进行充分的分析,包括解决封包的加密解密问题,使得封包合法化,这样游戏服务器才能接受并处理。

内挂式外挂的定义:内挂需要以官方发布的客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯,主要通过反汇编手段分析并修改客户端代码后实现功能,一般通过直接调用游戏客户端的发包函数进行发包,或者调用游戏客户端的封包加密解密函数自行处理发包收包。

二、制作外挂常用的技术手段

   制作外挂一般使用的分析工具:
动态分析 OllyDbg(OllyICE)
静态分析 IDA Pro

   制作外挂一般使用的开发工具:
VisualStdio系列(VC++,VB)
Borland系列(Delphi,BCB,BC++)
中国人自己的开发工具(易语言)(编者注:此开发工具优势在于控件种类上,有专门的用于外挂制作的控件)

   制作外挂的技术要点:
鼠标键盘模拟技术:这类技术在RING3层可通过调用WIN32 API实现,在RING0层可通过驱动模拟鼠标键盘输入来实现。按键精灵就采用在RING0层通过驱动来模拟鼠标键盘,比较底层。

Hook技术:包括API HOOK 、普通的对游戏代码进行HOOK等。这类技术有个特点,对目标进程的代码会进行修改。

脚本技术:扩充外挂功能的技术之一,能让外挂使用者编写脚本来扩充外挂功能。

三、反外挂中常用的技术手段

反外挂一般使用的分析工具:
动态分析 OllyDbg(OllyICE)
静态分析 IDA Pro

制作反外挂一般使用的开发工具:
依据游戏客户端采用的开发工具来决定。

制作反外挂的技术要点:
代码校验:包括磁盘代码及内存代码校验,防止代码被非法更改。

虚拟机保护:虚拟机(VM )其实就是Virtual Machine的缩写,这里说的VM并不是像VMWare那样的虚拟机,而是将一系列的指令解释成bytecode(字节码)放在一个解释引擎中执行,能有效的干扰非法调试者对保护的代码进行分析。是反外挂技术中的重中之重。

驱动保护:采用底层钩子技术,一般采用SSDT HOOK来对游戏进程进行保护。但这种技术有一个致命的缺陷,就是兼容性问题。

反调试:对调试过程产生干扰,阻止非法调试者进行正常的调试。反调试代码加多后会导致兼容性稳定性出现问题。

四、一般保护的思路及步骤

   防止脱机式外挂:
合理的设计封包通讯协议及对封包加密解密算法进行虚拟机保护能有效的防止脱机外挂,反脱机外挂的难度比较低。而且技术要求也不高。

   防止内挂式外挂:
反该类外挂主要从代码校验上着手,并配合虚拟机保护,必要时候加上简单的驱动。简单的可以采用如下步骤处理:
(1)        将封包加密解密独立成一个动态连接库(DLL),供游戏主程序调用进行封包加解密。
(2)        更换封包加密解密方式,防止破解者采用替换旧客户端的方式进入游戏。
(3)        反外挂功能在独立出来的动态连接库里实现,在独立出来的动态连接库中加入对主程序代码段校验。建立一个新的反外挂线程来校验代码段,加入敌意进程或模块的特征检测,对关键的API进行检测。检测到非法可以对服务器进行报告,并在客户端主动切断与游戏服务器的连接。
(4)        在加密解密函数里加入对反外挂线程的检测,检测反外挂线程是否正常运行,如果检测到非法情况,同样对服务器进行报告并主动切断与游戏服务器的连接。
(5)        对独立出来的DLL进行虚拟机保护(封包加解密及反外挂线程代码)。
(6)        加入一些反调试技术。
(7)        根据实际情况采用驱动技术,对游戏进行保护。

五、对反外挂工作的建议
反外挂工作具有长期性,复杂性等特性,故建立专门进行此类工作的软件安全小组是必须的,及时的收集外挂后分析外挂的所使用的技术和破解反外挂系统的方式,写出相应的检测及防护代码,提交后进行游戏更新。通过不断的完善反外挂系统,我有理由坚信,外挂会在这样的保护措施下销声匿迹。

作者:pathletboy
pathletboy@gmail.com
2007-12-25


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (60)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
什么什么反外挂方案写的再漂亮再深刻都是假的,都是忽悠客户的
前不久看到蜗牛的XX反外挂系统,驱动+dll 裸体的暴露在外面,功能再强大有什么用?

反外挂技术无非两点
1. 驱动的兼容性与稳定性
2. 虚拟机的抗分析能力

韩国两大泡菜GameGuard和HackShiled都要加别人的themida来保护自己就足以说明问题了
2007-12-25 19:40
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
3
关键在于抗分析
2007-12-25 20:01
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
哈哈  一针见血 反怪挂
2007-12-25 20:13
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
针对某一游戏所编制的反外挂系统最有效
通用的反外挂系统被绕过的可能性很大, 专门对某一款游戏写的反外挂系统要有效的多
2007-12-25 20:16
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
是场持久战。
正如医生绝对不会希望没有病人一样,真要出一种包治百病的、彻底根治的药来,医生也就失业了。
2007-12-25 21:51
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
7
中国教育下的受害者~
google一些满头雾水的东东拼凑成一二三四这门课就80分了
2007-12-25 23:55
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
让我全面的了解了这块的知识, 这帖子对我有帮助
2007-12-26 00:22
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
9
蜗牛的反外挂用了3天就撤了。
反外挂的驱动只能对通用的GameHack程序有效。对针对性的程序基本可以无视。
2007-12-26 23:50
0
雪    币: 108
活跃值: (141)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
10
不能否认反XX系统的作用,呵呵。
第一点,目的不是为了把外挂全部XX掉,而是有效减少外挂数量。剩下的靠有效及时的更新来保障,再不行的,找点黑帮直接去人身威胁
第二点,提高外挂制作难度,把外挂逼得去使用一些歪门邪道的技术,检查起来也容易,外挂要更新也麻烦。
第三点,底层技术不是必要的。走得太底层,无论如何都会付出稳定性和兼容性的代价。游戏本身才是最好的反外挂系统。
2007-12-28 14:28
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
11
可惜机器太慢不能保护库函数,千里之堤溃于蚁穴
2007-12-28 19:36
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
12
千里之堤 溃于浮点。
2007-12-29 00:15
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
13
和赤裸二字扯上关系的往往没什么好命~
2007-12-29 09:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
驱动拦截外挂常用api,强杀.
2007-12-30 11:47
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不懂啊 !!!!!!!!!!!!
2008-1-8 22:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
呵,说得实在。
2008-1-9 20:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
不错,有启发。
2008-1-16 17:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我一直想自己研究出一个游戏外挂,但是知识有限,学习吧 还是..
2008-1-17 19:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
受益了,谢谢
2008-1-23 16:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我个人玩网游的时候不喜欢适用外挂。
我个人认为反外挂的一个比较有效的办法就是加快游戏更新的速度,是外挂制作者没法跟上游戏更新的速度,这样外挂就会因为不适用新版本而自动失效。

这样比单纯的去防外挂要好的多。
2008-1-26 11:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
长篇大论......在下领教了!
2008-1-26 23:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
一直没搞清楚为什么有的外挂是固定时间被发现的。。
2008-1-30 11:07
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
23
学习了。。。。。
2008-1-30 14:07
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
要通用的话,下面的方案比较好:   
1.关键数据(比如血量)不要用明文,一定要加密,防止被搜索!
2.关键函数一部分用VM虚拟,让人看不懂,VM一定要有RING0部分,不被OD蹂躏
3.服务器连动保驾,驱动中效验内存完整性(定时+随机)并返回服务器,注意:不要老是用同一个返回值,每次效验服务器先随机发来一个密码.
4.一定时间客户端没有反应断开连接,加大调试难度
5.数据包一定要加密!而且每次加密都要先随机生成一个密码,保证每次的数据相同但包也不同!
6.象HS一样HOOK系统内核,防止OD等调试器
7.自身的完整效验和勾挂函数的完整效验---当然是返回服务器中验证
2008-1-31 17:28
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
个人认为反外挂是4两拨千斤......
因为网络游戏有其特殊性!
1.可以强制其更新
2.有服务器时时验证这张王牌
2008-1-31 17:33
0
游客
登录 | 注册 方可回帖
返回
//