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

niklive

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

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

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


[POSTS=5][DAYS=5]

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

[/DAYS][/POSTS]


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



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

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

Darwin

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

dra1S

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

niklive

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

Darwin

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

$1and1

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

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

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

$1and1

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

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


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

niklive

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

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


Далее к коду:
вам понадобится 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
Реакции
13
Под моей надписью "Краткий гайд" есть надпись скрин 1 - кликни на нее и тебе перебросит на скриншот на котором я расписал откуда взялись эти байты
Это я понял. Мой вопрос был о том, как ТЫ узнал об этом способе и вообще научился это делать. То, что ты написал, это очень ценно, но считай что ты даёшь мне рыбу, а не удочку. А меня интересует удочка, если это не секрет конечно.
 

niklive

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

$1and1

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