【文章标题】游戏外挂反外挂杂谈
【文章作者】JJH
【附】我喜欢这个行业,以下均为本人个人观点,抛砖引玉,欢迎业内业外人士畅谈,只发在UnPack和看雪,请勿转载


目录
1外挂分类
⑴按实现方式(包含实现流程简述)
㈠脱机式
㈡内挂式
    ①调用游戏相关功能函数为主
    ②调用游戏明文发包函数为主
    ③按键为主        
⑵按用户类型
  ㈠普通玩家
  ㈡打钱工作室        
2反外挂杂谈
⑴一些常规反外挂关注点及个人建议
  ㈠驱动保护
  ㈡游戏的启动参数加密
  ㈢检测防多开
  ㈣代码完整性校验
  ㈤游戏登陆相关封包处理
  ㈥敌意进程、模块扫描
  ㈦客户端失去响应
  ㈧图片答题机制        
⑵综合反外挂
  ㈠策划方面
  ㈡技术方面
  ㈢法律方面
3结束语
    
1.游戏外挂分类:
⑴按实现方式
㈠脱机式:
完全脱离游戏客户端程序,可以与游戏服务器自由通讯的外挂程序,开发难度最大, 普通的100多开,对游戏的危害最大 ,严重破坏游戏市场、影响玩家正常游戏、缩短游戏运营周期.
正常开发流程:
        解决反调试保护措施
        分析游戏启动参数
        逆向分析出游戏加解密算法
        逆向分析出地图等资源信息
        分析登陆封包,实现脱机登陆及获取角色属性、装备、物品、技能相关信息
        具体功能封包分析
        整合寻路算法,实现基本挂机
        根据工作室需求,完善功能
        
    
㈡内挂式:
            以游戏客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯
①调用游戏相关功能函数为主
正常开发流程:
        解决反调试保护措施
        分析游戏启动参数(非必要)
        分析角色信息|怪物结构|背包结构|技能结构|地面物品等
            根据游戏通讯函数,逆向回溯出游戏明文发包函数
            根据明文发包函数调用关系及报文信息分析出选怪、打怪、使用技能、使用物品、走路、买卖、邮寄等函数,实现定点挂机、自动买卖
            功能完善(支持脚本任务等)
   
②调用游戏明文发包函数为主
                此内挂开发流程基本与①相同, 只是主要挂机功能函数通过外挂组织明文包直接调用明文发包函数实现。目前此类外挂制作方式越来越流行,原因如下:
A.        游戏的中的怪物、技能等数据结构越来越复杂(多级链表方式、多叉树方式等等)、功能函数越来越难回溯(加花、SEH保护、VMP保护等等),逆向分析相对比较困难,而直接从HOOK的明文包分析相关数据及实现相关函数功能反而比较容易;
B.        如果游戏交易比较火,再逆向出游戏加解密函数、脱机登陆流程、加入自动寻路算法等等,脱机版本诞生.

③按键为主
            除按键脚本类,其它按键内挂开发流程基本与①相同,只是主要挂机功能函数通过模拟按键方式实现

⑵按用户类型:
㈠普通玩家
此类挂主要通过点卡、月卡等方式向普通玩家销售,一般海阔天空、外挂999、592外挂等外挂网站及淘宝都可见其踪影。

㈡打钱工作室
     此类外挂由某工作室定制或只向工作室销售,由一个工作室买断,或少数工作室共用.

2反外挂杂谈
    ⑴一些常规反外挂关注点及个人建议
㈠脱机挂以及内挂开发首先必须解决游戏反调试保护,目前主流思想是驱动层进行调试器进程检测、标志位检测,HOOK重要函数等方法以及给游戏执行文件加猛壳利用壳的功能实现反调。
个人观点:驱动保护方法可大大提高外挂的制作门槛,但综合效果却并不是很好.驱动开发代价高昂、破坏游戏的兼容性和稳定性、对于专业的外挂团队根本无效.君不见DNF的玩家挂、工作室挂,AION的脱机挂依然很安逸地挂着.普通外挂开发团队或自己分析或通过购买工具方式解决驱动保护,顶尖的开发团队的技术人员可能比国内90%以上的游戏公司反挂技术人员都要多而且更专业解决驱动保护也是不在话下。有财力有技术实力的大公司可以加入驱动保护,中小游戏公司还是能免则免吧,简单的驱动起不到效果、复杂的驱动功能完善且兼容性、稳定性好可不是容易的事,况且底层的操作也不是必须的,相关的操作放到Ring3层处理、搞点猥琐手段效果亦不错.

㈡对游戏的启动参数进行加密(针对脱机挂及智能工作室内挂).
个人建议: 启动参数加密是比较容易忽视的地方,加密函数中利用GetTickCount之类获取变参,灵活应用注册表或文件操作,判断游戏是否从官方程序启动,再对相关代码段VMP

㈢检测防多开(针对脱机挂及智能工作室内挂)
个人建议:多开检测也是比较容易忽视的地方,很多游戏只是一个简单的FindWindow、CreateMutex,有等于无,此处应多方法灵活处理,VMP依旧是必须的 

    ㈣代码完整性校验        
    个人建议:CRC之类算法对自身的完整效验勾挂函数的完整效验,一些重要代码段另外单独校验,校验相关代码段VMP,必要的话返回服务器中验证

    ㈤游戏登陆相关封包处理
    个人建议:游戏的登录封包尽量复杂化,不同的封包类型中部分数据采用多重加密是必要的,多个端口乱序通讯,这些登陆分包是一次性的不用太担心算法效率问题,而此操作却可以大大增加逆向难度;另简单说明一下,如很多游戏登陆会使用MD5进行相关验证,但多是直接对密码进行加密,逆向者用PEID 的Krypto ANALyzer知道用了这个算法,到网上随便找个MD5算法不用修改就能通过,效果甚微,而如果从服务器下发部分随机密钥A再与本地固定密钥B与密码组成密钥C再用MD5加密,在MD5加密的基础上再加个可逆算法处理,这样验证强度就强多了,本人初次逆这样个流程时候就觉得很痛苦,再VMP下,嘿嘿效果就达到了
  

    ㈥敌意进程、模块扫描
    个人建议:可以多启线程进行相关操作,但放在主进程中扫描依旧是必须的,不需要太早扫描,不需要太频繁扫描,扫描结果返回值的多样化,扫描结果向服务器报告但在客户端是不需要立刻体现,此处灵活点,极尽猥琐,你可以很好的使用反外挂这把双刃剑,老规矩相关代码VMP.
外挂黑名单的获取:
A:玩家挂,直接搜索或购买
B:工作室挂,无间道、靠道友、声势浩大的反外挂奖励活动(这招效果不错,毕竟工作室的员工也想发笔横财,虽然不一定能拿到奖励…)
C:其它,多接触些有点名气的外挂代理


    ㈦客户端失去响应
    个人建议: 一定时间客户端没有反应断开连接,这个时间能短就短,调试过的都知道,这样调试起来痛苦多了

    ㈧图片答题机制
    个人观点:图片答题实现起来容易,却可以大大增加写外挂的难度、成本。
目前外挂应对方法
    A:算法解析
    B: 自建图库
    C:人工答题(工作室挂一般都把图片传到指定答题机器上)
    所以图片本身要处理的复杂点,噪点之类多多益善,基本断绝算法解析的希望;图片经常更新,或者写个小算法一个图片重复使用,让外挂的图库成为鸡肋,把外挂逼到人工答题这条路上,这样外挂难度、工作室成本就上去了,老规矩图片验证相关代码VMP。

⑵综合反外挂
        曾经看到一个说法“做外挂与反外挂技术上是对等的,完全靠技术手段是反不住外挂的,最好的反外挂系统是游戏本身”,对此,我深表认同.反外挂应该从策划、技术、法律等多方面进行.
    ㈠策划方面:
        RPG类个人比较推崇征途、剑侠类似的模式
        A:打怪获取经验较低,游戏自带内挂,解决了很多没时间练级的玩家需求
(我就属于此类玩家,愿意花钱去玩游戏,但没空玩游戏,购买高级账号总是被无耻卖家找回,还搭上装备,默哀下…);从反外挂的角度,我建议此类游戏内挂带最基本的挂机功能即可,吃药的、捡物的、技能的通通不带,应让此功能成为内挂开发者的鸡肋,不然开发内挂可就容易多了
        B:
游戏中打怪、极大部分任务获取的游戏币是绑定的,绑定游戏币购买的物品同样是绑定的,可用于交易的货币只有有限的途径可以获取,目前我接触到得几个这类模式的游戏,工作室都是靠这些有限的途径打钱,官方一次大变动就可能导致外挂作者放弃或工作室放弃。
              聪明的策划朋友们,发挥你的想象力,在游戏内容、游戏模式上多下功夫

㈡技术方面:
上面已经罗列了一些技术方面关注点,再者我认为单纯靠技术是防不住外挂的,就结合游戏、外挂再简单介绍下
游戏的交易、镶嵌、邮寄等系统必须严格检测: 
现在的游戏市场竞争激烈,出现大的公开的此类漏洞可能直接毁掉游戏,若是自己公司开发的游戏,有可能的话直接代码层的审查,逻辑检测、溢出检查、对不正常的数据判断等等,对于无法看到代码的游戏通过逆向明文发包函数、分析出相关报文结构,用错误的逻辑、特殊处理的封包对这些系统进行完全检测(服务器是否可以对这些明显封包异常做些惩罚措施?)。
        内挂多是注入DLL到游戏进程中,新起个外挂主线程,工作室内挂控制台的实现,可否根据其实现过程、特点(主窗口句柄类名、线程ID等等)做些对应措施?
        除去服务器验证,游戏的另一张王牌强制更新是否妥善利用,内挂开
发者怕游戏更新什么、脱机挂开发者又怕游戏更新什么?
    对于P2P类的网游,极尽你的能力在反调、随机函数保护、属性验证
方面下功夫吧,不然什么样的BT功能不能实现?

㈢法律方面:
在没有法律压力下,韩国游戏不是已经完全沦陷于国内外挂团队之手?让欧美游戏玩家惊呼hacker的背后又如何能缺得了国内外挂团队?国内外挂团队又何以如此嚣张?
游戏公司是否可以联合打击外挂介绍销售站点、外挂制作交流站点?
反外挂技术人员可以充分挖掘外挂的相关信息,必要时候请Police,若是能抓住个外挂开发者,效果是绝对震撼的.


结束语: 
反外挂工作具有长期性,复杂性等特性,故建立专门进行此类工作的软件安全小组是必须的,及时的收集外挂后分析外挂所使用的技术和破解反外挂系统的方式,写出相应的检测及防护代码,提交后进行游戏更新。通过不断的完善游戏、完善反外挂系统,策划、法律多方面结合,我有理由坚信,外挂会在这样的保护措施下销声匿迹。
   (PS结束语是对同行某前辈说过的话略做修改)