Обход Хук во внешнем процессе для «пустой» функции не работает - PullRequest
6 голосов
/ 20 августа 2011

Я перехватываю функции во внешнем процессе через их смещение функции.Это хорошо работает для функций, которые я до сих пор перехватываю - однако я нашел функцию "debugLog (char ...)", которая все еще существует в двоичном файле, но не выполняет никакой печати - она ​​выглядит так

debugMessage    proc near               ; 
            xor     eax, eax        ; Logical Exclusive OR
            retn                    ; Return Near from Procedure
debugMessage    endp

это называется так

push    offset debugString ; "This is a debug message"...
call    debugMessage    ; Call Procedure

Теперь отладочное сообщение, очевидно, отключено, я хотел подключиться к нему, так как я уже мог просто подключиться к аналогичному func (char ..) в двоичном файле.

Это код:

typedef void (__stdcall* DebugLog)(const char*);
DebugLog Real_DebugLog = (DebugLog)(0xCAFEBABE);

extern "C"
 {
 static void __stdcall Hook_DebugLog(const char*);
 }

void __stdcall Hook_DebugLog(const char* text) {
MessageBox(NULL, text, "MyDebugLog", MB_OK);
return Real_DebugLog(text);
}

// in dll main attach..
DetourTransactionBegin(); 
DetourUpdateThread(GetCurrentThread()); 
DetourAttach(&(PVOID&)Real_DebugLog, (PVOID)Hook_DebugLog); 

Аналогичный подход работает для всех других функций, которые я до сих пор подключал к этому двоичному файлу.Я также убедился, что debugMessage даже вызывается с помощью отладчика.

Есть идеи, почему этот хук вообще не работает?Может быть, потому что функция может иметь аргументы var?я уже пробовал с const char *, ...).

Ответы [ 2 ]

3 голосов
/ 20 августа 2011

Для обхода требуется минимум 5 байтов (x86) - debugMessage - это всего 3 байта.

2 голосов
/ 20 августа 2011

Функция, вероятно, слишком мала, чтобы ее зацепить. Detours должен переписать часть перехваченной функции для перенаправления вызовов в другое место, но, вероятно, в этой заглушке журнала недостаточно места, чтобы Detours мог написать инструкцию JMP, предназначенную для вашей замены.

...