当手动解包程序并在OEP处结束时,我们为什么要重建导入表?我知道在打包时,导入表会被破坏以进行压缩/隐藏,但是如果我们已经在 OEP 中,那一定意味着程序已准备好运行,因为解包存根已经修复了导入表?否则它只会在第一次外部调用时崩溃。
为什么 OEP 没有准备好导入表?
逆向工程
开箱
我在
进口改造
2021-06-22 07:53:42
2个回答
如果我们已经在 OEP,那一定意味着程序已准备好运行,因为解包存根已经修复了导入表
不,当到达 OEP 时,解包存根已经填充了导入地址表;它没有修复导入表。您需要重建导入表,以便当您运行解包的程序时,Windows 加载程序将根据导入表中的数据在运行时填充导入地址表(在运行时使用正确的函数地址)。
(请注意,总有例外,但对于大多数包装工来说通常是这样。)
解包存根可能只是加载导入而不是修复导入表。如果您想保存可执行文件以便稍后运行它,您将不会在保存的可执行文件中包含解包存根,因此除非您修复和导入表,否则没有人为您加载导入。
其它你可能感兴趣的问题