Вопрос Как хукнуть функцию по патерну ?

Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
183
Реакции[?]
16
Поинты[?]
5K
привет, надо хукнуть функцию по патерну
вот моя попытка которая к нечему не привела
my func:
 if (MH_CreateHook(PatternScan(GetModuleHandleA("hack.dll"), "55 8B ? ? 50 83 EC 44 A1 ? ? ? ? 33 C5 89 45 F0 50 "), &gggg, (LPVOID*)NULL) != MH_OK)
    {
        MessageBoxA(0, "Pizda rulu", "Error", 0);
        return FALSE;
    }
PatternScan:
std::uint8_t* PatternScan(void* module, const char* signature)
{
    static auto pattern_to_byte = [](const char* pattern) {
        auto bytes = std::vector<int>{};
        auto start = const_cast<char*>(pattern);
        auto end = const_cast<char*>(pattern) + strlen(pattern);

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

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

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

    auto s = patternBytes.size();
    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 &scanBytes[i];
        }
    }
    return nullptr;
}
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А ты MH_EnableHook вызывал? и если все таки минхук не поможет, то попробуй это

C++:
void hook_function_32(uint32_t address, uint32_t hk_address)
{
    DWORD dwOldValue, dwTemp;

    VirtualProtect((LPVOID)address, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &dwOldValue);

    *reinterpret_cast<uint8_t*>(address) = 0xE9;
    *reinterpret_cast<uint32_t*>(address + 1) = (uint32_t)hk_address - (address + 5);

    VirtualProtect((LPVOID)address, sizeof(DWORD), dwOldValue, &dwTemp);
}

// example
hook_function_32(PatternScan(GetModuleHandleA("hack.dll"), "55 8B ? ? 50 83 EC 44 A1 ? ? ? ? 33 C5 89 45 F0 50"), gggg);
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
183
Реакции[?]
16
Поинты[?]
5K
А ты MH_EnableHook вызывал? и если все таки минхук не поможет, то попробуй это

C++:
void hook_function_32(uint32_t address, uint32_t hk_address)
{
    DWORD dwOldValue, dwTemp;

    VirtualProtect((LPVOID)address, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &dwOldValue);

    *reinterpret_cast<uint8_t*>(address) = 0xE9;
    *reinterpret_cast<uint32_t*>(address + 1) = (uint32_t)hk_address - (address + 5);

    VirtualProtect((LPVOID)address, sizeof(DWORD), dwOldValue, &dwTemp);
}

// example
hook_function_32(PatternScan(GetModuleHandleA("hack.dll"), "55 8B ? ? 50 83 EC 44 A1 ? ? ? ? 33 C5 89 45 F0 50"), gggg);
MH_EnableHook да тоже вызвал, спасибо за ответ буду за пк гляну
 
Забаненный
Статус
Оффлайн
Регистрация
27 Дек 2022
Сообщения
50
Реакции[?]
32
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
What is mean hook ?
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу