海北州网站建设公司,做个自己的影院网站怎么做,杭州建设网址,做qq图片的网站有哪些差异分析定位Ring 3保护模块 由于保护模块通常会Hook操作系统的原生DLL接口来进行保护#xff0c;所以可以采用差异比较原生DLL文件和加载到内存中的原生DLL直接的差别来定位Ring 3模块。 在分析的过程中#xff0c;为了防止被Ring 3保护模块发现#xff0c;暂时可以先把除了…差异分析定位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安全。 本文节选自《游戏外挂攻防艺术》一书。徐胜著由电子工业出版社出版。