《代理游戏反外挂思路》由会员分享,可在线阅读,更多相关《代理游戏反外挂思路(29页珍藏版)》请在金锄头文库上搜索。
1、代理游戏反外挂思路Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望 简 介 代理游戏反外挂简介代理游戏反外挂简介常见外挂和反外挂策略常见外挂和反外挂策略网游交互流程简介网游交互流程简介游戏分析的技巧游戏分析的技巧代理游戏保护技术代理游戏保护技术代理游戏举例代理游戏反外挂简介代理游戏优点游戏成熟,有专门的开发公司与成熟的外服运作经验;bug少。很多被代理的游戏在外服已经运作,漏洞已明显减少;推广容易。很多代理游戏已被玩家群体所了解认可代理游戏缺点无源代码,修改周期长、可控性差;反外挂不
2、容易,很多代理游戏反外挂系统在外服运作已经被外挂群体占领;bug修复困难。没有代码情况下,很难定位、修复bug。常见的外挂类型 (II) 内挂1、修改通讯数据;2、模拟键盘鼠标;3、调用游戏自身函数和数据; (I) 脱机脱离游戏运行的脱机外挂已可以方便被打击,难以生存;随同游戏一起运行的辅助外挂逐渐流行; (III)模拟挂外挂不修改通讯协议,仅靠加强加密算法和通讯数据检测很难查出。可采用反外挂策略2、加强游戏本身完整性检测,减少游戏内部被利用;1、加强服务端策略性检测;3、对游戏关键数据进行保护;4、对游戏关键函数进行混淆。结合本次议题,主要分享如何在无源代码情况下(即代理游戏),通过对游戏进
3、行分析,实现2、3、4种方案。网游交互流程简介网游交互流程简介怪物信息人物信息NPC信息物品信息其 他攻击怪物其 他物品相关NPC交互人物交互玩家外挂1服务器外挂21.客户端与服务器交互流程网游交互流程简介外挂和反外挂都关心客户端与服务端交互的数据处理,而非游戏图形引擎。与windows的消息处理一样,与服务端交互的数据也有自己的数据处理机制。A、状态机形式B、功能函数形式C、以上二者结合 以上架构的实现并没有特定方式,可能由单独的线程来实现,也可能不同线程进行配合,数据的组织也多样化。 需要设计人员或分析人员进行确认,从而方便在无游戏代码情况下对客户端进行针对性保护。2.客户端数据处理流程S
4、1S5S4S3S2Fun1网游交互流程简介状态机不停运行,状态机不停运行,检测各个标记位,检测各个标记位,发现标记位变化,发现标记位变化,则进入相应处理。则进入相应处理。Fun2重点是对状态标识位的分析与参数的分析3.状态机原理简介网游交互流程简介游戏本身没有专门的数据处理线程,而是对客户端的鼠标键盘IO操作进行响应,如检测到鼠标点击,则判断是否在地图上,如果是走路行为,则转入走路函数。这种形式的数据处理一般从客户端发送函数分析上层调用就可以简单找到相关功能函数。 4.功能函数调用简介网游交互流程简介/走路函数Void Walk(DWORD x, DWORD y) SetState(_GOWA
5、LK); /设置自动机状态位 TargetPoint(x, y); /设置走路坐标参数既有状态位修改,也有功能函数调用。实质上是对状态位的封装。避免直接引用状态位,引发不可测错误。重在找出设计人员的原始调用接口,重在找出设计人员的原始调用接口,而不是断章取义拼凑函数内部代码。而不是断章取义拼凑函数内部代码。5. 状态机结合功能函数调用游戏分析技巧1. 游戏的数据结构外挂有自己的算法,游戏内的数据结构和数据才是操作目标。通常关键数据: Player属性结构、怪物链表、物品链表、地图信息表、其他相关链表。常用的数据结构:数组、链表、二叉树。数组可能有一维数组、二维数组;链表可能有动态链表、循环链表
6、等;二叉树一般是平衡二叉树,方便进行有序查找。游戏数据结构和内存位置泄露非常危险!游戏数据结构和内存位置泄露非常危险!游戏分析技巧(1)1、寻找程序员留下的调用接口 外挂会尝试调用程序员设计的函数接口实现外挂功能,即简单又稳定。反外挂人员也应该从此处入手;2、检查调用处次数利用反汇编器,查找对发送函数的调用次数,根据调用次数判断。如给服务器发送数据的函数,被引用次数一般非常多。3、利用不同功能寻找调用接口 如不好判断走路函数接口,则可以进行不同方式的走路,如每种方式都会调用某函数,则极可能是程序员预留的接口;4、利用不同状态寻找关键函数 如不好寻找地图障碍点判断函数,则可以试图走向可达位置和不
7、可达位置两种情况,对两次代码流程比较,二者流程分离的位置就是障碍点判断位置。游戏分析技巧(2)5、留意游戏内非常规功能如: a、游戏内自带的辅助性工具,其功能实现接口可能被外挂利用; b、游戏内快捷按键功能能被利用; c、“人物跟随”等其他非正常功能可能被利用。 6、信息打印产生的信息泄露如: 游戏内显示人物属性界面,会打印人物所有信息,如果找到打印函数,在此处分析往往会把人物所有信息都获取到游戏分析技巧(3)7、数据结构的查找 如: 每种数据结构都可能会有很多地方引用。如怪物链表,怪物信息修改、删除、打怪、选怪等很多地方都会引发对怪物链表的操作,很难通过对某处代码施行保护防止别人分析出怪物链
8、表。游戏分析技巧(4)游戏怪物链表分析(1)怪物链表枚举一:按tab键选怪mov esi, dword ptr esp+18mov eax, dword ptr esi+44mov ebp, dword ptr eax /获取链表指针add esi, 40mov 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)图形引擎刷新
9、地图上所有角色/获取链表指针mov eax, dword ptr edx+4mov edi, dword ptr eaxmov ebx, dword ptr esp+18mov esi, dword ptr ebx+44add ebx, 40cmp ebx, ebxmov dword ptr esp+2C, edije short 004308ABcall 006E34CEcmp edi, esi /判断是否到了链表尾je 00430A4Ecmp edi, dword ptr ebx+4jnz short 004308BD/中间是对角色处理mov edi, dword ptr edi /获取下
10、个节点指针jmp 00430894 /处理下一个节点游戏怪物链表分析(3)1、以上2处链表都可以泄露怪物信息,都很危险,值得保护;2、仍然有其他地方链表存在,比如对怪物新增、删除、修改时候,都会枚举怪物链表;3、要么对每处链表处理都分析保护,要么处理其他线索。游戏走路线索分析(1)1、游戏里输入坐标进行走路:push edi /目的坐标ypush ebx /目的坐标xcall 00421250 /走到目的004221E1 call 00421250004C68AB call 004212500057D408 call 004212500057E88C call 00421250005840A7
11、 call 0042125000584105 call 004212500062A0E7 call 0042125000652681 call 00421250006622D2 call 004212500066B372 call 0042125000671A5A call 004212500068AB27 call 00421250调用这个函数的地方:游戏走路线索分析(2)点击鼠标进行走路: push 2 push eax push ecxpush esicall 0051D2B0 /进行移动0051D14C call 0051D2B00051D176 call 0051D2B00051D1
12、92 call 0051D2B00051D1AE call 0051D2B00051D1CA call 0051D2B00051D1E6 call 0051D2B00051D203 call 0051D2B00051D245 call 0051D2B00051D262 call 0051D2B0调用该函数的地方:游戏走路线索分析(3)1、对各种形式的走路加以分析,找出函数及调用点;2、对走路函数本身及调用处进行归纳;3、调查以上位置是否数量众多,值得保护;4、如果数量不多,且便于保护,则进行保护,否则选择下一个保护线索。代理游戏保护技术(代理游戏保护技术(1 1)一、游戏保护方向1、文件完整性
13、保护;2、运行时关键数据保护;3、关键代码保护。观看一种修改游戏数据的演示观看一种修改游戏数据的演示二、代码保护策略1、内存保护 可以不定期对内存进行CRC校验,供服务器验证。 也可以防止对代码段进行写操作,如防止修改代码段属性等;2、对关键代码进行保护 无源代码情况下需要针对性查找关键代码,然后对其特殊保护,如添加vm或监控。 但不能盲目混淆,否则达不到效果,且增加客户端资源消耗。代理游戏保护技术(代理游戏保护技术(2 2)代理游戏保护技术(代理游戏保护技术(3 3)对 SendData()进行保护可以防止加密算法泄露;但无法防止对本函数的调用;即使对以上walk和speak进行保护,又无法
14、对所有调用发送函数的地方都进行保护。走路:void Walk(Dword x,Dword y) . SendData();说话:void Speak(char *chatinfo) . SendData();观看某游戏发送函数调用处观看某游戏发送函数调用处三. 混淆保护方案四、针对性代码保护(关键函数保护)如以下游戏代码,模拟攻击怪物过程:void AttackMonster(int MonsterID) Fun1(); /判断怪物ID是否有效; Fun2(); /判断是否在攻击范围; Fun3(); /发送攻击 外挂会调用AttackMonster函数,而不是仅调用 Fun3 或组合调用Fu
15、n1、2、3,因为 AttackMonster 调用方便,且稳定。 这时候反外挂应该保护AttackMonster,而不是Fun3(除非有多余担心)代理游戏保护技术(代理游戏保护技术(4 4)保护简便、针对性强、对客户端影响小四、针对性代码保护(主线保护) 掌握外挂所必须的功能,对该功能全程处理,可以短期产生效果。如:1、人物保护 对游戏中必须的人物吃药保护功能进行研究,将吃药所需要的关键代码调用给予保护,让外挂无法执行吃药保护功能;2、人物走路 对人物走路进行分析研究,对所有可以执行走路的函数进行保护,让外挂无法走路。 使外挂关键功能无法实现;节省客户端资源;减少游戏分析时间。代理游戏保护技术(代理游戏保护技术(5 5)代理游戏保护小结商务层面加强同游戏开发商的联系,及时更新反外挂机制;团队建设培养自己的反外挂团队,在即使无代码情况下也可以反外挂;技术层面采用与外服不同的反外挂系统,尽量避免外服外挂直接被移植到自身游戏。分析关键游戏逻辑,实现自己保护系统 谢谢观看!