Что нового

[Процессы] Использование kernel32.dll для выгрузки dll.

FoxTiM

Новичок
Сообщения
22
Репутация
2
В Общем порылся я в функциях Win API и узнал что можно выгрузить любую dll через библиотеку kernel32.dll.
Если не ошибаюсь эта функция ищет в процессе нужную мне dll
GetModuleHandle
Описание:
function GetModuleHandle(ModuleName: PChar): THandle;
Считывает описатель модуля.

Паpаметpы:
ModuleName: Имя модуля (заканчиваются пустым символом).
Возвpащаемое значение:
В случае успешного завеpшения - идентификатор модуля; 0 - в противном случае.
функция находится в файле kernel32.dll
Сома функция выгрузки dll
Функция FreeLibrary

Описание:
function FreeLibrary(LibModule: THandle);

Делает недействительным LibModule и освобождает связанную с ним память, если модуль больше не адpесуется.

Паpаметpы:
LibModule: Загpуженный библиотечный модуль.

функция находится в файле kernel32.dll
Можно попробывать на notapad.exe
Код:
$processid = ProcessExists("notapad.exe")
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)

Видел вот такие примеры на C#
Код:
hOwcHandle = GetModuleHandle("имя.dll") 
If Not hOwcHandle.Equals(IntPtr.Zero) Then FreeLibrary(hOwcHandle)
Помогите это реализовать!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Можно выгрузить только те .dll, которые были загружены в том же модуле.
 
Автор
F

FoxTiM

Новичок
Сообщения
22
Репутация
2
Yashied сказал(а):
Можно выгрузить только те .dll, которые были загружены в том же модуле.

А так как сделать?
---------
FreeLibrary находится в экспорте у kernel32.dll которая подгружена во все процессы
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <WinAPI.au3>

$hModule = _WinAPI_LoadLibrary(...)
...
_WinAPI_FreeLibrary($hModule)


Но в AutoIt нужно использовать DllOpen(), иначе не получится использовать функции из DLL.

Код:
$hDll = DllOpen(...)
...
DllCall($hDll, ...)
...
DllClose(...)
 
Автор
F

FoxTiM

Новичок
Сообщения
22
Репутация
2
Yashied сказал(а):
Код:
#Include <WinAPI.au3>

$hModule = _WinAPI_LoadLibrary(...)
...
_WinAPI_FreeLibrary($hModule)


Но в AutoIt нужно использовать DllOpen(), иначе не получится использовать функции из DLL.

Код:
$hDll = DllOpen(...)



...
DllCall($hDll, ...)
...
DllClose(...)


Ясно но можешь еще конкретнее показать на примере какой нибудь dll?
Точнее даже написать функцию выгрузки dll
Код:
$hDll = DllOpen("kernel32.dll")
DllCall($hDll, тут пример FreeLibrary которая подает команду на выгрозук dll(любой)  из всех запущеных процессов)
DllClose($hDll)

пример...
Код:
$hDll = DllOpen("kernel32.dll")
DllCall($hDll, 'int', 'FreeLibrary', 'int', 'VERSION.dll', 'int', "long_ptr", 0)
DllClose($hDll)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Еще раз. Ты можешь выгрузить только те .dll, которые сам загрузил в этом же процессе, из которого и выгружаешь. Для того, чтобы воспользоваться FreeLibrary(), нужно сначала загрузить библиотеку, например с помощью функции LoadLibrary(). Но какой в этом смысл, если в AutoIt нет возможности обращаться к функциям из DLL по его (DLL) хендлу. В общем и целом нужно делать следующим образом:

Код:
#Include <WinAPI.au3>

$hModule = _WinAPI_LoadLibrary('VERSION.dll')
; Но вот что ты здесь будешь с этим делать?
_WinAPI_FreeLibrary($hModule)


Более того, те .dll, которые загружает AutoIt по умолчанию, ты выгрузить все равно не сможешь, т.к. они загружены с флагом GET_MODULE_HANDLE_EX_FLAG_PIN.
 
Автор
F

FoxTiM

Новичок
Сообщения
22
Репутация
2
Ну теперь все понятно) реализация на autoit этого невозможна(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А что ты хотел сделать?
 
Автор
F

FoxTiM

Новичок
Сообщения
22
Репутация
2
Yashied сказал(а):
А что ты хотел сделать?

Ты знаком с защитой Frost?
Так вот он какбы является вирусом и инжектит во все запущенные процессы свой dll
frostProtector.dll тем самым палит миногие чит программы.
Я как бы нашел способ его обойти, написал dll которая блокирует его подгруздку в программу но функциональность его желает лучшего(((
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Понятно.
 
Верх