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