c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件

06739f1465f1f174f9b369a9bc093a4e.png

写在前面的话

近期,我对这款名为Gacrux的恶意软件样本进行了分析。考虑到这两个样本文件的来源,我无法直接跟大家共享文件的哈希或直接公开样本文件,不过根据本文所提供的信息,大家可以轻松识别出这款恶意软件。这款恶意软件加载器采用C语言开发,并且使用了Visual Studio 2017进行编译。这款恶意软件从2020年8月开始在某些论坛上出售,似乎受到了Smoke Loader的极大启发。

反分析技术

Gacrux应用了很多反调试和反虚拟机技术。其中,第一种技术涉及到了下列代码跳转,这将导致IDA无法对代码指令进行正确解析。

42e2e2cd47c72dedfb315a7881f09da1.png

这里,我们可以直接利用nop操作码来修复这个问题。进行模式扫描并修复问题之后,我们就可以使用IDA来对代码进行反编译了。

4932a6f036a7b536e088420b5e89ceec.png

第二种技术涉及到伪造的返回值,并破坏IDA的函数分析过程。跟之前的一样,我们同样可以使用nop操作码来解决这种问题。

4644fbec98478ccfb4ab5ade32bbb8cd.png

最后的代码混淆涉及到两个磁盘上的加密函数,解密操作是在调用函数之前完成的,然后在不久之后又会对函数进行重新加密。

5ce643e34d90e9955e14ba2825ad196f.png

解密/加密的工作原理是在函数中找到两个表示加密区域开始和结束的模式,然后用传递给函数的键来对代码进行异或操作。

a9800f99ec0919bb9ee8f86b856a76e5.png

代码会检查目标磁盘上的可用空间和RAM大小,这也是其反虚拟机检测机制的一部分。在这里,我们可以设置断点来修改返回值,或直接使用nop命令跳过检测。

203bd35aadfcd80752136b3dbd085149.png5a58641079963406dff661050baa998b.png

字符串加密

字符串存储在一个函数中,该函数根据传入的ID对字符串进行解密。

d63aeda1f5ea425bafe9f9d299f6143e.png

整体执行流

a40ade73cc9122ab80588314a848eb0a.png

反调试和反VM技术

这款恶意软件的代码中还添加了一些反调试技术,这些技术嵌入在了很多重要函数中,并且会在检测到调试器或虚拟机的时候来让进程崩溃。第一个技术位于malloc函数中,它会检查PEB中的BeingDebugged成员,如果检测到了相应设置,那么函数将返回请求的缓冲区的大小,而不是分配它。除此之外,它还会检查黑名单上的模块,如果存在,则退出执行。

886f20a361bd177caab6dd1029729711.png

在第二项技术中,如果目标系统的RAM或磁盘空间不足,则会增加Explorer资源浏览器的进程PID,这通常是虚拟化的表现。此时,代码将会NtOpenProcess崩溃并阻止其进一步运行。

bcfad6df51442f9dc2273c8eed6014d7.png

在这里,注入的初始化ShellCode/自定义PE加载器还会检查PEB的BeingDebugged和NtGlobalFlag成员。

637a127f474e3838356228dede4bffab.png

Syscall

这款恶意软件的Syscall模块几乎完全是从开源的加密程序中拷贝过来的。

63519a1bc546484e1c6e64d9a749dc43.png

这里的哈希算法被修改为了djb2,而输出会使用一个常量值进行异或计算。

79c9e0101b6bd9f18dda7b8554496538.png

持久化

恶意软件的持久化是通过一个Windows进程实现的,恶意代码会在explorer.exe上下文中不断地调用这个进程,这个进程会检测安装文件,并在启动项菜单中创建.lnk文件。 207a23ea9d03e84a529729b6464907b0.png 47e1161b2ede24207e96a901c04a6c62.png

代码注入

针对代码注入,Gacrux在32位环境中使用NtCreateSection/NtMapViewOfSection作为写原语,在64位环境中使用 NtAllocateVirtualMemory/NtWriteVirtualMemory,这两种方法都是通过直接的系统调用完成的。对于执行原语,它利用的是SetPropA,正如Adam在其文章“PROPagate–一种新的代码注入技巧”中所详述的那样。这是从开源实现中复制的,函数指针的设置方式就证明了这一点。

7d9e8fd198a4006ea5abc02c68107efe.png

这里的代码注入技术主要用来调用一个小型的自定义PE加载器,请大家继续往下看。

自定义PE加载器和数据格式

这是Gacrux最有意思的功能,注入到Explorer中的代码并非一个普通的PE文件,而是一个带有自定义PE Header和自定义加载器的PE加载器。 加载器首先会进行一些反调试检测:

ddda936eeb5c59563b86d1cdfd8cfeaa.png

接下来,它会解析三个API,并使用它们来处理导入的表并修复重定位:

0a1cfcdcac46f9a2d6b2fc390467ea3b.png9f5a3a8c8109f846e96ce5eaedb393fe.png

PE加载器使用的是自定义的PE格式,根据Kaitai描述符,我们可以轻松恢复出原始的PE文件:

c6a81fa225eb115559276a53364e2d7c.png

网络通信

这款恶意软件的网络通信使用的是WinInet,并且在Explorer上下文场景中实现: 8e564615e8a23e67a561390b10e3253e.png 7ad458459de4730829ac7c0f7a05d61b.png

总结

正如我们所看到的,Gacrux实际上也没有非常多的特别之处。它借鉴了大量的公共代码,并且在稍加修改之后便投入使用了。最重要的是,Gacrux的漏洞非常多! 原文来源:FreeBuf

084de23dc603aa3b8d8bf54c406f991d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值