Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Получение списка экспортируемых функций длл, Готовый скрипт
cirus
сообщение 11.10.2020, 23:39
Сообщение #1


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26707
Пользователь №: 16.971
Возраст: 29



код
Код
--lua
local ffi = require("ffi")
local IMAGE_DIRECTORY_ENTRY_EXPORT = 0
local Imagehlp = ffi.load('Imagehlp.dll')
local Dbghelp = ffi.load('Dbghelp.dll')

ffi.cdef[[
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef void *PVOID;
typedef unsigned long *PULONG;
typedef struct _LOADED_IMAGE { const char* ModuleName; int hFile; int MappedAddress; int FileHeader; int LastRvaSection; int NumberOfSections; int Sections;
  int Characteristics; bool fSystemImage; bool fDOSImage; bool fReadOnly; int Version; long Links; int SizeOfImage;} LOADED_IMAGE, *PLOADED_IMAGE;
typedef struct _IMAGE_EXPORT_DIRECTORY{DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Name; DWORD   Base; DWORD   NumberOfFunctions;
DWORD   NumberOfNames; DWORD   AddressOfFunctions; DWORD   AddressOfNames;DWORD   AddressOfNameOrdinals;} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
bool MapAndLoad(const char* ImageName, unsigned char* DllPath, PLOADED_IMAGE LoadedImage, bool DotDll, bool ReadOnly);
PVOID ImageDirectoryEntryToData(PVOID Base, bool MappedAsImage, unsigned short  DirectoryEntry, PULONG  Size);
PVOID ImageRvaToVa(int NtHeaders, PVOID Base, unsigned int Rva, int* LastRvaSection);
]]

function list_function(name_dll)
    local LoadedImage = ffi.new('LOADED_IMAGE')
    local _size = ffi.new('int[1]')
    Imagehlp.MapAndLoad(name_dll, nil, LoadedImage, true, true)
    local ImageExportDirectory = ffi.cast('PIMAGE_EXPORT_DIRECTORY', Dbghelp.ImageDirectoryEntryToData(ffi.cast('PVOID', LoadedImage.MappedAddress), false, IMAGE_DIRECTORY_ENTRY_EXPORT, _size))
    local address = ffi.cast('int*', Dbghelp.ImageRvaToVa(LoadedImage.FileHeader, ffi.cast('PVOID', LoadedImage.MappedAddress), ImageExportDirectory.AddressOfNames, nil))
    for i=0, ImageExportDirectory.NumberOfNames-1 do
        local name_func = Dbghelp.ImageRvaToVa(LoadedImage.FileHeader, ffi.cast('PVOID', LoadedImage.MappedAddress), address[i], nil)
        log(ffi.string(name_func))
    end
    log ('Всего функций: ' .. tostring(ImageExportDirectory.NumberOfNames))
end

log 'clear' log 'mode compact'

list_function('User32.dll')    -- список экспортируемых функций длл
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.10.2020, 3:09
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27722
Пользователь №: 11.279



Это сильно. Типы передаваемых значений дернуть я так полагаю не реально? Хотя бы базовые и их количество.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 12.10.2020, 12:05
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26707
Пользователь №: 16.971
Возраст: 29



Цитата
Типы передаваемых значений дернуть я так полагаю не реально?

Если длл стандартная, то парсить заголовочный файл, либо получить содержимое страницы с описанием функции и найти нужную инфу.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 24.4.2024, 12:25
Designed by Nickostyle