调试用 pe compact 压缩的 .dll

逆向工程 艾达 ollydbg 聚乙烯 开箱 补丁反转
2021-06-23 10:24:52

我正在尝试在 IDA 和 OllyDbg 中加载一个 DLL,但它说该文件已被压缩。我检查了几个工具,发现文件是用 PECompact 压缩的。我认为它还启用了逆向工程保护,因为调试器无法加载它,但其他工具可以反汇编它。

所以,我的问题是如何解压 DLL 并开始调试?

2个回答

存在用于 PECompact 的解包器。

试试unpecompact2,我觉得有两个版本。 http://www.woodmann.com/collaborative/tools/index.php/UnPECompact2_(MadMickael_version) http://www.woodmann.com/collaborative/tools/index.php/UnPECompact2_(smola_version)

如果这些不起作用,您可以尝试通用解包器,例如RL!dePackerlinxerUnpackerQuick Unpack

因为在我下载了一些解包并对其进行测试之前,我从未使用过 PECompact。它看起来是一个非常容易解压的系统。

atom0s的脚本PeCompact 2.xx - 3.xx OEP Finder为我测试的每个解包正确找到了 OEP。请注意,您需要忽略一些异常(INT3 中断和内存访问冲突),但反调试将被DBHODBGScript 中指令打败。

对于一些解包,我发现还存在一个简单的 API 重定向:对 KERNEL32 API 的每个引用都被重定向到几个指令,其中正确的值被加载到 EAX 中,然后是一条JMP EAX指令(见图):

API 重定向

对于这种情况,我写了这个小脚本来解决重定向问题(您需要将硬编码值设置为第一个错误条目的地址):

var oep
var next

mov oep, eip
mov next, 00460974  // FIXME

FIX:
    mov eip, [next]
    sto
    mov [next], eax
    add next, 4
    cmp [next], 0
    jne FIX

mov eip, oep
ret

完成第二个脚本后,您可以转储文件并照常修复 IAT。

此外,您的帖子中不清楚您的问题是否是由于您正在处理 DLL 而不是 EXE 文件。如果是这样的话,你可以使用LOADDLL工具或修改PE头加载DLL为EXE(下面是一个例子,如何做到这一点的LordPE)。