首页
社区
课程
招聘
DanaBot 恶意软件混淆技术
发表于: 2022-12-7 19:32 12200

DanaBot 恶意软件混淆技术

2022-12-7 19:32
12200

该样本分析参考自 zscaler 团队最新的技术文章:点我

其对高度混淆的delphi 编写的DanaBot恶意软件提供了很好的配套解密ida python。能帮助分析员减少垃圾代码对抗时间。

文末给出了参考恶意样本下载链接,和导出的 MAP,IDC文件。
hash:8c6224d9622b929e992500cb0a75025332c9cf901b3a25f48de6c87ad7b67114

下面总结性的分析该恶意软件的众多对抗技术。

DanaBot 采用的第一种反分析技术是“垃圾字节跳转”指令。这是一种反汇编技术,跳转指令将始终跳过垃圾字节。垃圾字节在正常程序执行期间被跳过,但会导致 IDA Pro 显示不正确的反汇编。下图显示了此技术的示例:
1

01_junk_byte_jump.py IDA Python 脚本搜索垃圾字节跳转,并使用 NOP 指令对其进行修补。该操作修复了IDA Pro的反汇编,如图所示。
2

下一个反分析技术是“动态返回”操作。该技术在函数末尾计算新的返回地址,导致程序控制流发生变化。在 DanaBot 的实现中,它们被用来“扩展”一个功能, 即暴露额外的隐藏代码。如下显示了动态返回地址的示例:
3

使用02_dynamic_return.py IDA Python 脚本,可以修补这些动态返回地址,并暴露隐藏代码。下图显示了一个示例:
4

zscaler分析员提供另外三个脚本来辅助后续分析,03_uppercase_jumps.py 删除了一个干扰堆栈字符串重建的小函数基本块,以修补大端模式的问题。04_letter_mapping.py 用于重命名堆栈变量。而05_reset_code.py是用于重新分析文件获取一个干净的IDB文件。

添加无关的StrAsg和StrCopy函数调用。这些函数是标准 Delphi 库的一部分,用于在变量之间分配或复制数据。下图显示了包含许多此类调用的示例代码片段。如果我们跟踪变量参数,我们可以看到它们通常被分配给它们自己或一小组在实际恶意软件代码中未使用的其他变量。
5

IDA Python 脚本06_fake_UStrLAsg_and_UStrCopy.py试图找到并修补这些垃圾调用,下图显示了上面示例中的修补的结果:
6

下一个混淆方法是 DanaBot 版本的创建“堆栈字符串”。该恶意软件将字母表中的字母分配给各个变量,然后使用这些变量、指向这些变量的指针以及各种 Delphi 字符/字符串处理函数来一次构造一个字符的字符串。下图是字符串wow64.dll的示例构造。
7

这些堆栈字符串散布在 DanaBot 中的大部分恶意函数中,很容易导致逆向工程疲劳。最重要的是,虽然一些构造的字符串被用于恶意软件目的,但大多数还是垃圾字符串。下图是将介绍的脚本的输出片段。从图中可以看出,大部分字符串是随机的 DLL、可执行文件和 Windows API 名称。
8

提取这些堆栈字符串的最佳方法是模拟构造代码,但由于以下原因,尝试了另一种反混淆技术:

IDA Python 脚本07_stack_string_letters_to_last_StrCatN_call.py08_set_stack_string_letters_comments.py的目标不是提取完全准确的堆栈字符串,而是足够的字符串来确定字符串是否是垃圾。经过一些反复试验后,脚本还尽最大努力删除堆栈字符串构造代码,以便更轻松地进行分析。如果字符串被证明是合法的,原始构造代码将被保存为注释,以便在需要时可以正确提取字符串。

上面的堆栈字符串部分看到的,有很多基于 DLL、可执行文件和 Windows API 名称的垃圾字符串。这些垃圾字符串也作为普通字符串存在,示例:
9

虽然还没有找到自动删除对这些垃圾字符串的引用的好方法,但 IDA Python 脚本11_rename_junk_variables.py,12_rename_junk_random_variables.py将它们重命名为“垃圾”以简化手动分析。
10

先使用 IDR 导出 MAP文件和IDC,Tools → MAP Generator and Tools → IDC Generator to export MAP and IDC files

再使用脚本idr_idc_to_idapy.pyidr_map_to_idapy.py从生成的 IDC 和 MAP 文件中提取信息,并使用输出脚本导入命名信息

避免使用idr自动生成的idc脚本,会干扰分析,尤其是混淆样本。

作为一个整体示例,下图是应用去混淆脚本之前的一段 DanaBot 代码的截图。代码的细节对于本次讨论并不特别重要,但该片段显示了DanaBot 对其初始“系统信息”命令和控制beacon中使用的 455 字节二进制结构的初始化。
11


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-12-26 15:23 被kanxue编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 499
活跃值: (2817)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
处理完之后的对比  11 这里有图挂了
2022-12-8 19:42
0
游客
登录 | 注册 方可回帖
返回
//