VXUnderground的GitHub仓库MalwareSourceCode也有很多恶意软件的源代码。现有的恶意软件可能是基于它们实现的,或者是使用了其中一部分源代码。花几个小时阅读泄露的代码可能会为你在分析恶意软件时节省几天的时间!即使你正在分析的恶意软件是从头开始编写的,通过阅读泄露的代码获得的经验也可以帮助你识别通用的方法。同样,恶意软件的作者会毫不犹豫地将为了合法目的而编写的工具包进行修改。对于红队人员来说,Cobalt Strike 就是这种被泄露并经常被用在恶意软件中的一个例子(Avast on Cobalt Strike,Mandiant on Cobalt Strike)。
逆向原生应用程序需要你了解一些底层的概念。如果你想专注于 Windows 恶意软件(就像我一样),那么你的大部分时间都是在处理 PE 文件。当你在调试器下查看应用程序时,你会看到它以反汇编的形式存在,也就是被转换为汇编语言(汇编器)。因此,你对汇编程序、PE 结构和操作系统了解得越多,你就越容易理解。
在视频1和视频2中你会找到一些关于 x86 汇编的简单介绍。为了更深入地理解和掌握其他平台的汇编,你可以通过这个免费课程进行学习。另外一个非常宝贵,也非常全面的关于汇编语言的资源是英特尔官方手册。
另一类应用于可执行程序的保护程序是使用虚拟化技术实现的,它同样被应用在了恶意软件上。与典型的保护程序相比,它们不仅将原始代码包装了一层,还修改了现有代码,通过重写了一些代码段的方式使其只能在内置的虚拟机上运行。这种类型的保护器特别难分析,它们不能用传统的方式脱壳。有时重建原始可执行文件是不可能的,或者是时间成本太高。我通常在追踪的帮助下与他们打交道。但是,对于不太复杂的变体,可以分析完整的 VM 逻辑并重构代码。
当分析在内核级的恶意软件时,需要按照我在 Windows 内核利用实践中描述的相同步骤进行环境的搭建,如下所示:
内核模式模块的结构与你日常遇到的在用户空间中的模块完全不同。这就是为什么在分析它们之前,我强烈建议你了解有关驱动程序的一般知识。在我看来,关于驱动程序的介绍最好的是这本Pavel Yosifovich写的“Windows Kernel Programming”,配套的实例可以在这里免费下载。在此处可以找到对驱动程序分析方法的简要介绍(由 Matt Hand 撰写)。有关该主题的其他说明(由 VoidSec 提供)可在此处获得(尽管作者主要关注驱动程序逆向,但大多数方法也适用于恶意软件研究人员)。