Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用Pefile查找可执行文件的绝对路径';s DLL_Python_Winapi_Reverse Engineering - Fatal编程技术网

在Python中使用Pefile查找可执行文件的绝对路径';s DLL

在Python中使用Pefile查找可执行文件的绝对路径';s DLL,python,winapi,reverse-engineering,Python,Winapi,Reverse Engineering,我正在尝试使用Python文件提取.text并进行一些反汇编。我在这方面取得了成功。我还希望能够对与二进制图像相关联的所有DLL执行相同的操作。我还没有弄明白如何做到这一点,我也不确定这是否可能与pefile 我可以使用pefile枚举可执行文件导入的所有DLL。这很容易做到,也不是问题。然后如何使用Python或pefile找到DLL的绝对路径,以便从每个DLL中提取.text 我研究过的一种方法是简单地找到所有DLL的绝对路径。我已经进行了广泛的搜索,但没有在Python中找到这样做的方法。

我正在尝试使用Python文件提取.text并进行一些反汇编。我在这方面取得了成功。我还希望能够对与二进制图像相关联的所有DLL执行相同的操作。我还没有弄明白如何做到这一点,我也不确定这是否可能与pefile

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

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

另一种可能是创建一个进程,并尝试以这种方式获取DLL位置。这可以通过使用内核32中的GetModuleHandleW来实现,它可以与win32api一起使用。如果可能的话,我想避免这种解决方案。为了实现这一功能,它首先需要成为一个过程。即使我要这样做,该函数的参数也需要一个句柄,我不知道如何以句柄的形式获取它。但是,我想再次避免让可执行文件成为一个进程。如果有人对如何使这项工作有建议,那将是非常好的,尽管我不愿意,因为我不希望一个可执行文件成为一个活动的进程

另一种可能,我已经担心,但没有看到的是,让pefile枚举所有DLL,然后在硬盘上搜索它们。这可能是不准确的,因为可能有多个同名DLL,搜索所有DLL需要花费太长时间

我认识到ASLR将与许多DLL一起发挥作用。我不关心这个,因为我只是在寻找补偿。我在这里只考虑结构良好、非恶意的PEs。我只能考虑Python解决方案。


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

PE文件不包含其所需模块的绝对路径信息没有办法从PE文件中解析出来。您可以做的是模拟操作系统使用
LoadLibraryEx
查找这些文件的方式(将
LOAD\u LIBRARY\u作为\u DATAFILE
标志传递),然后将这些路径传递给pefile。

作为@mnistic建议的LoadLibraryEx并设置LOAD AS data标志将起作用,如果要显式计算路径并检查磁盘上的文件,则应该看到

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


首先,您必须模拟ldr的工作。

谢谢您的帮助。我确实使用了loadlibraryex和win32api来加载它,并获得了传递到pefile的必要路径,它确实按照所描述的那样工作。对其中一些进行搜索将有助于找到一些示例代码,即带有win32api、win32con和pefile的loadlibraryex。我很确定这些信息不在PE文件中,但我想知道它是否能够以某种迂回、间接的方式派生出来。再次感谢!那么,如果我有像ntdll和ntdll这样的东西,一个是32位,一个是64位,会发生什么呢。如果我的目标应用程序是32位的,那么我当然想要32位的。我怎样才能告诉它我想要使用PythonWin32API或类似的64位代码?现在我只处理32位,但希望扩展并处理64位。如果.text部分的内容有任何不同,任何不同,那么我需要64位。我不关心装货的顺序,只是装货正确的一个。对于我当前的需求,即32位,它解决了它。对于64位机器上的32位进程,除了WOW64*.dll和ntdll.dll(64位)之外,所有其他dll都是32位dll。图像pe格式的幻数对于PE32为0x10b,对于PE64为0x20b