Rinat_Namazov |
Дата: Суббота, 22.09.2018, 23:01 | Сообщение # 1
|
Боец
Сообщений: 122
Статус: Offline
|
Ahk2DllКомпилятор AHK в DLL. И можно инжектнуть ахк скрипт в любой процесс. Для GTA SA, можно поменять расширение на .asi и закинуть в папку с игрой. Скачать можно тут: <ТыК>.
Нововведения:
- Функция reload не действует в DLL, из-за проблем с очисткой памяти и GUI.
- Функция ExitApp в DLL переделана под закрытие потока, а не процесса.
- Добавлена встроенная переменная A_IsDll, содержит 1 (true) если код исполняется в dll'ке, и 0 (false) в противоположном случае.
- Для DLL добавлены переменные A_DllName, A_DllDir, A_DllPath (Аналог A_ScriptName, A_ScriptDir, A_ScriptFullPath), так как переменные по типу A_ScriptName и т.п содержат название процесса в который инжекнута DLL.
AHK Injector Пример кода для инжекта dll в процесс:
Код Process, Exist, gta_sa.exe PID := ErrorLevel if (PID != 0) InjectDll(PID, A_WorkingDir "\AHK.dll")
InjectDll(PID, DllPath) { static PROCESS_ALL_ACCESS := 0xFFFFF , MEM_COMMIT := 0x00001000 , MEM_RESERVE := 0x00002000 , PAGE_READWRITE := 0x04 Size := VarSetCapacity(DllFile, StrLen(DllPath)) StrPut(DllPath, &DllFile) ; Получаем доступ к процессу. if (!pHandle := DllCall("OpenProcess", "UInt", PROCESS_ALL_ACCESS, "Int", FALSE, "UInt", PID)) goto Error ; Ищем kernel32.dll. if (!pModule := DllCall("GetModuleHandle", "Str", "kernel32.dll")) goto Error ; Ищем LoadLibrary (Суффикс A означает что работаем в ANSI, один байт на символ). if (!pFunc := DllCall("GetProcAddress", "Ptr", pModule, "AStr", "LoadLibraryA")) goto Error ; Выделяем память под аргумент LoadLibrary, а именно - строку с адресом инъектируемой DLL. if (!pLibrary := DllCall("VirtualAllocEx", "Ptr", pHandle, "Ptr", NULL, "Ptr", Size, "UInt", MEM_RESERVE | MEM_COMMIT, "UInt", PAGE_READWRITE)) goto Error ; Пишем байты по указанному адресу. if (!pWrite := DllCall("WriteProcessMemory", "Ptr", pHandle, "Ptr", pLibrary, "Ptr", &DllFile, "Ptr", Size, "Ptr", NULL)) goto Error ; Создаем поток, передаем адрес LoadLibrary и адрес ее аргумента. if (!hThread := DllCall("CreateRemoteThread", "Ptr", pHandle, "UIntP", NULL, "UInt", NULL, "Ptr", pFunc, "Ptr", pLibrary, "UInt", NULL, "UIntP", NULL)) goto Error DllCall("CloseHandle", "UInt", pHandle) return true Error: DllCall("CloseHandle", "UInt", pHandle) return false }
Сообщение отредактировал Rinat_Namazov - Суббота, 22.09.2018, 23:22 |
|
|
|
slavawar |
Дата: Воскресенье, 23.09.2018, 10:49 | Сообщение # 2
|
Проверенный
Сообщений: 172
Статус: Offline
|
Очень годная штука! Забираю себе
Мои темы: [AHK] Шифратор текста [AHK] Акцент 3 в 1 [C#] Генератор RP ников
|
|
|
|