「安全技术」针对常见混淆技术的反制措施

本文深入探讨了两种常见的混淆技术:基于IAT导入表和基于控制流的混淆。通过实例解析了如何混淆和去混淆,重点介绍了去混淆IAT导入表的自动化方法以及基于控制流的去混淆算法DeFlow。混淆技术虽然增加了逆向分析的难度,但自动化工具的使用可以显著简化去混淆过程。
摘要由CSDN通过智能技术生成

前言

现代软件经常将混淆技术作为其反篡改策略的一部分,以防止黑客逆向分析软件的关键组件。他们经常使用多种混淆技术来抵御黑客的攻击,这有点像滚雪球:随着雪层的增多,软件规模也随之变大,使其逆向分析难度随之提高。

在这篇文章中,我们将仔细研究两种常见的混淆技术,以了解它们是如何工作的,并弄清楚如何去混淆。

概述

这里,我们将研究以下混淆技术:

基于IAT导入表的混淆技术

基于控制流的混淆技术

基于IAT导入表的混淆技术

在深入介绍基于IAT导入表的混淆方法之前,先让我解释一下导入表到底是什么。

什么是导入函数?

当进行逆向分析时,需要弄清楚的第一件事,就是它如何调用操作系统的函数。在我们的例子中,我们将重点关注Windows 10系统,因为大多数视频游戏只能在Windows系统上运行。无论如何,对于那些还不知道的人来说,Windows提供了一系列重要的动态链接库(DLL)文件,几乎每个Windows可执行文件都会用到这些库文件。这些DLL文件中保存了许多函数,可以供Windows可执行文件“导入”,使其可以加载和执行给定DLL中的函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oa7M0AaV-1648539503493)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f4ef5e296cab447885a97e999fe2073e~tplv-k3u1fbpfcp-zoom-1.image)]

它们为何如此重要?

例如,Ntdll.dll库负责几乎所有与内存有关的功能,如打开一个进程的句柄(NtOpenProcess),分配一个内存页(NtVirtualAlloc,NtVirtualAllocEx),查询内存页(NtVirtualQuery,NtVirtualQueryEx),等等。

另一个重要的DLL库是ws2_32.dll,它通过以下函数处理各种网络活动:

Socket

Connect / WSAConnect

Send / WSASend

SendTo / WSASendTo

Recv / WSARecv

RecvFrom / WSARecvFrom

现在读者可能会问,知道这些有什么意义呢?好吧,如果您把一个二进制文件扔到像IDA这样的反汇编器中(我通常会做的第一件事),就是检查所有导入的函数,以便对二进制文件的功能有一个大致的了解。例如,当ws2_32.dll存在于导入表中时,表明该二进制文件可能会连接到Internet。

现在,我们可能想要进行更深入的研究,并考察使用了哪些ws2_32.dll函数。如果我们使用Socket函数并找出它的调用位置,我们就可以检查它的参数,这样,我们就可以通过搜索引擎查找相应的函数名,从而轻松地找出它所使用的协议和类型。

注意:IDA已自动向反汇编代码中添加了注释。

经过混淆处理的导入表

无论如何,这些Windows函数能提供相当多的信息,因为它们是有据可查的函数。因此,攻击者希望能够把这些函数藏起来,以掩盖正在发生的事情。

我们在反汇编器中看到的所有这些导入函数都是从导入地址表(IAT)加载的,该表在可执行文件的PE头文件中的某个地方被引用。一些恶意软件/游戏通常试图通过不直接指向DLL函数来隐藏这些导入地址。相反,他们可能会使用一个蹦床或迂回函数。

考察我们的示例

在这个例子中,我们使用的是一种蹦床式混淆技术,具体如下所示:

下面的地址0x7FF7D7F9B000引用了我们的函数0x19AA1040FE1,尽管看起来完全不是这么回事。您可能认为这是垃圾代码,但仔细看看,您会发现并非如此。

请仔细查看前两个指令:前面的指令是mov rax, FFFF8000056C10A1,后面的指令是jmp 19AA1040738,后面的都是垃圾指令。不管怎样,让我们跟随跳转指令&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值