文章插图
解码NSIS代码
要解码动态代码,我们可以编写一个简短的Python/ target=_blank class=infotextkey>Python脚本,该脚本再现行为并提取Windows API调用:
文章插图
下图显示了上述脚本产生的解码数据
文章插图
解码的Windows API调用
解码后的函数一起从NSIS压缩文件中的另一个文件中读取shellcode,并使用EnumWindows函数执行它 。如果我们必须用伪代码编写这个过程,它看起来应该是这样的:
文章插图
为了使其余的分析更容易,我们将使用shellcode生成一个PE 。为了生成可执行文件,我们可以使用Cerbero Profiler或LIEF Python库等工具 。
在本例中,我们使用了LIEF库来构建一个新的可执行文件 。我们所要做的就是添加一个包含Malkekvg.Nat文件内容的新部分,并将入口点设置为正确的偏移量 。一旦我们得到了这些,就应该能够在IDAPro中打开shellcode,并看到它包含有效的x86指令 。
文章插图
文章插图
在IDA Pro的入口点生成PE文件
文章插图
Shellcode分析
现在我们在PE文件中有了Shellcode的第一阶段,我们可以在动态分析中运行它,看看会发生什么 。我们将看到的第一件事是它检测到虚拟机,并在显示消息框后停止执行 。此文本在运行时使用4字节XOR密钥解密 。
文章插图
无法在虚拟环境中执行该示例
如果我们在IDA Pro中打开文件并稍微遵循代码,就应该能够看到用于解密第一阶段的大函数 。虽然函数图概述看起来很大,但识别垃圾代码仍然很容易 。
进行解密的代码如下图所示 。在下图中,我们可以看到跳转到第二阶段的最终调用 。此时,我们可以将第二阶段转储到另一个可执行文件中进行解密 。
我们可以直接从内存中转储可执行文件,但是必须确保将入口点修补到正确的地址(在本例中为0x404328) 。
文章插图
第一阶段的Shellcode解密
调用到下一阶段
第二阶段使用了许多反分析技术,其中的一些反分析技术为:
内存扫描已知沙盒字符串;
虚拟机监控程序检查;
时间测量;
为了获得GuLoader正在下载的最终负载,我们必须手动绕过所有这些检查,在不受所有这些技术影响的沙盒中运行它,或者在裸金属沙盒上运行它 。
文章插图
提取有效负载信息
为了在不分析第二阶段的情况下获得有效负载信息(包括所有字符串),我们可以使用Spamhaus描述的一个小技巧 。GuLoader使用简单的XOR加密来加密其字符串,其中包括有效负载URL 。
要解密字符串,我们可以对已经知道存在于第二阶段中的模式使用暴力 。XOR运算的结果就密钥 。对此的唯一限制是模式必须足够大,以便我们能够完全解密有效负载URL 。例如,一个好的模式可能是用户代理字符串,默认设置为Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0),如Gecko 。
推荐阅读
- 39万家定点药店迎门诊统筹利好:药价、报销方式将如何变化
- 买房风水三不买 买房如何看风水
- 如何泡黑豆醋 醋泡生黑豆
- 新鲜白果如何去壳.白果怎么去壳去皮
- 成灌高铁公交化后票价如何 成灌快铁时刻表
- windows7一键还原在哪 电脑如何一键还原
- 联想笔记本如何重装系统 笔记本电脑电池保养软件
- 平安信用卡注销电话?如何注销平安银行信用卡?
- 如何鉴别地沟油的简单方法 如何鉴别地沟油
- 怎么才能让女生喜欢你? 怎样让女孩子喜欢你
