差异分析定位Ring 3保护模块
由于保护模块通常会Hook操作系统的原生DLL接口来进行保护,所以可以采用差异比较原生DLL文件和加载到内存中的原生DLL直接的差别来定位Ring 3模块。
在分析的过程中,为了防止被Ring 3保护模块发现,暂时可以先把除了自己线程外的其他线程暂停,如图8-14所示。
图8-14 悬挂除自己线程外的其他线程
从图8-14中可以看出,除自己线程外,该游戏有58个线程,可以通过SuspendThread()函数悬挂这些线程以便后续的分析(GS的命令就是ste序号)。
下面,我们再对3个常用原生DLL——ntdll.dll、kernel32.dll和user32.dll进行文件和内存的比较,如图8-15所示。
图8-15 差异分析原生DLL的变化
从图8-15中可以看出,ntdll.dll有3处地址发生了变化,分别是0x7c921230、0x7c92DEB6和0x7c97077B。下面让我们看看这3处地址目前的指令是什么,如图8-16所示。
图8-16 两处地址jmp指令
在图8-16中,有一处jmp指令是跳入地址0x45320F0。让我们看看它属于哪个模块,如图8-17所示。
图8-17 模块节信息
从图8-17的地址区间来看,是包含0x45320F0的,所以,在ntdll.dll中地址0x7c92deb6会跳入X.dll模块。到目前为止,我们基本可以判断ring 3下的游戏保护模块是X.dll。
为了能更准确地判断X.dll是否是真的保护模块,下面让我们看看ntdll.dll中3处发生变化的地址在原生ntdll.dll中的作用。
可以用IDA对ntdll.dll进行分析,然后定位地址0x7c921230、0x7c92DEB6和0x7c97077B。
如图8-18所示,原来此处地址是DbgBreakPoint函数。这个函数是供调试器下软件断点用的,而在游戏中却被改成了ret指令,这样做能起到防止下软件断点的作用。
图8-18 0x7c921230地址所处函数
如图8-19所示,0x7c97077B地址是属于DbgUiRemoteBreakin函数的,这个函数的详细介绍可以参见张银奎老师的《软件调试》一书的第10.6.4节。这里还是简单说明一下这个函数的作用,以便读者能了解。
图8-19 0x7c97077B地址所处函数
DbgUiRemoteBreakin是ntdll提供的用于在目标进程中创建远线程下软件断点的函数,其伪代码如下。
DWORD WINAPI DbgUiRemoteBreakin( LPVOID lpParameter)
{
__try
{
if(NtCurrentPeb->BeingDebugged)
DbgBreakPoint();
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
Return 1;
}
RtlExitUserThread(0);
}
当调试器通过CreateRemoteThread函数在目标程序中创建DbgUiRemoteBreakin线程的时候,从代码上来看是下了int 3软件断点。由于在被调试状态,所以调试器可以捕获这个异常。如果目标程序没有被调试的话,DbgUiRemoteBreakin中的S.H.E显然可以捕获并处理它。
所以,游戏保护系统在对DbgUiRemoteBreakin进行jmp操作,很明显是为了防止被调试。下面再看看保护系统从DbgUiRemoteBreakin跳到了哪里。
如图8-20所示是保护系统从DbgUiRemoteBreakin跳入执行的函数,很明显,LdrShutdownProcess是一个关闭进程的函数。
图8-20 0x7C943DEF地址所处函数
下面再让我们看看地址0x7c92DEB6处的含义。
如图8-21所示,保护模块对ZwProtectVirtualMemory函数进行了Hook,以防止虚拟内存所在页面的保护属性被改变。
图8-21 0x7c92DEB6地址所处函数
关于更多分析游戏保护方案的思路见<<游戏外挂攻防艺术>>第8章。
作者简介
徐胜,2009年于电子科技大学获得计算机科学与工程硕士学位,现就职于阿里巴巴,从事移动安全的研究和移动产品的研发,主要研究方向包括:Windows平台下的木马、外挂、Rootkit、防火墙和二进制逆向分析,Android和iOS客户端软件安全,以及Web和WAP安全。
本文节选自《游戏外挂攻防艺术》一书。徐胜著,由电子工业出版社出版。
相关推荐
在操作系统的世界里,Ring0和Ring3是处理器的特权级别,它们定义了代码执行时的权限等级。Ring0通常代表最高级别的权限,是操作系统内核的所在地,而Ring3则是用户模式应用程序运行的地方,拥有相对较低的权限。这篇...
"基于文件属性修改的文件保护(Ring3级别)"是一种常见的安全策略,它主要针对操作系统中的用户层(Ring3),即普通应用程序运行的层级进行操作。这种方法旨在限制对特定文件或文件夹的访问,防止未经授权的修改、...
总结,"Ring3篇病毒入门"是一个针对在用户模式下创建和分析病毒的学习主题,涉及到病毒机制、感染途径、防护策略等多个方面。通过学习这些知识,不仅可以提高安全意识,也能帮助安全专业人员更好地防御和应对这类...
在操作系统的世界里,Ring3和Ring0是处理器的特权级别,它们定义了程序对系统资源的访问权限。Ring0通常代表最高级别的权限,是操作系统内核运行的地方,而Ring3则是用户模式应用程序的运行环境。从Ring3切换到Ring0...
在计算机操作系统中,Ring0和Ring3是保护模式下的特权等级,它们定义了不同级别的操作系统内核和用户程序的访问权限。Ring0通常代表最高权限,操作系统内核在此级别运行,具有对硬件的直接访问权,而Ring3则是用户...
在x86架构中,操作系统通常使用保护模式,其中Ring0和Ring3是两个关键的执行级别,分别代表了最高的系统权限和最低的用户权限。本资料"驱动层ring0和应用层ring3软件通信.zip"将深入探讨这两个层次之间的通信机制。 ...
Ring3是操作系统保护模式下的用户模式,其中运行的是普通应用程序,而反作弊机制则需要在此环境中监测可疑行为。 首先,让我们了解什么是EBP(Base Pointer)寄存器。在x86架构的CPU中,EBP是一个通用寄存器,常...
Ring3 Hook ZwQuerySystemInformation是一种在用户模式(Ring 3)下进行系统调用拦截的技术,主要用于修改系统行为或获取额外的信息。在这个特定的场景中,它被用来隐藏进程,使得该进程在操作系统中变得不可见。这...
在计算机系统中,Ring3和Ring0是操作系统中权限级别的两个关键术语,分别代表用户模式和内核模式。Ring3通常被用户程序所使用,而Ring0则属于操作系统核心,拥有最高的权限。本文将深入探讨如何从Ring3(用户模式)...
在IT安全领域,"ring3实现的进程防杀"是一个重要的技术话题,它涉及到系统级保护和反恶意软件策略。Ring3是CPU操作模式之一,通常指用户模式,与Ring0(内核模式)相对。在用户模式下运行的代码不能直接访问硬件资源...
在IT领域,Ring3下的API Hook技术和进程防杀是两个重要的概念,它们通常与系统级别的安全性和监控有关。本文将详细探讨这两个主题,并基于提供的标题和描述,解释如何在Ring3层实现API Hook以及如何防止被其他进程...
在计算机系统中,Ring3和Ring0是处理器的特权级别,它们代表了不同的权限等级。Ring3是用户级,而Ring0则是内核级。在Windows操作系统中,大部分应用程序运行在Ring3,享受较低级别的权限,以防止它们破坏系统的稳定...
Ring3 下隐藏进程.txt
在操作系统的世界里,Ring0和Ring3是处理器的特权级别,它们构成了操作系统的保护环结构。这个主题"r3_2_r0.rar_RING0 RING3_ring0_zw r0 r3 ho"聚焦于如何在Windows 2000和XP系统中从用户模式(Ring3)进入内核模式...
### Ring3恢复HOOK FOR Delphi #### 1. HOOK机制简介 在计算机编程领域中,HOOK(钩子)是一种常用的程序设计技巧,允许程序员捕获并修改特定类型的事件或调用。HOOK可以用于多种目的,比如监控系统状态、修改函数...
在Windows操作系统中,Ring3级别的代码通常指的是用户模式下的代码,与之相对的是Ring0,即内核模式。"ring3实现任务管理器的进程防杀"是指在用户模式下编写程序来防止其他进程被任务管理器或其他类似工具结束。这种...
Repo for Rootkit Ring 3 and Ring 0 test in Python and C++
在操作系统的世界里,RING0和RING3是处理器的特权级别,它们定义了代码执行时的权限级别。RING0通常代表最高级别的权限,是操作系统内核和驱动程序运行的地方,而RING3则是用户模式应用程序的标准权限等级。理解这些...
标题中的"ring3 hook api 隐藏文件"指的是在用户模式(ring3)下通过API钩子技术来隐藏文件的方法。API钩子是系统编程中一种常见的技术,它允许程序拦截并修改其他进程调用系统函数的行为。在这个场景中,可能是为了...
驱动加载软件是计算机系统中一个关键的技术领域,主要用于在用户模式(Ring3)下的应用程序与操作系统内核(Ring0)之间建立桥梁。标题和描述提到的"在ring3的exe中加载内核ring0的驱动程序.sys"是指一种技术,允许...