我正在尝试学习手动解压缩upx打包的elf文件。我发现的示例适用于Windows,主要用于Ollydbg,正如我所看到的,第一步是查找pushadpopad指令。我有一个64位可执行文件,所以我假设我必须查找所有寄存器的压入和弹出操作。

到目前为止,我一直可以用readelf -h获取入口点,并设置一个gdb中此地址的断点。使用layout asm,我也可以按照反汇编的说明进行操作。据我了解,在popad指令中,解压缩已完成,我可以得到原始的入口点。但是,因为在64bit上没有popad,所以我不确定原始入口点在哪里。全部寄存器会弹出还是只有几个?

我也不知道如何修复导入。

评论

我无法帮助重建ELF导入,但是对于查找原始入口点(OEP),找到UPX过渡到OEP的最简单方法是从打包文件的入口点开始并继续分解(在OllyDbg中,这是有效地意味着只向下滚动),直到看到一个JMP,然后是一长串空(00)字节。 JMP的目的地是OEP。图示如下:deamonftp.free.fr/deamoncrack/Tuts/Kef/UPX/Cours%20upx_fichiers/…(显然,您不会使用OllyDbg,但是在Linux上也可以使用相同的方法。)