在Python中使用Pefile查找可执行文件dll的绝对路径

2024-06-01 23:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用pythonpefile来提取.text并进行一些反汇编。我在这方面取得了成功。我还希望能够对与二进制图像相关联的所有dll执行相同的操作。我还不知道如何做到这一点,我不确定这是否可能与pefile。在

我可以使用pefile枚举由可执行文件导入的所有dll。这很容易做到,不是问题。然后我如何使用Python或pefile来找到dll的绝对路径,以便从每个dll中提取.text?在

我研究过的一种方法是简单地找到所有DLL的绝对路径。我已经进行了广泛的搜索,但是在Python中没有找到一种方法。如果我能找到绝对路径,即文件位置,那么我就可以去提取.text部分了?在

另一种可能是创建一个进程,并尝试以这种方式获取DLL位置。这可以通过使用kernel32中的GetModuleHandleW来实现,它可以与win32api一起使用。如果可能的话,我想避免这种解决办法。它需要首先成为一个过程才能完成这个功能。即使我要这样做,该函数的参数也需要一个句柄,我不知道如何以句柄的形式获取它的DLL。但是,我还是希望避免将可执行文件变成一个进程。如果有人对如何实现这一点提出建议,那就太好了,尽管我不希望这样,因为我不希望将可执行文件变成活动进程。在

另一种可能的情况是让pefile枚举所有的dll,然后在硬盘上搜索它们。但这可能是不准确的,因为可能有多个同名的dll,搜索所有这些dll需要花费太长的时间。在

我认识到ASLR将在许多dll中发挥作用。我不关心这一点,因为我只是在寻找补偿。我只考虑格式良好,无恶意的PEs。我只能考虑Python解决方案。在

我希望有一种优雅的方法能够做到这一点,要么能够找到所有DLL的文件位置/绝对路径名,要么找到一种使用Pefile的方法,以某种方式能够从可执行文件的导入DLL中提取.text,而无需向它提供每个DLL的文件位置。在


Tags: 文件方法text图像可执行文件进程方式二进制
2条回答

正如@mnistic建议的带有load As data标志集的LoadLibraryEX可以工作,如果您想显式地计算路径并检查磁盘上的文件,那么您应该看到DLL Search order

在此项下,请注意桌面应用程序的标准搜索顺序

{cde>你要做的主要是模仿。在

PE文件不包含所需模块的绝对路径的信息,并且无法从PE文件中解析出来。您可以做的是模拟操作系统使用LoadLibraryEx(传递LOAD_LIBRARY_AS_DATAFILE标志will load the module without running any code)来查找这些文件,然后将这些路径传递给pefile。在

相关问题 更多 >