什么是进口重建,为什么有必要?

逆向工程 开箱 进口改造
2021-06-18 04:09:38

在阅读有关拆包的信息时,我有时会看到“导入重建”步骤。这是什么,为什么有必要?

1个回答

在典型的非打包 Windows PE 可执行文件中,标头包含向操作系统描述可执行文件所依赖的其他库中的哪些符号的元数据。操作系统的加载器负责将这些库加载到内存中(如果它们尚未加载),并将这些导入符号的地址放入可执行文件内存映像中的结构(其位置也由元数据指定)中。另一方面,打包程序通常会破坏这些元数据,而是自己执行解析阶段(通常由加载程序执行)。解包的目标是从二进制文件中删除保护,包括丢失的导入信息。

通常在这些情况下,分析人员将确定导入信息驻留在可执行文件的内存映像中的哪个位置。特别是,分析人员通常会定位IMAGE_THUNK_DATA数组,这些NULL数组是包含导入符号地址的终止数组。然后,分析员将运行一个工具,该工具基本上执行以下操作GetProcAddress:给定这些指向导入符号的指针之一,它将确定该指针驻留在哪个 DLL 中,以及该指针引用哪个特定的导出条目。例如,我们可能会解析0x76AE3F3CKernel32!CreateFileW现在我们使用这些文本信息重新创建IMAGE_IMPORT_DESCRIPTOR描述每个导入 DLL 的结构,使用IMAGE_THUNK_DATA数组,将 DLL 的名称和导入的符号存储在二进制文件的某处(可能在一个新的部分),并将IMAGE_THUNK_DATA条目指向这些新名称。

ImpRec是一种流行的工具,可以根据包装商的不同自动完成大部分或全部过程。我刚刚描述的情况在大约 95% 的情况下反映了现实。更严格的保护措施,例如视频游戏复制保护和棘手的自定义恶意软件,会使用更多的技巧来阻碍重建过程。