[Полезное] Ahk2Dll - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Полезное] Ahk2Dll
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 ников
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума