Перечисление всех модулей для двоичного файла с использованием Python (pefile / win32api) - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу использовать PEfile или другую библиотеку Python для перечисления всех модулей.Я думал, что у меня это есть, но потом я вхожу в WinDbg, потому что некоторые очевидные из них отсутствовали, и я увидел, что было несколько пропавших без вести.Вот вывод, который я получил из pefile с помощью скрипта simlar:

ADVAPI32.dll
COMCTL32.DLL
COMDLG32.DLL
CRYPT32.dll
GDI32.dll
KERNEL32.dll
MPR.DLL
msvcrt.dll
NETAPI32.dll
Normaliz.dll
ole32.dll
OLEAUT32.dll
POWRPROF.dll
SHELL32.DLL
USER32.dll
WINMM.DLL
WS2_32.dll
WSOCK32.DLL

def findDLL():
    pe = pefile.PE(name)
    for each in pe.DIRECTORY_ENTRY_IMPORT:
        print entry.dll

Есть ли что-то еще в Pefile, на которое я должен обратить внимание, чтобы получить более полный список модулей, которые будут загружены?

Есть ли в win32api или win32con что-то, что могло бы дать мне эту информацию?Я бы предпочел pefile, если это возможно, но любой из них работает.Мне нужно иметь возможность выводить список всех модулей, которые будут загружены.Я работаю в Python и не могу измениться.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

На самом деле, существуют разные типы методов для импорта модулей.Тип определяется тем, как указанный модуль связан с исполняемым файлом.Насколько я знаю, PEfile перечисляет только библиотеки динамических ссылок, которые статически связаны с исполняемым файлом через таблицу Imports.Другие типы динамически подключаемых библиотек: явные (те, которые вызываются через API-интерфейсы LoadLibrary / GetProcAddress), Forwarded (те, которые загружаются с помощью механизма PE, которые позволяют пересылать вызовы API), и с задержкой (те, которые загружаются с помощью механизма PE, которые позволяют задерживать загрузку вызовов API).

Ниже приведена схема, представляющая эти методы (которая является частью моих слайдов https://winitor.com/pdf/DynamicLinkLibraries.pdf

Надеюсь, это поможет.

enter image description here

0 голосов
/ 22 декабря 2018

Модули могут быть загружены в процесс разными способами.Импортированные библиотеки DLL - это только один способ.

  1. Импортированные библиотеки DLL могут импортировать библиотеки DLL и для себя.foobar.exe может зависеть от user32.dll, но user32.dll, в свою очередь, также зависит от kernel32.dll, что будет загружено в ваш процесс.Если вам нужен полный список, вы можете проверить импортированные библиотеки DLL на наличие зависимостей вашего исполняемого файла.
  2. Модули можно динамически загружать в коде с помощью LoadLibrary().Вы не увидите их в каталоге импорта.Вам придется разобрать код для этого, и даже тогда имя библиотеки может быть сгенерировано на лету, так что это будет трудно определить.
  3. Есть еще несколько неподдерживаемых методов загрузки модулей, которые могут использовать вредоносные программы.

Как уже упоминалось в комментариях, получить список загруженных модулей через API отладки, вероятно, проще.Но все зависит от того, что вы на самом деле пытаетесь сделать с этими данными.

...