Другое С/С++ Вопрос - Ответ

sc6ut

неизвестный
Модератор
383
1,090
Почему бы не поставить хук на хук
не всегда сработает, к примеру бандикам поллит адрес своего хука и если ставишь свой он ставит свой поверх и хуячит твой.

можно поставить хук после пролога - на 5 байт дальше начала функции условно. по крайней мере, так я пофиксил работу с бандикамом в ультравх.
 
  • Нравится
Реакции: ARMOR

etereon

MQ-Team
Проверенный
333
855
не всегда сработает, к примеру бандикам поллит адрес своего хука и если ставишь свой он ставит свой поверх и хуячит твой.

можно поставить хук после пролога - на 5 байт дальше начала функции условно. по крайней мере, так я пофиксил работу с бандикамом в ультравх.
Я имел ввиду поставить хук на чужой детур
 
  • Нравится
Реакции: sc6ut

geteo

Новичок
15
1
Приветствую, решил подогнать лоадер с метод инъекции SetWindowsHookEx, изменял только FindWindowA, но лоадер стопается на моменте [ERROR]: please, start game, что не так?

C++:
#include "loaderFree.hpp"

void downloadFile(const char *dllLink, const char *dllPath)
{
    URLDownloadToFileA(0, dllLink, dllPath, 0, 0);
    DeleteUrlCacheEntryA(dllLink);

    std::cout << "[INFO]: software downloaded!" << std::endl;
}

bool injectDll(const char *dllPath) // by ICoded
{
    HWND hWnd = FindWindowA("NULL", "GTA:SA:MP");
    if (!hWnd) {
        std::cout << "[ERROR]: please, start game" << std::endl;
        return false;
    }
    
    DWORD pid;
    DWORD tid = GetWindowThreadProcessId(hWnd, &pid);
    if (!tid)
    {
        std::cout << "[ERROR]: cannot get process id" << std::endl;
        return false;
    }

    HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid);
    if (!hThread || hThread == INVALID_HANDLE_VALUE)
    {
        std::cout << "[ERROR]: cannot open process" << std::endl;
        return false;
    }

    HMODULE hMod = LoadLibraryExA(dllPath, NULL, DONT_RESOLVE_DLL_REFERENCES);
    if (!hMod)
    {
        std::cout << "[ERROR]: cannot load software" << std::endl;
        return false;
    }

    if (!SetWindowsHookExW(3, (HOOKPROC)GetProcAddress, hMod, tid))
    {
        std::cout << "[ERROR]: cannot set hook" << std::endl;
        return false;
    }

    std::cout << "[INFO]: injected!" << std::endl;

    Sleep(5000);

    if (PostThreadMessageW(tid, 0, 0, 0))
    {
        ShowWindow(GetConsoleWindow(), SW_HIDE);
        WaitForSingleObject(hThread, INFINITE);
        CloseHandle(hThread);
    }
    
    return true;
}

int main()
{
    std::cout << "[INFO]: starting download..." << std::endl;
    downloadFile(DLL_LINK, DLL_PATH);

    std::cout << "[INFO]: injecting..." << std::endl;
    injectDll(DLL_PATH);

    system("pause");
    return true;
}
 

Smeruxa

t.me/smeruxa
Проверенный
1,384
733
Приветствую, решил подогнать лоадер с метод инъекции SetWindowsHookEx, изменял только FindWindowA, но лоадер стопается на моменте [ERROR]: please, start game, что не так?

C++:
#include "loaderFree.hpp"

void downloadFile(const char *dllLink, const char *dllPath)
{
    URLDownloadToFileA(0, dllLink, dllPath, 0, 0);
    DeleteUrlCacheEntryA(dllLink);

    std::cout << "[INFO]: software downloaded!" << std::endl;
}

bool injectDll(const char *dllPath) // by ICoded
{
    HWND hWnd = FindWindowA("NULL", "GTA:SA:MP");
    if (!hWnd) {
        std::cout << "[ERROR]: please, start game" << std::endl;
        return false;
    }
  
    DWORD pid;
    DWORD tid = GetWindowThreadProcessId(hWnd, &pid);
    if (!tid)
    {
        std::cout << "[ERROR]: cannot get process id" << std::endl;
        return false;
    }

    HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid);
    if (!hThread || hThread == INVALID_HANDLE_VALUE)
    {
        std::cout << "[ERROR]: cannot open process" << std::endl;
        return false;
    }

    HMODULE hMod = LoadLibraryExA(dllPath, NULL, DONT_RESOLVE_DLL_REFERENCES);
    if (!hMod)
    {
        std::cout << "[ERROR]: cannot load software" << std::endl;
        return false;
    }

    if (!SetWindowsHookExW(3, (HOOKPROC)GetProcAddress, hMod, tid))
    {
        std::cout << "[ERROR]: cannot set hook" << std::endl;
        return false;
    }

    std::cout << "[INFO]: injected!" << std::endl;

    Sleep(5000);

    if (PostThreadMessageW(tid, 0, 0, 0))
    {
        ShowWindow(GetConsoleWindow(), SW_HIDE);
        WaitForSingleObject(hThread, INFINITE);
        CloseHandle(hThread);
    }
  
    return true;
}

int main()
{
    std::cout << "[INFO]: starting download..." << std::endl;
    downloadFile(DLL_LINK, DLL_PATH);

    std::cout << "[INFO]: injecting..." << std::endl;
    injectDll(DLL_PATH);

    system("pause");
    return true;
}
Попробуй так
HWND hWnd = FindWindowA(NULL, "GTA:SA:MP");
+ старт программы от имени админа
 
  • Нравится
Реакции: geteo

geteo

Новичок
15
1
обрати внимание, что твой ехешник должен быть х32, соответствуя игре
Перебрал все ошибки мира, а вот оно какое оказалось решение..

обрати внимание, что твой ехешник должен быть х32, соответствуя игре
А вот ещё один вопрос, использую usermode mmap IAT, игру просто всегда крашит, пробывал так же древнейший mmap thread hijacking - результат один и тоже, это так же из-за x32 архитектуры этой прекрасной игры?

1734516863115.png

b
 
Последнее редактирование:

Uno 0_o

Участник
34
11
Пасаны как сделать инжект закриптованного кода в память с последующим декриптом так-же в памяти. XDD
Кто шарит хелпаните молодому


Upd: пояснение
Допустим есть строка
system("calc");
Я ее хуярю методом AES и получается так - +P8Sq1XJLtk3kns608sfcg== (huihuihuihuihui1 Это ключ)
Загружаю в память и там ее расшифровываю обратно в исполняемый код и там он уже исполняется. (Можно в целом и в байтовом виде или ассемблерном мне до пизды как, главное чтоб работало ) Последний раз с памятью я работал в шараге на Turbo-C
 
Последнее редактирование:

Vintik

Через тернии к звёздам
Проверенный
1,557
1,029
Пасаны как сделать инжект закриптованного кода в память с последующим декриптом так-же в памяти. XDD
Кто шарит хелпаните молодому
А можно русским языком.
Декриптом это ты о чём?
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
318
679