“转储”的恶意软件和“解压”的恶意软件有什么区别?

逆向工程 艾达 拆卸 二元分析 恶意软件 吉德拉
2021-07-02 15:04:18

在恶意软件共享社区,我注意到共享的样本被标记为unpackeddumped我试图在 中加载转储的恶意软件IDAFree,但是,imports表中没有任何内容恶意软件样本通常被标记<hash>_dump_0x00980000为例如。0x00980000好像是内存地址。但是对于我尝试在 IDA Free 中分析它意味着什么?我是否必须以某种方式使用该信息IDA来正确加载样本?

我所知道的:我意识到大多数现实世界的恶意软件都是打包的。我理解这种混淆背后的动机,并且我理解如果我们知道使用了哪个打包器,它可以自动解包,或者可以通过在调试器中逐步执行并转储相关内存部分来手动解包。

但是,我不明白如何在 IDA 免费中分析这些“转储”样本。大多数时候,我在导入部分什么也看不到,这使得样本很难分析。在加载它以查看实际导入部分时,我应该了解解压转储之间是否有区别IDA

3个回答

在 IDA 中加载它以查看实际导入部分时,我应该了解解压和转储之间是否有区别?

您不仅可以转储打包的二进制文件,还可以转储任何打包的二进制文件,它通常带有剥离的导入表,只是为了使其难以(-er)分析。

样本解包后,它通常会重建其导入表,以便它可以正确运行。因此,为了能够在 IDA、Ghidra 或任何其他工具中正确分析样本,您应该在完成后将其转储(通常是解压后的二进制文件中的第一次调用)或在转储后自行在转储中重建它被拆包。此外,可能需要将此文件映射到正确的地址,以便正确解析内存地址。

我会说这真的取决于你对Packaging的定义通常包装仅限于压缩而不是保护。在这种情况下,更新二进制文件以维护虚拟内存,同时最小化文件大小。入口点将解压缩所有内容,因此,尽管文件不同,但执行原始入口点时的虚拟内存与原始入口点相同。

即使对于像压缩这样的基本内容,从内存中转储本身(在大多数情况下)也永远不够。您仍然需要正确重建解压文件(即添加导入、修复部分标题等)。尽管大多数转储程序都已完成这些基础工作,因此我认为典型的转储程序对于典型的打包程序就足够了。但是进一步的保护呢?

在文件不仅被压缩而且被混淆的情况下,从通用转储新生成的二进制文件仍然会被严重破坏。例如,imports 表不仅可以被删除,还可以动态重新定位和加密。这将导致转储无法重建导入,这会显着减慢反转速度。类似地,封隔器可以剥离重定位、重新映射部分等。

倾销
通常是指非常通用的拆包。如果打包程序是简单的压缩,那么这通常是原始副本的正确副本所需的全部内容。

拆包
通常是指更专业的拆包。在这种情况下,打包器的各个区域将在内存中生成与原始副本不同的图像,所有更改都需要检测和反转。

顾名思义,转储文件是内存转储进程。内存转储意味着完全按照它在内存中的映射写入磁盘。

如果加载器或程序执行了任何重定位、动态映射、重新定位等操作 - 它们将反映在文件中。因此,加载程序将无法加载开箱即用的转储进程。

解压后的文件通常是已移除保护但可以运行(或至少可以加载)的文件。

请注意,根据定义,转储的进程可能会或可能不会被解包,并且解包的文件可能会或可能不会从内存中转储。

至少,为了使转储文件可加载,您需要:

  1. 将所有部分的 VirtualAddress 和 VirtualSize 复制到它们的 RawAddress 和 RawSize 上。

  2. 确保目录(import、export、reloc 等)指向可用内存中的地址。它们可能不正确/损坏,但必须在流程映射内。