Вопрос HackMe, hook функции

niklive

Активный
Сообщения
165
Реакции
16
Я создал прогу, чтобы по тренироваться хукать функцию.

Посмотрев видео на ютубе до меня всё равно не допёрло как это делать.

Буду очень рад, если сможете подсказать как хукнуть функцию(через CE)




Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



P.S. Если прогу скачаете, нужно нажать кнопку F1, чтобы вывести MessageBoxA

29.07.2022 9:45 AM REDACTED
 
Последнее редактирование:

Darwin

Команда форума
Администратор
Сообщения
945
Реакции
513
Позвони этой функций
 

dra1S

Следопыт
Сообщения
61
Реакции
9
Мне кажется ты что то не так написал в теме. Вопрос был задан не коректно
 

niklive

Активный
Сообщения
165
Реакции
16
Смеяться над тем, у кого не получается что-то сделать, да и к тому же неправильно описал ситуацию(понял в процессе чтения насмешек) - очень умно с вашей стороны. Вместо глупостей которые вы написали, лучше бы помогли. А если и сами не знаете как это работает, тогда лучше промолчите и не позорьтесь
 

Darwin

Команда форума
Администратор
Сообщения
945
Реакции
513
Смеяться над тем, у кого не получается что-то сделать, да и к тому же неправильно описал ситуацию(понял в процессе чтения насмешек) - очень умно с вашей стороны. Вместо глупостей которые вы написали, лучше бы помогли. А если и сами не знаете как это работает, тогда лучше промолчите и не позорьтесь
Позвони функций (call) либо прыгни в нее (jmp) и MSGBOX высветится
 

$1and1

Активный
Сообщения
285
Реакции
43
Я через CE выделяю память и инжекчу в неё call или jmp на функцию
MinHook(

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

) прост в использовании! Он поддерживает и х86 и х64(у меня проблем ка была, архитектура х64 не поддерживает _asm
 

$1and1

Активный
Сообщения
285
Реакции
43
Ради интереса хукнул твой мессаджбокс и вывел вместо него надпись HOOKED

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


То что потом прога отъехала , это не важно)
ну вопрос был же в хуке функции?
 

niklive

Активный
Сообщения
165
Реакции
16
Краткий гайд

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


Далее к коду:
вам понадобится PatternScan и MinHook
минхук сами найдёте думаю и без меня
а паттернскан дам, просто подключите заголовок там где хукать собираетесь
Pattenscan.h
Код:
#include <Windows.h>
#include <vector>
uintptr_t PatternScan(uintptr_t moduleAdress, const char* signature)
{
    static auto patternToByte = [](const char* pattern)
    {
        auto       bytes = std::vector<int>{};
        const auto start = const_cast<char*>(pattern);
        const auto end = const_cast<char*>(pattern) + strlen(pattern);

        for (auto current = start; current < end; ++current)
        {
            if (*current == '?')
            {
                ++current;
                bytes.push_back(-1);
            }
            else { bytes.push_back(strtoul(current, &current, 16)); }
        }
        return bytes;
    };

    const auto dosHeader = (PIMAGE_DOS_HEADER)moduleAdress;
    const auto ntHeaders = (PIMAGE_NT_HEADERS)((std::uint8_t*)moduleAdress + dosHeader->e_lfanew);

    const auto sizeOfImage = ntHeaders->OptionalHeader.SizeOfImage;
    auto       patternBytes = patternToByte(signature);
    const auto scanBytes = reinterpret_cast<std::uint8_t*>(moduleAdress);

    const auto s = patternBytes.size( );
    const auto d = patternBytes.data( );

    for (auto i = 0ul; i < sizeOfImage - s; ++i)
    {
        bool found = true;
        for (auto j = 0ul; j < s; ++j)
        {
            if (scanBytes[i + j] != d[j] && d[j] != -1)
            {
                found = false;
                break;
            }
        }
        if (found) { return reinterpret_cast<uintptr_t>(&scanBytes[i]); }
    }
    return NULL;
}


Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


код:
C++:
void(*OGetMessageBox) = nullptr;
void GetMessageBox()
{
    while (true)
    {
        std::cout << "\n HOOKED";
    }
}

Сам хук

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



Он должен вызываться в DllMain при DLL_PROCESS_ATTACH там же где обычно вызывается MainThread
если у вас будет поток то его только после хука

Код хука

C++:
        uintptr_t GetMBox = PatternScan((uintptr_t)GetModuleHandleA(NULL), "FF 15 ? ? ? ? EB D6");
        if (!GetMBox) return FALSE;


        if (MH_Initialize() != MH_STATUS::MH_OK) return FALSE;

        if (MH_CreateHook(reinterpret_cast<LPVOID>(GetMBox), GetMessageBox, reinterpret_cast<LPVOID*>(&OGetMessageBox)) != MH_STATUS::MH_OK) return FALSE;

        if (MH_EnableHook(reinterpret_cast<LPVOID>(GetMBox)) != MH_STATUS::MH_OK) return FALSE;

Как то так ) Я мог бы сделать отдельный тред, но мне лень
Спасибо, очень ценная информация! Если не секрет, как обучился этому? Видео на ютубе или статьи какие-то?
 

niklive

Активный
Сообщения
165
Реакции
16
Под моей надписью "Краткий гайд" есть надпись скрин 1 - кликни на нее и тебе перебросит на скриншот на котором я расписал откуда взялись эти байты
Это я понял. Мой вопрос был о том, как ТЫ узнал об этом способе и вообще научился это делать. То, что ты написал, это очень ценно, но считай что ты даёшь мне рыбу, а не удочку. А меня интересует удочка, если это не секрет конечно.
 

niklive

Активный
Сообщения
165
Реакции
16
Это хорошо что ты ищешь удочку, поверь в интернете просто слишком много инфы и не понятно что нужно) На самом деле я не так уж и опытен и не так уж много знаю, но скажу одно, ты в правильном направлении, я бы хотел тебе дать удочку, как хотел что бы мне дали то же самое)
Но на данный момент - я слишком подавлен психологически , и не могу ничего с собой поделать, ирл проблемы понимаешь)
Но можешь добавить меня в дискорде - я помогу чем смогу перед тем как уйти.
qwerz#7316
Добавил
 

$1and1

Активный
Сообщения
285
Реакции
43
Это хорошо что ты ищешь удочку, поверь в интернете просто слишком много инфы и не понятно что нужно) На самом деле я не так уж и опытен и не так уж много знаю, но скажу одно, ты в правильном направлении, я бы хотел тебе дать удочку, как хотел что бы мне дали то же самое)
Но на данный момент - я слишком подавлен психологически , и не могу ничего с собой поделать, ирл проблемы понимаешь)
Но можешь добавить меня в дискорде - я помогу чем смогу перед тем как уйти.
qwerz#7316
а если нужно изменить функцию саму, а не его вызов, например, функция вызывается 2 раза в разных местах, как это кякнуть то, а если будет функций много, тогда что? Или это не связано и я косо думаю
 
Верх Низ