行业解决方案查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
发布时间:2022-10-09 16: 52: 09
本文分享自安全论坛,通过对游戏样本使用IDA静态分析,寻找驱动保护机制,并扩展学习设计模式的思路。
背景说明:
样本XIGNCODE3是为大型多人线上游戏所发行的一款游戏反作弊软体,被用于如新枫之谷(南韩版)、战地之王等网游中。XIGNCODE为wellbia所制作。
下面请和笔者一起分析了整个驱动的流程部分,依次介绍分析过程和思路,在这个样本里不仅可以学习到很多内核编程的知识,也可以借鉴到一些设计模式上的东西。
那么我们直接开始分析,先从入口点开始。
一、驱动入口点
首先,一般在DriverMain中驱动主要会做几件事:
①初始化系统版本偏移
②注册通信的分发函数
③设置通讯函数
④注册通知和回调
⑤创建进程通知
二、初始化系统版本偏移
本步骤的思路主要是根据不同的系统版本号初始化一些全局变量,这里不做具体分析了:
三、初始化系统版本偏移
3.1 DisPatchCreate和DisPatchClose的分发,因为是默认的分发函数,并没有太多可以分析:
3.2 DispatchWrite函数的分发
3.2.1通讯数据结构的部分分析
这里就比较关键了,可以注意到丢了两个通讯条件,一个是在通讯函数的头部存放了一个长度值,另一个是sysBuffer的值是一个固定值。
由此我们目前可以确定InputBuffer中的前8个字节0x345821AB00000270
前四个字节是长度,后四个字节是固定标识码,用于确认三环程序的身份。
3.2.2 FuncCall分析
由于在上一小节中我们只知道了InputBuffer的前8个字节,直接看IDA分析过后的代码,可以看到while中的条件判断是在判断FuncIndex,函数编号:
我们双击FunCallArray进去看看里面是什么?是标准的8字节排列的对象,由此猜测这很可能是函数数组。怎么确定这个事实?并且也确定FuncIndex就是函数索引的呢?请别急,继续看下一节“设置函数通讯你列表”:
四、设置通讯函数列表(SetKeyDisFuncArray的分析)
我们观察上面的截图,看到第一个140010F88(8字节)和140010F90(4字节)
再看看下方的截图,你发现了什么?它就是一个8字节对齐的全局的结构体数组:
由此我们可以知道3.2.2小节中FuncCall的命名由来,实际上他在根据索引确定函数的调用。
接下来会挑几个个人觉得比较有意思的函数进一步分析:
4.1 ReadProcessMemory
4.2 DisObSetHandleAttribute
可以看到一个附加操作下面,又调用了一个函数,继续跟进发现内部调用了“ObSetHandleAttributes”:
如果在逆向分析时不了解这种函数是做什么的,请尝试打开wrk搜索:
我们继续看一下HandleFlags的结构体类型:
基本可以确定这是一个用于关闭文件的函数,但如果不是十分肯定的话,可以通过搜索引擎进一步确认。
4.3 DispSetWin32kTable
一直跟进可以发现它是在做一些函数全局变量的初始化:
4.4 DetectUserDrawDllHook
可以看到这个函数里的关键部分“CraeteDrawDLLDetectMemory”:
我们继续跟进:
可以发现里面申请了内存,然后把字符串拷贝进去,显然这是在创建需要检测的dll数据。我们能分析得到这驱动会在“dwmcore.dll”、“gdi32.dll”、“user32.dll”上做一些监控。
4.5 DispSetWindowDisplayAffinity
继续跟进:
进入“CreateKernelAndUserDetectThread”,参考图中注释可以看到这个函数在做什么:
五、注册通知和回调
继续分析,我们会发现通知和回调干了两件事,红框圈出来的部分:
我们深入进去看下RegisterCallBack:
六、创建进程通知
我们深入进去看一下:
继续跟进CheckInformationProcess,看到两个关键点:ZwQueryInformationProcess,查询号为27:ProcessImageFileName,然后也出现了ZwClose。
如果你有在这款驱动加载的情况下打开某些调试器的经验,那么大概就是这个函数在生效影响。
本文转自【看雪论坛】,原作者【铜锣湾扛把子】
展开阅读全文
︾
读者也喜欢这些内容:
IDA静态分析怎么做?IDA静态分析需要多久?
在软件逆向工程与安全分析行业,IDA 因其强大的功能,已成为业内不可或缺的工具之一。尤其是在静态分析方面,IDA提供了一系列高效功能和技术,激励安全分析师和反向工程师全面了解目标软件的内部结构和逻辑。本文将详细讨论ida静态分析怎么做,ida静态分析需要多久,帮助其更有效的运用IDA开展静态分析,掌握静态分析与动态变化实践应用的差别和联系。...
阅读全文 >
IDA怎么修改字符串内容?IDA修改后怎么保存?
在软件开发和逆向工程领域,IDA Pro是一种极其强悍的工具,广泛用于程序剖析、调试和修改。它不仅支持多种处理器架构,还提供了大量的作用,以适应高档讲解的必须。本文将围绕ida怎么修改字符串内容,ida修改后怎么保存这一主题,详细描述怎样在IDA中更改字符串内容,及其修改后的存放方式。此外,我们还将探讨IDA转变的应用场景,帮助读者更深入地了解IDA的实际应用价值。...
阅读全文 >
什么叫反汇编 反汇编的软件有哪些
在计算机科学和软件工程领域,反汇编一直是一个关键的概念。与其紧密相连的反编译技术和各种反汇编软件也在不断地演进和发展。今天我们将深入探讨什么叫反汇编,反汇编的软件有哪些,以及反汇编的软件哪款比较好。我们将全方位解析这一复杂而又迷人的主题,帮助你更好地理解和掌握反汇编的核心内容。...
阅读全文 >
逆向脱壳分析方法有哪些 如何使用IDA Pro进行脱壳
在软件逆向工程领域,脱壳(Unpacking)是指将已经加壳的程序还原成未加壳的状态,以便进行更深入的分析和研究。软件加壳是一种常见的保护措施,用于防止程序被破解或修改。...
阅读全文 >