手动解包 upx

逆向工程 开箱 倾倒
2021-07-07 15:51:06

作为第一个解包练习,我决定尝试解包著名的 UPX(当然不使用 upx -d)。我选择了一个我在某处拥有的可执行文件,在调试模式下从 C++ 代码构建。我使用最新版本的 upx 打包upx algorithm.exe并对其进行了测试。

我在 PUSHAD 之后设置了一个硬件断点,在我点击它之后,我用 OllydumpEx 转储了这个过程。最后我用 Scylla 重建了 IAT。

在整个过程中没有错误,但我的固定转储以分段错误终止。你会怎么做来调查出了什么问题?

此图显示了我暂停转储的反汇编窗口,以及在此过程中使用的选项。 在此处输入图片说明

编辑:

我刚刚检查了进程内存,发现 IAT VA 和大小 b Scylla 似乎是正确的。

2个回答

你说基地址发生了变化,所以我假设你的系统和目标可执行文件启用了 ASLR。由于未修复重定位,这有时会在解包时导致问题。

最简单的解决方案是禁用 ASLR,然后解压缩。如果要在打包的可执行文件上禁用 ASLR,请IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE使用您选择的 PE 编辑器编辑 DLL 特性字段标志。另一种选择是在不推荐的系统上禁用 ASLR。

只需在 0x00ef674c 中设置一个断点。

在此处输入图片说明

按 F9。

当它遇到断点时,按 F7 转到解压文件的原始入口点。

只需确保 EIP 是 OEP。

在此处输入图片说明