我正在尝试学习如何进行基本的 EXE 解包。我已经阅读了 PE 标头的工作原理、部分、IAT,并且我已经对汇编有了一些了解。
我开始使用 UPX 压缩我的简单 x64.exe 并尝试手动解压缩它。
我逐步完成了存根代码,确定了提取的原始代码所在的位置(.UPX0 部分),找到了 OEP 和 IAT。有了这个,我就能够使用 Scylla 转储进程并正确重建 IAT。
但是,当我运行解压缩的 exe 时,它失败了。我决定调试解压后的 exe 并意识到代码试图寻址一个静态变量,该变量最初存储在 .data 部分但现在无效并生成内存冲突异常(程序崩溃)。
无论如何,让我感到沮丧的是,我意识到我需要修复重定位,因为原来的 .reloc 部分已经丢失。我煞费苦心地遍历UPX代码并确定需要重新定位的地址在哪里。我使用 PE 资源管理器手动重建 .reloc 部分。然而,当我意识到总共有100个要通过时,我在6个地址后放弃了!
我的问题是,是否有一种工具可以自动修复重定位(很像 Scylla 对 IAT 所做的),还是我一直在手动进行?
非常感谢Z