使用 Python 枚举二进制文件的所有模块(pefile / win32api)

我想使用 PEfile 或其他 Python 库来枚举所有模块。我以为我有它,但后来我进入了 WinDbg,因为一些明显的缺失,我看到有很多缺失的。


对于 filezilla.exe:


00400000 00fe7000   image00400000 image00400000

01c70000 01ecc000   combase  C:\WINDOWS\SysWOW64\combase.dll

6f590000 6f5ac000   SRVCLI   C:\WINDOWS\SysWOW64\SRVCLI.DLL

6f640000 6f844000   COMCTL32 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.17134.472_none_42ecd1cc44e43e73\COMCTL32.DLL

70610000 7061b000   NETUTILS C:\WINDOWS\SysWOW64\NETUTILS.DLL

70720000 70733000   NETAPI32 C:\WINDOWS\SysWOW64\NETAPI32.dll

72910000 72933000   winmmbase C:\WINDOWS\SysWOW64\winmmbase.dll

729d0000 729d8000   WSOCK32  C:\WINDOWS\SysWOW64\WSOCK32.DLL

72b40000 72b64000   WINMM    C:\WINDOWS\SysWOW64\WINMM.DLL

72b70000 72b88000   MPR      C:\WINDOWS\SysWOW64\MPR.DLL

73c60000 73c6a000   CRYPTBASE C:\WINDOWS\SysWOW64\CRYPTBASE.dll

73c70000 73c90000   SspiCli  C:\WINDOWS\SysWOW64\SspiCli.dll

74120000 741b6000   OLEAUT32 C:\WINDOWS\SysWOW64\OLEAUT32.dll

741c0000 7477a000   windows_storage C:\WINDOWS\SysWOW64\windows.storage.dll

74780000 7487c000   ole32    C:\WINDOWS\SysWOW64\ole32.dll

74880000 74908000   shcore   C:\WINDOWS\SysWOW64\shcore.dll

74910000 7498d000   msvcp_win C:\WINDOWS\SysWOW64\msvcp_win.dll

74990000 74a4f000   msvcrt   C:\WINDOWS\SysWOW64\msvcrt.dll

74a50000 74a72000   GDI32    C:\WINDOWS\SysWOW64\GDI32.dll

74bd0000 74bde000   MSASN1   C:\WINDOWS\SysWOW64\MSASN1.dll

74be0000 74c47000   WS2_32   C:\WINDOWS\SysWOW64\WS2_32.dll

74c70000 74d30000   RPCRT4   C:\WINDOWS\SysWOW64\RPCRT4.dll

74d30000 74d37000   Normaliz C:\WINDOWS\SysWOW64\Normaliz.dll

74d40000 74d79000   cfgmgr32 C:\WINDOWS\SysWOW64\cfgmgr32.dll

74fe0000 75025000   powrprof C:\WINDOWS\SysWOW64\powrprof.dll

Pefile 中是否还有其他内容我应该查看以获得将要加载的模块的更完整列表?

win32api 或 win32con 中有什么东西可以让我得到这个信息吗?如果可能的话,我更喜欢 pefile,但两者都可以。我需要能够输出将加载的所有模块的列表。我在 Python 中工作,对改变不灵活。


慕哥9229398
浏览 248回答 2
2回答

人到中年有点甜

模块可以通过多种方式加载到进程中。导入的 DLL 只是一种方式。导入的 DLL 也可以为自己导入 DLL。foobar.exe可能取决于user32.dll,但user32.dll反过来也取决于kernel32.dll将加载到您的流程中。如果您需要完整列表,您可能需要检查导入的 DLL 是否为可执行文件的依赖项。模块可以在代码中动态加载LoadLibrary()。您不会在导入目录中看到那些。您必须为此反汇编代码,即使这样,库名称也可以即时生成,因此很难说。还有一些不受支持的加载模块的方法可供恶意软件使用。正如评论中提到的,通过调试 API 获取已加载模块的列表可能更简单。但这一切都取决于您实际尝试使用这些数据做什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python