Перехват C ++ - PullRequest
       57

Перехват C ++

0 голосов
/ 27 апреля 2020

У меня есть приложение (сделанное мной), и теперь я решил, что хочу попробовать перехват.

Итак, функция, которую я пытаюсь перехватить, выглядит так:

void PrintMessage(const char* c_szFormat, ...)
{
    char szBuf[1024 + 2];

    strncpy_s(szBuf, "I got: ", 1024);

    int len = strlen(szBuf);

    va_list args;
    va_start(args, c_szFormat);

    len = _vsnprintf(szBuf + len, sizeof(szBuf) - (len + 1), c_szFormat, args) + len;


    va_end(args);

    szBuf[len] = '\n';
    szBuf[len + 1] = '\0';
    fprintf(stderr, "%s", szBuf);
}

Я успешно нашел функцию на ida pro, она выглядит следующим образом: http://prntscr.com/s6esam

Может кто-нибудь объяснить мне, почему она показывает функцию как целое число вместо void? Я понимаю, что const char * показывается как указатель int a1 в моем случае.

Также я пытался перехватить его по адресу 0x512550

Это мой код

#include <windows.h>
#include "pch.h"
#include <iostream>
#include "detours.h"

int(* originalCall)(const char*, ...); 

int hookedFunction(const char* a1, ...)
{
    MessageBoxA(NULL, "", "Function called", MB_OK);
    return originalCall("Hooked %s", "test");
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
        MessageBoxA(NULL, "", "Hook set", MB_OK);
        originalCall = (int(*)(const char*, ...))DetourFunction((PBYTE)0x512550, (PBYTE)hookedFunction);
        break;
    }
    return TRUE;
}

Но мне не повезло, что это не работает, может кто-нибудь сказать мне несколько советов или подсказок о том, как мне продолжить?

...