在恶意软件分析方面,使用静态反汇编器而不是动态反汇编器的好处或原因是什么?

逆向工程 艾达 拆卸 ollydbg 恶意软件 静态分析
2021-07-04 03:52:24

我知道

动态程序分析是通过在真实或虚拟处理器上执行程序来执行的计算机软件分析。

尽管

静态程序分析是在没有实际执行程序的情况下对计算机软件进行的分析

但我不明白的是,为什么有人会使用像 ida pro 这样的静态反汇编器而不是像 ollydbg 这样的动态反汇编器或调试器,反之亦然。

PS 这不是复制静态反汇编和动态反汇编什么区别?

因为这不是在要求差异,而是在询问为什么有人会在恶意软件分析方面选择静态反汇编程序而不是动态反汇编程序的原因和好处,反之亦然。

1个回答

在大多数情况下,您不会将自己局限于其中之一,而是会同时使用两者。

动态分析意味着运行软件。除非在受控环境中,否则您不想使用怀疑是恶意软件的软件来执行此操作。

此外,在运行该软件之前,您想了解一下它。可执行文件是否以某种方式打包?它是否使用了反调试技术?该软件是否包含某些知名/开源库的任何部分?有很多工具可以回答其中的一些问题——Ida pro 只是其中之一。

为了进一步提高您对软件的理解,您需要一个工具来帮助您找到其各部分之间的依赖关系。二进制文件的哪些部分实际上是代码,哪些是数据?如果该软件包含看起来很有趣的字符串或其他数据,那么引用的内容在哪里?哪个函数在哪里调用?这就是 IDA 的交叉引用派上用场的地方。

另一方面,在许多情况下,您并不需要真正了解子程序的每一条指令来了解它的作用。您可能想知道您的软件读取和写入了哪些文件和哪些注册表项。或者,您可能想知道它是否访问 Internet,以及它连接到哪些站点。使用类似procmonwireshark启用的东西运行软件是找出问题的最快方法 - 我也会考虑动态分析,即使procmon并且wireshark不是调试器。或者,在分析您的软件时,您会遇到一个包含大量位操作的函数——这可能是某种加密或散列。启动调试器,在函数上设置断点,并检查其参数和返回值。这可以比尝试理解函数更快地确认您的假设。

现在,您已经确认该函数确实可以解密某些内容,并且您想知道它是如何工作的。您可能希望使用诸如“此时eax包含输入字符串的所有字节,彼此异或”或“这没有任何作用,似乎只是混淆”之类的注释来注释单个操作码像 IDA 这样的工具可以让你做到这一点。

所以答案是:除非你有一个非常微不足道的软件,否则你不会选择一个。分析软件包括许多任务;对于其中一些,静态分析更容易,对于其他人,动态分析更容易。任何自尊的逆向工程师都会有很多工具可供他使用,并根据手头的任务选择合适的工具,而且经常会编写自己的工具来解决他正在使用的特定软件遇到的一些问题现在。

请注意,我从不总是使用术语software而不是malware,因为这与任何类型的逆向工程有关,而不仅仅是恶意软件分析。