为什么打包可执行文件会向我的可执行文件添加依赖项?

逆向工程 聚乙烯
2021-06-17 10:15:24

在 PE 查看器中查看可执行文件的结构,我看到它从 comctl32.dll 导入函数,没有别的。但是,当我通过打包程序 (UPX) 运行此可执行文件时,生成的可执行文件突然也依赖于 kernel32.dll。有人可以解释为什么会这样,以及从 kernel32.dll 导入的新函数有什么作用?

1个回答

任何动态链接的可执行文件都需要从动态加载的库中导入功能。您拥有的可执行文件需要来自 comctl32.dll 的一些函数来完成它所做的一切。

像 UPX 这样的打包程序基本上是在创建一个全新的可执行文件并将原始可执行文件压缩为“有效负载”。您打包的可执行文件现在具有额外依赖项的原因是,UPX 解码器在运行时解压缩您的原始可执行文件,具有自己的依赖项。我猜它从 kernel32.dll导入LoadLibraryGetProcAddress您可以在 MSDN 上阅读更多内容,但总而言之,这些函数允许 UPX 解包存根加载其他库,而无需显式链接到它们。