游戏漏洞挖掘
文章平均质量分 85
douluo998
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IOS平台Unity3D AOT全局模块结构分析
通过load_aot_module函数可知amodule->code_offsets由全局AOT模块的method_offsets指针赋值(amodule->code_offsets定义为:uint32_t *类型),amodule->code由全局AOT模块的methods结构指针赋值(amodule->code定义为:uint8_t *类型),以上代码通过C#函数索引(method_index)进行计算。Unity引擎采用静态方式将每个C#代码模块生成对应AOT全局模块,运行阶段进行解析和执行。原创 2025-05-21 08:30:26 · 824 阅读 · 0 评论 -
Android平台Unity引擎的Mono JIT机制分析
而 compiled_method即为实际的代码。其中mono_runtime_invoke函数在mono源代码object.c中,而其实际调用的mono_jit_runtime_invoke则在mini.c代码中。info->compiled_method = mono_jit_compile_method_with_opt(method) // 编译目标函数。default_mono_runtime_invoke() // 实际上是调用了mono_jit_runtime_invoke()原创 2025-04-28 16:52:22 · 1369 阅读 · 0 评论 -
Unity3D引擎框架及用户接口调用方式相关分析及汇总
每个游戏都会通过某种方式存储场景中的所有对象,Unity引擎的场景对象通过GameObjectManager进行管理,GameObjectManager通过STL的List结构存储了游戏场景中所有对象,通过遍历List链表便可获取到游戏场景中所有对象,Unity通过GameObject::FindGameObjectWithTag函数可通过传入对象的标识从而获取到对象指针,函数通过遍历List链表的所有信息查找所需的对象。其中UpdateScene负责更新游戏场景中所有帧更新时间。原创 2025-04-28 16:51:24 · 1240 阅读 · 0 评论 -
5种隐蔽的外挂获取执行时机方法介绍
现我们使用一个新的方法叫虚表替换法,我们在DLL中自己分配一块内存,然后把CGamePlayer的虚表全部拷贝过来,修改我们要劫持的函数,再将g_LocalPlayer对象的虚表地址改为分配的新内存地址。根据上面的知识,现在我们通过替换虚表内的函数地址的方式,替换CGamePlayer对象虚表内的ComputeAttack函数地址,使得FakeGame在攻击计算伤害时执行替换后的函数,以此达到劫持FakeGame执行时机的目的。通过代码可以看到,软件断点和硬件断点差不多,只是触发异常的方式不太一样。原创 2025-04-25 16:58:07 · 1068 阅读 · 0 评论 -
常见的6种外挂获取执行时机方法介绍
比如3D透视需要在BeginScene和EndScene之间修改ZEnable,而代码执行过程瞬息万变,不通过hook的方式是没有办法准确感知时机的,所以目前主流的透视外挂功能都是通过hook d3d9.dll的代码实现的。例如假设一个游戏的伤害计算在客户端进行,我们要实现一个秒怪的功能,如果游戏开发过程中有使用memset来进行一些结构体的初始化,那么我们就可以通过hook memset 查看返回值来感知伤害运算的执行时机,从而修改栈上或者内存里的数据实现秒怪功能,同事没有修改游戏代码功能实现也更隐蔽。原创 2025-04-25 16:56:26 · 1447 阅读 · 0 评论 -
把dll模块注入到游戏进程的方法_挂起进程注入
挂起进程注入是指在创建进程的时候把运行状态设置为挂起,然后创建一个远程线程,来注入。挂起进程注入作为远线程注入的一个补充,可以在进程创建的时候就注入,从而注入时间较早,不宜被拦截。易知挂起进程注入的局限性也就是如果进程已经启动,那么这种注入方式就不行了。原创 2025-04-24 19:16:10 · 1135 阅读 · 0 评论 -
把dll模块注入到游戏进程的方法_插APC注入
APC是异步过程调用,系统创建线程的时候会为线程创建一个APC队列,当线程调用SleepEx,WaitSingleObjectEx等函数时,并把线程状态被设置为可提醒状态时,线程并不会睡眠,而是检查APC队列是否为空,如果不为空,转去执行APC队列中的每一项,因此给目标进程中的线程插入APC,就可以实现进程注入。原创 2025-04-24 19:14:58 · 1173 阅读 · 0 评论 -
把dll模块注入到游戏进程的方法_远线程注入
远线程注入是指为要注入的目标进程创建一个远程线程,在远程线程里面加载要注入的目标dll。Windows操作系统提供了跨进程的内存读写机制,这就为各种注入打下了基础。原创 2025-04-21 20:46:47 · 996 阅读 · 0 评论 -
把dll模块注入到游戏进程的方法_基于文件修改的注入方式
通过对pe结构的了解,我们会发现进程加载时依赖的dll主要来源于PE的导入表,因此我们可以自己写代码修改pe文件的导入表,也可以利用LordPe等Pe工具自行修改文件的导入表,从而让想注入的dll在原PE文件中有一席之地。(4)再用PrcoessExplorer查看test.exe所加载的dll,会发现dbghelp_0.dll(改名后的系统dll)和dbghelp.dll(我们的dll,MyDbghelp.dll改名得到的)都会被加载,如下图所示,请注意两个dll的路径。原创 2025-04-21 20:45:37 · 1839 阅读 · 0 评论 -
把dll模块注入到游戏进程的方法<a>
DLL注入技术: 是将一个Dll文件强行加载到目标进程中,比如把外挂dll模块注入到游戏进程,这样做的目的在于方便我们通过这个DLL读写目标进程指令或内存数据,(例如 HOOK游戏函数过程或篡改游戏内存数据实现外挂功能),或以被注入进程的身份去执行一些操作等。全系统注入的优点:利用系统机制实现的全系统进程注入,可绕过比如游戏进程自身的防注入保护机制。比如远线程注入游戏可能会被拦截,但输入法注入,游戏很难拦截。原创 2025-04-17 08:38:24 · 1636 阅读 · 0 评论 -
【游戏安全】工具介绍
提起反汇编,就不得不说IDA(Interactive Disassembler Professional,交互式反汇编器专业版),由Hex-Rays SA发布,是目前公认最强大的反汇编软件。IDA支持目前主流操作系统平台的常规使用,支持的操作系统包括:Windows、Linux、Mac等。支持的指令集包括:x86、x64、Arm、MIPS、PowerPC……支持的可执行文件反编译包括Android平台的ELF文件、Windows平台的PE文件、IOS系统的Mach-O文件等……原创 2025-04-17 08:26:58 · 1201 阅读 · 0 评论 -
【游戏安全】协议分析与思路
有的游戏的协议字段,可以解析出对应的名称,往往通过协议名称就能猜测其代表的意思。较为简单的协议交互往往也比较好分析,一般这些协议不频繁,且一条协议对应着一项游戏操作,复杂的情况下,有些游戏的协议交互非常频繁,即使游戏不进行任何操作,也会有大量的协议触发,此时可能正常的协议操作被淹没在了众多的协议序列中,于是就需要进行协议的对比。往往在协议对比分析过程需要用到交集法和并集法,即通过控制影响游戏的不同因素,来观察哪些协议是重复的,哪些协议是单独出现的,结合游戏场景,进一步确定对应协议的含义。原创 2025-04-16 09:05:28 · 579 阅读 · 0 评论 -
【游戏安全】协议的获取
打个不恰当的比喻,在未学习其他语言基本知识时,我们很难听懂外国人对话的,此时了解了加密过程,就好比将他们的对话翻译成国语,了解了序列号过程,就好比知道了他们的断句,有了可读懂的语言,再加上断句,我们就能清楚的知道他们每一句话的意思。常见的如对数据buf下访问/写入断点后,再次进行堆栈回溯,或对明文发包点下断,堆栈回溯观看函数的调用顺序,也可以分析数据是如何进行填充和清空的,最终确定游戏的序列化过程。还有的并没有直接调用序列化函数,而是传入了一个结构的指针,通过解析这个结构,就可以得到各个数据的偏移和大小。原创 2025-04-16 09:04:11 · 620 阅读 · 0 评论 -
【游戏安全】文本校验类风险
仍然是上述游戏,为创建空昵称,我们直接将[31 32 33]字段改写为[00 00 00],观察服务器回馈,如果通过,则空角色创建成功,如果不行,我们继续利用上述的思想,利用转义字符进行欺骗,构造[0A 0D]的TEXT段,如果服务器过滤不完全则又一次创建出了空昵称。特殊词可以简单理解成几年前的火星文,从ascii层面来看,是一些无法被解析成文本字符的文字,其构造方式很简单,直接将上述协议中text中字符修改为我们常见的ascii和汉子编码外的字符即可,这样再由游戏解析变会变成无法辨认的特殊词。原创 2025-04-14 08:40:05 · 1038 阅读 · 0 评论 -
【游戏安全】弹框骚扰类风险
结合游戏弹框案列, 无限弹框之所以能成为漏洞,首先需要具备2个属性,一个是可以干扰到玩家游戏,如果弹框对玩家没有干扰效果,那玩家也不一定会去在意,第二个是可以无限进行触发,如果弹框触发了一次之后便再也不会出现或者隔一段较长时间才能触发,那对玩家的影响也不会特别大。分析上述协议,如果我们将上述协议3多次重发,那么在游戏中,玩家B就会收到多个拒绝类型的弹框,而我们可分析得到其他玩家C或者D的uin, 替换到协议3中被拒绝玩家UIN字段里,那么就可以攻击指定的玩家了。原创 2025-04-14 08:37:53 · 1127 阅读 · 0 评论 -
【游戏安全】强制交互类风险
结合风险成因和表现形式,强制交互类的风险与之前的弹框干扰类风险有些相似,他们都具有交互的性质,而且结果都会对玩家造成干扰,不同的是,强制交互更偏向与玩家间的交互结果。游戏中处处存在着交互,玩家与游戏的交互,玩家与玩家的交互,交互的好坏也直接影响到玩家的游戏体验。结合上述案列可以发现,正常情况下交互在游戏中是合理的,但有些交互能够被玩家利用后让其他玩家只能被动接受交互过程或交互结果,而造成这种风险的主要原因是服务器未对交互的合法性进行判断。又比如你在某游戏场景中正在闲逛,突然之间,游戏弹出一个交易框。原创 2025-04-13 09:14:07 · 842 阅读 · 0 评论 -
【游戏安全】限制突破类风险
尝试修改锻造物品ID至任意,发现服务器对玩家无法锻造的物品进行了校验,但我们进一步更改玩家一次锻造物品个数为0x10,并进行协议重发,发现玩家一次可以锻造20个物品,进一步我们锁定玩家锻造物品次数为0x01,让服务器认定为每一次锻造物品,都是今天的第一次锻造,这样就欺骗了服务器,可以突破每日的锻造次数上限了。有游戏逻辑入手,一般需要具有较强的逆向功底和编程能力,从协议上入手,比较简单,利用协议工具,分析清楚协议间的交互逻辑,在通过工具的自动切割,确定每一个字段的含义,就可以结合限制点进行协议修改重发了。原创 2025-04-13 09:09:31 · 1008 阅读 · 0 评论 -
游戏漏洞之时间竞争风险
某游戏你正在激励的排位厮杀,但最终还是因为自己一不小心,被对方一套连找到打成残血,就快要输掉这场比赛了,你心里很不甘心,这可是你的定级赛啊,于是你利用游戏漏洞,直接退出PK至选择角色不虚弱和无处罚(地狱模式),此时你的中途退出不会收到游戏的处罚,你可以继续匹配定级。时间竞争在游戏中风险很高,又因为在弄清楚利用方式后,利用又较为简单,有可能只需要关闭下进程,就完成了一次游戏中的漏洞利用,因此时间竞争带来的游戏漏洞传播速度很快,能在短时间内造成玩家大量使用获益,破坏游戏口碑。,称之为时间竞争带来的风险。原创 2025-04-12 09:34:47 · 1007 阅读 · 0 评论 -
边界条件风险产生漏洞分析
某游戏在开启宝箱后,获得的物品数量是随机的,有可能会获得一件极品的装备,有可能会获得好几件装备的材料,此时你将自己人物角色的背包栏物品放满,只留一个空栏位格子,这个时候再去开启宝箱,奇怪的事情发生了,你所有开出来的材料均因为无法放入背包而导致开箱子失败,而只有当你开出那件极品装备时,才会开宝箱成功,利用这个漏洞,你可以100%开出自己要的那套装备。也正是因为触发条件比较苛刻,所以边界条件产生的漏洞验证方法没有固定的一套方法,只能根据游戏的表现和协议交互的逻辑,去推测在边界时可能产生的风险,并大胆的去验证。原创 2025-04-12 09:33:07 · 570 阅读 · 0 评论 -
外挂类风险评估讲解分析
强竞技类游戏的外挂,主要目的是为了使玩家在竞技过程中获得增益,如FPS类游戏的透视自瞄,动作类游戏的远程攻击,自身无敌,全屏秒杀等,这些外挂往往具有变态类功能,破坏了竞技的公平性,而休闲类游戏的外挂,主要是为了增加趣味性、恶意干扰等功能,如任意捏脸,限定表情,变色文本,,比如以敲诈勒索类为主的恶意干扰,以刷屏霸屏为主的广告推销等等……分析协议,可以发现,客户端只上报人物开枪的ID,协议中仅仅包含人物的射击方向,这种协议类似与客户端触发的攻击协议,只播放本地动画效果,剩下的计算逻辑,全部在服务器进行。原创 2025-04-12 09:30:43 · 1175 阅读 · 0 评论 -
【游戏安全】基于协议时序的挖掘
比较多见的,就是玩家的状态同步,攻击者A,修改了自己的戒指,上报给服务器,上行协议只包含修改戒指这一项,服务器接受后,并不清楚玩家的哪一项状态发生了变化,于是将整个玩家A的状态(包括皮肤,武器,服饰,装饰,宠物)全部下发给了每一个玩家,于是一个经典的小换大的风险就产生了,你不停的上报自己状态的改变,每次可能只需要发送10个字节给服务器,但是服务器为了同步,可能需要发送1000个字节给其他的玩家,如果频率很快的话,自然就导致了对方客户端的卡死。l 协议频发:短时间发送大量协议,多用于测试协议性能问题。原创 2025-04-11 15:40:52 · 694 阅读 · 0 评论 -
【游戏安全】基于协议场景的挖掘
协议触发的场景各种各样,服务器通过不同的协议去感知玩家所处的游戏客户端的场景,所进行的游戏操作,通过计算处理并告知客户端结果是什么,下一步可进行的操作又是什么。但是很多时候,服务器对客户端触发协议的场景并没有进行校验和判断,导致了游戏可以具备了当前游戏场景不具备的功能,突破了当前游戏场景所受到的限制。某游戏在进行匹配对局中,进入房间后,本应该收到下行匹配完成的协议,但恶意玩家直接丢弃匹配完成的下行协议,导致对方客户端一直等待匹配完成协议而假死,受害玩家只能选择结束进程,进而受到游戏安全方案处罚。原创 2025-04-11 15:39:17 · 526 阅读 · 0 评论 -
【游戏安全】基于协议内容的挖掘
协议内容中的包含了许许多多的字段,不同的字段被服务器/客户端使用,起到了不同的作用。某游戏的弹框协议中有字段代表着所要拒绝的玩家的ID,因为服务器未对ID的合法性做校验,则可以在游戏中给任意玩家造成无限弹框(下图为在正常跳舞过程中收到弹框骚扰)某游戏登录游戏时,有字段代表着协议长度,将对应的字段改为0Xff(-1),直接导致了整个服务器的宕机,服务器中所有玩家全部掉线。某游戏的幻影瞬移药剂中有字段代表着瞬移到的位置ID,但是因游戏未做校验,则可替换位置ID,到任意想去的城镇。原创 2025-04-11 15:37:09 · 667 阅读 · 0 评论
分享