代理游戏反外挂思路知识讲解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mov edi, dword ptr [eax]
mov ebx, dword ptr [esp+18]
mov esi, dword ptr [ebx+44]
add ebx, 40
cmp ebx, ebx
mov dword ptr [esp+2C], edi
je short 004308AB
call 006E34CE
对人物走路进行分析研究,对所有可以执行走路的函数进行保护,让外挂无法走路。
使外挂关键功能无法实现; 节省客户端资源; 减少游戏分析时间。
代理游戏保护小结
商务层面
加强同游戏开发商的联系,及时更新反外挂机 制;
团队建设
培养自己的反外挂团队,在即使无代码情况下 也可以反外挂;
技术层面
采用与外服不同的反外挂系统,尽量避免外服 外挂直接被移植到自身游戏。
代理游戏保护技术(4)
四、针对性代码保护(关键函数保护)
如以下游戏代码,模拟攻击怪物过程: void AttackMonster(int MonsterID) {
Fun1(); //判断怪物ID是否有效; Fun2(); //判断是否在攻击范围; Fun3(); //发送攻击 } 外挂会调用AttackMonster函数,而不是仅调用 Fun3 或组合 调用Fun1、2、3,因为 AttackMonster 调用方便,且稳定。
游戏走路线索分析(2)
点击鼠标进行走路:
push 2 push eax push ecx push esi call 0051D2B0
//进行移动
调用该函数的地方:
0051D14C call 0051D176 call 0051D192 call 0051D1AE call 0051D1CA call 0051D1E6 call 0051D203 call 0051D245 call 0051D262 call
1、以上2处链表都可以泄露怪物信息,都 很危险,值得保护;
2、仍然有其他地方链表存在,比如对怪物 新增、删除、修改时候,都会枚举怪物链 表;
3、要么对每处链表处理都分析保护,要么 处理其他线索。
游戏走路线索分析(1)
1、游戏里输入坐标进行走路:
push edi //目的坐标y push ebx //目的坐标x call 00421250 //走到目的
游戏分析技巧(3)
5、留意游戏内非常规功能
如: a、游戏内自带的辅助性工具,其功能实现接口可能被外挂
利用; b、游戏内快捷按键功能能被利用; c、“人物跟随”等其他非正常功能可能被利用。
6、信息打印产生的信息泄露
如: 游戏内显示人物属性界面,会打印人物所有信息,如果找到
打印函数,在此处分析往往会把人物所有信息都获取到
2、对关键代码进行保护
无源代码情况下需要针对性查找关键代码,然后对其特 殊保护,如添加vm或监控。
但不能盲目混淆,否则达不到效果,且增加客户端资源 消耗。
代理游戏保护技术(3)
三. 混淆保护方案
走路: void Walk(Dword x,Dword y) {
........ SendData(); }
TargetPoint(x, y);
//设置走路坐标参数
}
重在找出设计人员的原始调用接口, 而不是断章取义拼凑函数内部代码。
游戏分析技巧
1. 游戏的数据结构
外挂有自己的算法,游戏内的数据结构和数据才是操作目标。 通常关键数据: Player属性结构、怪物链表、物品链表、地图 信息表、其他相关链表。 常用的数据结构:数组、链表、二叉树。 数组可能有一维数组、二维数组;链表可能有动态链表、循环 链表等;二叉树一般是平衡二叉树,方便进行有序查找。
结合本次议题,主要分享如何在无源代码情况下(即 代理游戏),通过对游戏进行分析,实现2、3、4种方 案。
网游交互流程简介
1.客户端与服务器交互流程
外挂1 玩家
攻击怪物 人物交互 NPC交互 物品相关 其他
怪物信息 人物信息 NPC信息 物品信息 其他
服务器 外挂2
网游交互流程简介
2.客户端数据处理流程
这时候反外挂应该保护AttackMonster,而不是Fun3(除非有 多余担心)
保护简便、针对性强、对客户端影响小
代理游戏保护技术(5)
四、针对性代码保护(主线保护)
掌握外挂所必须的功能,对该功能全程处理,可以短期产生效果。如: 1、人物保护
对游戏中必须的人物吃药保护功能进行研究,将吃药所需要的关键代码调用给予保护, 让外挂无法执行吃药保护功能; 2、人物走路
游戏数据结构和内存位置泄露非常危险!
游戏分析技巧(1)
1、寻找程序员留下的调用接口
外挂会尝试调用程序员设计的函数接口 实现外挂功能,即简单又稳定。反外挂人 员也应该从此处入手;
2、检查调用处次数
利用反汇编器,查找对发送函数的调用 次数,根据调用次数判断。如给服务器发 送数据的函数,被引用次数一般非常多。
代理游戏反外挂思路
演讲者:nbw


代理游戏反外挂简介 常见外挂和反外挂策略 网游交互流程简介 游戏分析的技巧 代理游戏保护技术
代理游戏举例
代理游戏反外挂简介
代理游戏优点
游戏成熟,有专门的开发公司与成熟的外服运作经 验;
bug少。很多被代理的游戏在外服已经运作,漏洞已 明显减少;
护,否则选择下一个保护线索。
代理游戏保护技术(1)
一、游戏保护方向 1、文件完整性保护; 2、运行时关键数据保护; 3、关键代码保护。
观看一种修改游戏数据的演示
代理游戏保护技术(2)
二、代码保护策略
1、内存保护
可以不定期对内存进行CRC校验,供服务器验证。 也可以防止对代码段进行写操作,如防止修改代码段属 性等;
0051D2B0 0051D2B0 0051D2B0 0051D2B0 0051D2B0 0051D2B0 0051D2B0 0051D2B0 0051D2B0
游戏走路线索分析(3)
1、对各种形式的走路加以分析,找出函数 及调用点;
2、对走路函数本身及调用处进行归纳; 3、调查以上位置是否数量众多,值得保护; 4、如果数量不多,且便于保护,则进行保
分析关键游戏逻辑,实现自己保护系统
谢谢观看!
游戏分析技巧(2)
3、利用不同功能寻找调用接口
如不好判断走路函数接口,则可以进行不同方式的走路, 如每种方式都会调用某函数,则极可能是程序员预留的接口;
4、利用不同状态寻找关键函数
如不好寻找地图障碍点判断函数,则可以试图走向可达 位置和不可达位置两种情况,对两次代码流程比较,二者流 程分离的位置就是障碍点判断位置。
这种形式的数据处理一般从客户端发送函数分析 上层调用就可以简单找到相关功能函数。
网游交互流程简介
5. 状态机结合功能函数调用
既有状态位修改,也有功能函数调用。实质上是对状态位的封装。
。 避免直接引用状态位,引发不可测错误
//走路函数
Void Walk(DWORD x, DWORD y)
{
SetState(_GOWALK); //设置自动机状态位
cmp edi, esi
//判断是否到了链表尾
je 00430A4E
cmp edi, dword ptr [ebx+4]
jnz short 004308BD
//中间是对角色处理
mov edi, dword ptr [edi] //获取下个节点指针
jmp 00430894
//处理下一个节点
游戏怪物链表分析(3)
游戏分析技巧(4)
7、数据结构的查找
如: 每种数据结构都可能会有很多地方引用。如怪物链表,怪物
信息修改、删除、打怪、选怪等很多地方都会引发对怪物链表 的操作,很难通过对某处代码施行保护防止别人分析出怪物链 表。
游戏怪物链表分析(1)
怪物链表枚举一:按tab键选怪
mov esi, dword ptr [esp+18] mov eax, dword ptr [esi+44] mov ebp, dword ptr [eax] add esi, 40 mov dword ptr [esp+10], 0 /cmp esi, esi |mov edi, dword ptr [esi+4] |je short 00431F8E
//获取链表指针 //判断是否到了链表尾
//中间进行处理 |call 006E34CE |mov ebp, dword ptr [ebp] \jmp 00431F82
//处理下一个节点
游戏怪物链表分析(2)
图形引擎刷新地图上所有角色
//获取链表指针
mov eax, dword ptr [edx+4]
推广容易。很多代理游戏已被玩家群体所了解认可
代理游戏缺点
无源代码,修改周期长、可控性差; 反外挂不容易,很多代理游戏反外挂系统在外服运
作已经被外挂群体占领; bug修复困难。没有代码情况下,很难定位、修复
bug。
可采用反外挂策略
1、加强服务端策略性检测; 2、加强游戏本身完整性检测,减少游戏内部被利用; 3、对游戏关键数据进行保护; 4、对游戏关键函数进行混淆。
外挂和反外挂都关心客户端与服务端交互的数据处理,而非游戏图形引擎。 与windows的消息处理一样,与服务端交互的数据也有自己的数据处理机制。
A、状态机形ຫໍສະໝຸດ Baidu B、功能函数形式 C、以上二者结合
以上架构的实现并没有特定方式,可能由单独的线程来实现, 也可能不同线程进行配合,数据的组织也多样化。
需要设计人员或分析人员进行确认,从而方便在无游戏代码 情况下对客户端进行针对性保护。
调用这个函数的地方:
004221E1 call 00421250 004C68AB call 00421250 0057D408 call 00421250 0057E88C call 00421250 005840A7 call 00421250 00584105 call 00421250 0062A0E7 call 00421250 00652681 call 00421250 006622D2 call 00421250 0066B372 call 00421250 00671A5A call 00421250 0068AB27 call 00421250
网游交互流程简介
3.状态机原理简介
Fun2
Fun1 S1
S2
状态机不停运行,
检测各个标记位,
S5
发现标记位变化,
则进入相应处理。
S3 S4
重点是对状态标识位的分析与参数的分析
网游交互流程简介
4.功能函数调用简介
游戏本身没有专门的数据处理线程,而是对客户 端的鼠标键盘IO操作进行响应,如检测到鼠标点 击,则判断是否在地图上,如果是走路行为,则 转入走路函数。
说话: void Speak(char *chatinfo) {
........ SendData(); }
对 SendData()进行保护可以防止加密算法泄露; 但无法防止对本函数的调用; 即使对以上walk和speak进行保护,又无法对所有调用发
送函数的地方都进行保护。
观看某游戏发送函数调用处
相关文档
最新文档