1 / 29

代理游戏反外挂思路

代理游戏反外挂思路. 演讲者: nbw. 简 介. 代理游戏反外挂简介 常见外挂和反外挂策略 网游交互流程简介 游戏分析的技巧 代理游戏保护技术. 代理游戏举例. 代理游戏反外挂简介. 代理游戏优点 游戏成熟,有专门的开发公司与成熟的外服运作经验; bug 少。很多被代理的游戏在外服已经运作,漏洞已明显减少; 推广容易。很多代理游戏已被玩家群体所了解认可 代理游戏缺点 无源代码,修改周期长、可控性差; 反外挂不容易,很多代理游戏反外挂系统在外服运作已经被外挂群体占领; bug 修复困难。没有代码情况下,很难定位、修复 bug 。.

sharne
Download Presentation

代理游戏反外挂思路

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 代理游戏反外挂思路 演讲者:nbw

  2. 简 介 代理游戏反外挂简介 常见外挂和反外挂策略 网游交互流程简介 游戏分析的技巧 代理游戏保护技术

  3. 代理游戏举例

  4. 代理游戏反外挂简介 • 代理游戏优点 • 游戏成熟,有专门的开发公司与成熟的外服运作经验; • bug少。很多被代理的游戏在外服已经运作,漏洞已明显减少; • 推广容易。很多代理游戏已被玩家群体所了解认可 • 代理游戏缺点 • 无源代码,修改周期长、可控性差; • 反外挂不容易,很多代理游戏反外挂系统在外服运作已经被外挂群体占领; • bug修复困难。没有代码情况下,很难定位、修复bug。

  5. 常见的外挂类型 (I) 脱机 脱离游戏运行的脱机外挂已可以方便被打击,难以生存; 随同游戏一起运行的辅助外挂逐渐流行; (III)模拟挂 外挂不修改通讯协议,仅靠加强加密算法和通讯数据检测很难查出。 (II) 内挂 1、修改通讯数据; 2、模拟键盘鼠标; 3、调用游戏自身函数和数据;

  6. 可采用反外挂策略 1、加强服务端策略性检测; 2、加强游戏本身完整性检测,减少游戏内部被利用; 3、对游戏关键数据进行保护; 4、对游戏关键函数进行混淆。 结合本次议题,主要分享如何在无源代码情况下(即代理游戏),通过对游戏进行分析,实现2、3、4种方案。

  7. 网游交互流程简介 1.客户端与服务器交互流程 外挂1 攻击怪物 怪物信息 人物交互 服务器 人物信息 玩家 NPC交互 NPC信息 物品相关 物品信息 外挂2 其 他 其 他

  8. 网游交互流程简介 2.客户端数据处理流程 外挂和反外挂都关心客户端与服务端交互的数据处理,而非游戏图形引擎。 与windows的消息处理一样,与服务端交互的数据也有自己的数据处理机制。 A、状态机形式 B、功能函数形式 C、以上二者结合 以上架构的实现并没有特定方式,可能由单独的线程来实现, 也可能不同线程进行配合,数据的组织也多样化。 需要设计人员或分析人员进行确认,从而方便在无游戏代码 情况下对客户端进行针对性保护。

  9. 网游交互流程简介 3.状态机原理简介 Fun1 S1 Fun2 S2 状态机不停运行, 检测各个标记位, 发现标记位变化, 则进入相应处理。 S5 S3 S4 重点是对状态标识位的分析与参数的分析

  10. 网游交互流程简介 4.功能函数调用简介 • 游戏本身没有专门的数据处理线程,而是对客户端的鼠标键盘IO操作进行响应,如检测到鼠标点击,则判断是否在地图上,如果是走路行为,则转入走路函数。 • 这种形式的数据处理一般从客户端发送函数分析上层调用就可以简单找到相关功能函数。

  11. 网游交互流程简介 5. 状态机结合功能函数调用 既有状态位修改,也有功能函数调用。实质上是对状态位的封装。避免直接引用状态位,引发不可测错误。 //走路函数 Void Walk(DWORD x, DWORD y) { SetState(_GOWALK); //设置自动机状态位 TargetPoint(x, y); //设置走路坐标参数 } 重在找出设计人员的原始调用接口, 而不是断章取义拼凑函数内部代码。

  12. 游戏分析技巧 外挂有自己的算法,游戏内的数据结构和数据才是操作目标。 通常关键数据: Player属性结构、怪物链表、物品链表、地图信息表、其他相关链表。 常用的数据结构:数组、链表、二叉树。 数组可能有一维数组、二维数组;链表可能有动态链表、循环链表等;二叉树一般是平衡二叉树,方便进行有序查找。 游戏数据结构和内存位置泄露非常危险! 1. 游戏的数据结构

  13. 游戏分析技巧(1) 1、寻找程序员留下的调用接口 外挂会尝试调用程序员设计的函数接口实现外挂功能,即简单又稳定。反外挂人员也应该从此处入手; 2、检查调用处次数 利用反汇编器,查找对发送函数的调用次数,根据调用次数判断。如给服务器发送数据的函数,被引用次数一般非常多。

  14. 3、利用不同功能寻找调用接口如不好判断走路函数接口,则可以进行不同方式的走路,如每种方式都会调用某函数,则极可能是程序员预留的接口;4、利用不同状态寻找关键函数如不好寻找地图障碍点判断函数,则可以试图走向可达位置和不可达位置两种情况,对两次代码流程比较,二者流程分离的位置就是障碍点判断位置。3、利用不同功能寻找调用接口如不好判断走路函数接口,则可以进行不同方式的走路,如每种方式都会调用某函数,则极可能是程序员预留的接口;4、利用不同状态寻找关键函数如不好寻找地图障碍点判断函数,则可以试图走向可达位置和不可达位置两种情况,对两次代码流程比较,二者流程分离的位置就是障碍点判断位置。 游戏分析技巧(2)

  15. 5、留意游戏内非常规功能如:a、游戏内自带的辅助性工具,其功能实现接口可能被外挂利用;b、游戏内快捷按键功能能被利用;c、“人物跟随”等其他非正常功能可能被利用。 6、信息打印产生的信息泄露如: 游戏内显示人物属性界面,会打印人物所有信息,如果找到打印函数,在此处分析往往会把人物所有信息都获取到 游戏分析技巧(3)

  16. 7、数据结构的查找如: 每种数据结构都可能会有很多地方引用。如怪物链表,怪物信息修改、删除、打怪、选怪等很多地方都会引发对怪物链表的操作,很难通过对某处代码施行保护防止别人分析出怪物链表。 游戏分析技巧(4)

  17. 游戏怪物链表分析(1) 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 怪物链表枚举一:按tab键选怪

  18. 游戏怪物链表分析(2) //获取链表指针 mov eax, dword ptr [edx+4] 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 cmp edi, esi //判断是否到了链表尾 je 00430A4E cmp edi, dword ptr [ebx+4] jnz short 004308BD //中间是对角色处理 mov edi, dword ptr [edi] //获取下个节点指针 jmp 00430894 //处理下一个节点 图形引擎刷新地图上所有角色

  19. 游戏怪物链表分析(3) 1、以上2处链表都可以泄露怪物信息,都很危险,值得保护; 2、仍然有其他地方链表存在,比如对怪物新增、删除、修改时候,都会枚举怪物链表; 3、要么对每处链表处理都分析保护,要么处理其他线索。

  20. 游戏走路线索分析(1) 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 调用这个函数的地方: • 1、游戏里输入坐标进行走路: push edi //目的坐标y push ebx //目的坐标x call 00421250 //走到目的

  21. 游戏走路线索分析(2) 点击鼠标进行走路: push 2 push eax push ecx push esi call 0051D2B0 //进行移动 0051D14C call 0051D2B0 0051D176 call 0051D2B0 0051D192 call 0051D2B0 0051D1AE call 0051D2B0 0051D1CA call 0051D2B0 0051D1E6 call 0051D2B0 0051D203 call 0051D2B0 0051D245 call 0051D2B0 0051D262 call 0051D2B0 调用该函数的地方:

  22. 游戏走路线索分析(3) 1、对各种形式的走路加以分析,找出函数及调用点; 2、对走路函数本身及调用处进行归纳; 3、调查以上位置是否数量众多,值得保护; 4、如果数量不多,且便于保护,则进行保护,否则选择下一个保护线索。

  23. 代理游戏保护技术(1) 观看一种修改游戏数据的演示 一、游戏保护方向 1、文件完整性保护; 2、运行时关键数据保护; 3、关键代码保护。

  24. 代理游戏保护技术(2) 二、代码保护策略 1、内存保护 可以不定期对内存进行CRC校验,供服务器验证。 也可以防止对代码段进行写操作,如防止修改代码段属性等; 2、对关键代码进行保护 无源代码情况下需要针对性查找关键代码,然后对其特殊保护,如添加vm或监控。 但不能盲目混淆,否则达不到效果,且增加客户端资源消耗。

  25. 代理游戏保护技术(3) 三. 混淆保护方案 说话: void Speak(char *chatinfo) { ........ SendData(); } 走路: void Walk(Dword x,Dword y) { ........ SendData(); } 观看某游戏发送函数调用处 对 SendData()进行保护可以防止加密算法泄露; 但无法防止对本函数的调用; 即使对以上walk和speak进行保护,又无法对所有调用发送函数的地方都进行保护。

  26. 代理游戏保护技术(4) 保护简便、针对性强、对客户端影响小 四、针对性代码保护(关键函数保护) 如以下游戏代码,模拟攻击怪物过程: void AttackMonster(int MonsterID) { Fun1(); //判断怪物ID是否有效; Fun2(); //判断是否在攻击范围; Fun3(); //发送攻击 } 外挂会调用AttackMonster函数,而不是仅调用 Fun3 或组合调用Fun1、2、3,因为 AttackMonster 调用方便,且稳定。 这时候反外挂应该保护AttackMonster,而不是Fun3(除非有多余担心)

  27. 四、针对性代码保护(主线保护) 掌握外挂所必须的功能,对该功能全程处理,可以短期产生效果。如:1、人物保护 对游戏中必须的人物吃药保护功能进行研究,将吃药所需要的关键代码调用给予保护,让外挂无法执行吃药保护功能;2、人物走路 对人物走路进行分析研究,对所有可以执行走路的函数进行保护,让外挂无法走路。 代理游戏保护技术(5) 使外挂关键功能无法实现; 节省客户端资源; 减少游戏分析时间。

  28. 代理游戏保护小结 • 商务层面 • 加强同游戏开发商的联系,及时更新反外挂机制; • 团队建设 • 培养自己的反外挂团队,在即使无代码情况下也可以反外挂; • 技术层面 • 采用与外服不同的反外挂系统,尽量避免外服外挂直接被移植到自身游戏。 • 分析关键游戏逻辑,实现自己保护系统

  29. 谢谢观看!

More Related