差异分析定位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、防火墙和二进制逆向分析,AndroidiOS客户端软件安全,以及WebWAP安全。

本文节选自《游戏外挂***艺术》一书。徐胜 著,由电子工业出版社出版。

 

转载于:https://blog.51cto.com/bvbroadview/1175464

差异分析定位Ring 3保护模块相关推荐

  1. 北斗定位导航系统,北斗模块应用领域发展概况_北斗二号模块,北斗三号模块

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.北斗系统概述 1.1 空间段 1.2 地面控制段 1.3 用户段 1.4 坐标系统 1.5 时间系统 二.北斗系统 ...

  2. UWB定位基站电路保护方案

    在UWB定位系统中,定位基站的布置决定了UWB定位的维度(零维.一维.二维.三维),定位基站可以设置为固定和移动两种情况. UWB定位基站与定位标签之间主要有两种方式来进行通讯:ToF与TDoA. T ...

  3. 对层级聚类树进行模块分割,定位基因在哪个模块中

    拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?page=b%27Ng%3D%3D%27),并设置参数. ``` ...

  4. Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包

    一.模块 Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变量,模块⾥也能包含可执⾏的代码. ...

  5. VDHL VGA控制器设计实现显示器屏幕保护模块

    基本功能: 1.通过FPGA板的VGA接口在显示器上分别显示不同颜色的横向.竖直条纹图案,横向条纹和竖直条纹的切换通过FPGA板上的按键实现. 2.通过VGA控制器,在屏幕上显示640*480的单色背 ...

  6. 【Spring学习】ring的core模块应用详解

    Core模块主要的功能是实现了控制反转与依赖注入.Bean配置以及加载.Core模块中有Beans.BeanFactory.BeanDefinitions.ApplicationContext等概念. ...

  7. 读保护_混合ASIL系统中不同安全等级模块间的边界保护

    01 功能安全组件的软件开发 针对ISO 26262对功能安全软件研发的要求,AUTOSAR将功能安全需求进行了具体拆分.当前的AUTOSAR规范囊括了诸多功能安全组件软件开发的需求概念. 在AUTO ...

  8. 保护计算机系统与数据有什么方法,计算机系统开机和硬盘数据保护方法,与其数据保护模块...

    技术领域 本发明涉及一种数据保护技术,且特别是涉及一种计算机系统的开机和硬盘数据保护方法,与其数据保护模块. 背景技术 图1示出了一种已知的具有密码保护的计算机系统的开机方法步骤流程图.请参照图1,已 ...

  9. 开源一个安信可A9g小项目微信小程序定位器项目②GPS模块如何定位经纬度并且上报到MQTT服务器,实现远程查看模块的经纬度;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 如何在windows10上环境搭建,编译烧录代码固件,查看运行 ...

最新文章

  1. 032-session函数
  2. 用例图(use case)
  3. MFC多文档应用程序同时显示两个视图
  4. 解决centos KDE命令提示符和文字不紧贴的问题
  5. Web前端期末大作业--绿色自适应医疗健康医院网页设计(HTML+CSS+JavaScript+)实现
  6. 集成学习—Adaboost(理解与应用)
  7. Oracle expdp和impdp
  8. mysql 数据库缓冲池_MySQL5.6新特性快速预热Buffer_Pool缓冲池
  9. guava 集合上 三
  10. android context继承关系,Android - 认识Context
  11. java学习——线程
  12. 百度离线语音合成SDK使用
  13. java学习之道 --- 如何学习java?
  14. 【iPhone】解决照片无法编辑或删除的问题
  15. iOS app跳转微信小程序失败 报bad_param
  16. android设置输入数字英文,android 安卓editext默认弹出英文输入法,只能输入英文与数字(示例代码)...
  17. Ubuntu下九大最佳绘图程序---kolourpaint4 ubantu已经自带了
  18. 大一网页设计期末大作业,HTML+CSS静态网站
  19. 手机计算机藏应用,手机“计算器”隐藏功能,一键把隐私照片加密
  20. matlab画直齿轮,有哪位大神有matlab 直齿轮传动优化的代码

热门文章

  1. 告别学术论文恐慌!休斯顿大学教授的这个建议,让学术写作更简单
  2. 嬴彻再融超亿美元,宁德时代领投,领跑自动驾驶卡车行业
  3. 一个退休程序员,用高中几何方法,让百年数学难题逼近理论极限
  4. 任正非最新内部信:过去只为赚点小钱,现在要用5G+AI战胜美国
  5. docker中使用systemctl启动服务
  6. 第二篇:salt-api使用填坑指南
  7. QTP测试之With秒用
  8. C# 调用WinRar解压压缩包
  9. ubuntu 12.04.1升级至ubuntu 12.10出现gcc-4.7依赖库错误的解决办法
  10. MSSQL2000+asp.net+论坛安装过程