这些堆栈字符串散布在 DanaBot 中的大部分恶意函数中,很容易导致逆向工程疲劳。最重要的是,虽然一些构造的字符串被用于恶意软件目的,但大多数还是垃圾字符串。下图是将介绍的脚本的输出片段。从图中可以看出,大部分字符串是随机的 DLL、可执行文件和 Windows API 名称。
提取这些堆栈字符串的最佳方法是模拟构造代码,但由于以下原因,尝试了另一种反混淆技术:
IDA Python 脚本07_stack_string_letters_to_last_StrCatN_call.py和08_set_stack_string_letters_comments.py的目标不是提取完全准确的堆栈字符串,而是足够的字符串来确定字符串是否是垃圾。经过一些反复试验后,脚本还尽最大努力删除堆栈字符串构造代码,以便更轻松地进行分析。如果字符串被证明是合法的,原始构造代码将被保存为注释,以便在需要时可以正确提取字符串。
上面的堆栈字符串部分看到的,有很多基于 DLL、可执行文件和 Windows API 名称的垃圾字符串。这些垃圾字符串也作为普通字符串存在,示例:
虽然还没有找到自动删除对这些垃圾字符串的引用的好方法,但 IDA Python 脚本11_rename_junk_variables.py,12_rename_junk_random_variables.py将它们重命名为“垃圾”以简化手动分析。
先使用 IDR 导出 MAP文件和IDC,Tools → MAP Generator and Tools → IDC Generator to export MAP and IDC files