解包并分析未知恶意软件
我有一份神秘文件需要分析。从表面上看,它只是一个无威胁的Windows可执行文件。它的名字是malware.exe
运行它似乎没有任何作用,除了打开一个空白的控制台窗口几秒钟,这表明至少发生了一些事情。与恶意软件一样,我假设该样本已被打包。但是,最好确定并了解使用的打包程序。为此,我们使用 DIE 打开它并查看文件熵:
这里要查看的部分是文件大部分的熵非常高(~8)。熵只是文件内数据“随机性”的度量。它的范围可以从 0 到 8。8 分意味着完全随机性,这在加密中很常见(理想情况下)。典型的文件会像这样波动:
既然我们知道它已被打包,我们还应该找出使用的是哪个打包机。有很多方法可以找到它,但最简单的方法是查看第一个熵图片中的部分标题。我们看到存在一个名称为 UPX2 的标头。 UPX 是最常见的加壳器之一。它用于许多合法应用程序,但低级恶意软件也使用它,因为它是免费且易于使用的。
加壳器用于减小可执行文件的大小。本质上,当一个程序想要减小其大小时,它会压缩整个文件,然后将一个小程序附加到其自身的起始地址,这将在运行时对其进行解压缩。这就像压缩文件以通过 Internet 发送它,并同时发送 7zip 的副本以供用户解压内容。这就是打包应用程序通常具有非常高且稳定的熵的原因。内容_已_加密。
查看打包的代码是没有用的,因此我们需要在执行其他操作之前将其解压。有几种方法可以解压恶意软件,但我将手动解压这个方法,以便发表一篇更酷的博客文章。我首先将调试器x32dbg附加到程序。调试器自动暂停。 
我们要做的第一件事就是运行程序直到入口点,然后再次暂停。
现在我们暂停了,我们开始寻找二进制文件中代码解包器部分的结尾。在本例中,它接近代码的末尾——在用归零操作填充空间之前最后一条jmp指令。 
清零操作之前的最后一个跳转表明程序已被解包,现在将跳转到执行解包数据。因此,在跳转前暂停后,我们向前迈出一条指令并再次暂停。希望这将带我们开始“真正的”计划。 
我们可以使用一个名为Scylla的插件来创建新的解压程序。我们使用 IAT Autosearch 和 Get Imports 功能为我们构建导入表,然后将程序转储到桌面。 
现在我们已经得到了解压程序的转储,因此让我们通过再次检查熵来验证我们是否正确执行了操作。
因此,我们已经验证我们已成功解压恶意软件。下一步将分析其活动并提出报告。