Pydbg 列出导入的 API

逆向工程 调试
2021-07-10 23:04:12

我目前正在编写一个利用 pydbg 的小实用程序。我试图实现的功能之一如下:

对于导入的每个 DLL,我想列出模块在运行时导出和加载的 api 函数。例如,如果调试对象导入 ws2_32.dll,我想遍历 ws2_32.dll 导出的 API 列表。

通过遍历导入表,我知道如何在可执行文件未运行时使用 PEfile 执行此操作。当可执行文件作为进程运行时,我正在尝试做类似的事情。我知道你可以使用 pydbg 的 enumerate_modules 方法,但它只返回模块和基地址。有可能做我要问的吗?

提前致谢,

瑞安

1个回答

我想出了如何做到这一点,希望这会帮助别人。回想起来,答案就在最初的问题中。它只是在发布时没有点击。这是使用 pydbg 和 pefile 实现的。这是一个很好的小练习,它迫使我真正熟悉 PE 文件格式。

# Get module PE header base and size
for mods in dbg.iterate_modules():
    if mod.lower() == str(mods.szModule.lower()):
        print('Mod: {0} Base: {1}'.format(mods.szModule,
                                          hex(mods.modBaseAddr)))
        addr = mods.modBaseAddr
        size = mods.modBaseSize
        break

# Read PE header in memory
pe = pefile.PE(data=dbg.read_process_memory(addr, size))
pe.parse_data_directories(directories=[
                pefile.DIRECTORY_ENTRY[u'IMAGE_DIRECTORY_ENTRY_IMPORT'],
                ])

# Traverse IAT
for entry in pe.DIRECTORY_ENTRY_IMPORT:
    print(entry.dll)
    print('#'*20)
    for imp in entry.imports:
       print('Address:{0}    API:{1}'.format(hex(imp.address), imp.name))