Может ли кто-нибудь подсказать, как с помощью python я могу получить таблицу адресов импорта и таблицу адресов экспорта из PE? В настоящее время я использую модуль pefile, но не уверен, что смогу получить с его помощью IAT и EAT. Большое спасибо за помощь.

1
Farseer 11 Окт 2013 в 23:03

1 ответ

Лучший ответ

В документации описано, как это сделать:

Список импортированных символов

Каждый каталог, если он существует в обрабатываемом PE-файле, имеет запись как DIRECTORY_ENTRY_directoryname в экземпляре PE. Импортированные символы могут быть перечислены следующим образом:

# If the PE file was loaded using the fast_load=True argument, we will need to parse the data directories:
pe.parse_data_directories()

for entry in pe.DIRECTORY_ENTRY_IMPORT:
  print entry.dll
  for imp in entry.imports:
    print '\t', hex(imp.address), imp.name

Вывод

comdlg32.dll
        0x10012A0L PageSetupDlgW
        0x10012A4L FindTextW
        0x10012A8L PrintDlgExW
[snip]
SHELL32.dll
        0x1001154L DragFinish
        0x1001158L DragQueryFileW

Список экспортированных символов

Точно так же экспортируемые символы могут быть перечислены следующим образом:

for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols:
  print hex(pe.OPTIONAL_HEADER.ImageBase + exp.address), exp.name, exp.ordinal

Вывод

0x7ca0ab4f SHUpdateRecycleBinIcon 336
0x7cab44c0 SHValidateUNC 173
0x7ca7b0aa SheChangeDirA 337
0x7ca7b665 SheChangeDirExA 338
0x7ca7b3e1 SheChangeDirExW 339
0x7ca7aec6 SheChangeDirW 340
0x7ca8baae SheConvertPathW 341
3
David Heffernan 11 Окт 2013 в 23:31