Это часть гораздо большего, очень сложного усилия, которое я сократил только до самого необходимого.Я использую Python, и цель здесь состоит в том, чтобы перечислить все библиотеки DLL и найти абсолютный путь для них, который я затем могу передать в pefile, чтобы тем самым загрузить его.
То, что я придумал с частичными работами и частичноне.В некоторых случаях он просто находит адрес для Python.exe или вообще не может ничего найти.В других случаях это работает отлично.Я ищу идеи о том, как правильно найти абсолютный путь для этих библиотек с помощью этой техники ... или даже сделать что-то совершенно другое.Может быть, мне нужно импортировать что-то еще?
Вот что я придумал:
import pefile
import win32api
import win32con
from ctypes import windll
from ctypes import wintypes
import sys
import os
peName= sys.argv[1]
pe = pefile.PE(peName)
PE_DLLS = []
def getDLLs():
global PE_DLLS
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print entry.dll
PE_DLLS.append(entry.dll)
def extractDLL(dllName):
# Part of this loadlibrary comes from: https://www.programcreek.com/python/example/53932/ctypes.wintypes.HANDLE
print dllName
try:
dllHandle = win32api.LoadLibraryEx(dllName, 0, win32con.LOAD_LIBRARY_AS_DATAFILE)
windll.kernel32.GetModuleHandleW.restype = wintypes.HMODULE
windll.kernel32.GetModuleHandleW.argtypes = [wintypes.LPCWSTR]
windll.kernel32.GetModuleFileNameW.restype = wintypes.DWORD
windll.kernel32.GetModuleFileNameW.argtypes = [wintypes.HANDLE, wintypes.LPWSTR, wintypes.DWORD]
h_module_base = windll.kernel32.GetModuleHandleW(dllName)
module_path = wintypes.create_unicode_buffer(255)
windll.kernel32.GetModuleFileNameW(h_module_base, module_path, 255)
pe = pefile.PE(module_path.value)
win32api.FreeLibrary(dllHandle)
print "\t*" + module_path.value
except:
print "\t*" + dllName + " could not be found."
pass
i = 0
getDLLs()
for dll in PE_DLLS:
extractDLL(PE_DLLS[i])
i +=1
Когда я выполняю его с файлом, таким как, например, IDA, яполучите следующее:
USER32.dll
*C:\WINDOWS\System32\USER32.dll
ADVAPI32.dll
*C:\WINDOWS\System32\ADVAPI32.dll
WSOCK32.dll
*C:\Python27\python.exe
SHELL32.dll
*C:\WINDOWS\System32\SHELL32.dll
IDA.dll
*IDA.dll could not be found.
Qt5PrintSupport.dll
*C:\Python27\python.exe
Qt5Widgets.dll
*C:\Python27\python.exe
Qt5Gui.dll
*C:\Python27\python.exe
Qt5Core.dll
*C:\Python27\python.exe
MSVCP140.dll
*C:\Python27\python.exe
ole32.dll
*C:\WINDOWS\System32\ole32.dll
OLEAUT32.dll
*C:\WINDOWS\System32\OLEAUT32.dll
KERNEL32.dll
*C:\WINDOWS\System32\KERNEL32.DLL
VCRUNTIME140.dll
*C:\Python27\python.exe
api-ms-win-crt-convert-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-math-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-string-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-runtime-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-utility-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-stdio-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-time-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-heap-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
api-ms-win-crt-locale-l1-1-0.dll
*C:\WINDOWS\System32\ucrtbase.dll
Обратите внимание на следующие проблемы: 1. Некоторые из них назывались Python.exe;2. некоторые ничего не могли найти (МАР);3. для ряда похожих DLL в конце, он дал ucrtbase.dll.Буду признателен за любую помощь по любому из них, так как я хочу, чтобы он мог найти ВСЕ DLL.
Нет особой причины, по которой я включаю IDA, за исключением того, что он дал три уникальных ошибки, и это было большечем другие, которые я проверял.
Я думал о поиске dll на жестком диске, если он не найден, но это может привести к проблемам с DLL-библиотеками с одинаковыми именами.Кроме того, у аналитика может быть нечто, называемое общей библиотекой DLL, но на самом деле это артефакт вредоносного ПО, который можно найти только при поиске на жестком диске.Наконец, необходимость поиска может немного замедлить его.Но я открыт для любых творческих идей.