Перейти к содержанию

Detours 1.5 / SendMessageW / Crash / Код внутри


Рекомендуемые сообщения

Всем доброго времени суток.

Начал вот учить хуки WinAPI-функций.

 

Во общем вот код с использованием Detours 1.5, который хукает firefox.exe->SendMessageW(). То есть вместо тайтла в окне всегда должно писать "Hooked":

DETOUR_TRAMPOLINE(LRESULT WINAPI MySendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam), SendMessageW);LRESULT WINAPI MySendMessageW_Hooked(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam){	return MySendMessageW(hWnd, Msg, wParam, (LPARAM) L"Hooked");}int Start(){	::DetourFunctionWithTrampoline((PBYTE) MySendMessageW, (PBYTE) MySendMessageW_Hooked);	return 0;}BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved){	if (dwReason == DLL_PROCESS_ATTACH)	{		CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Start(), 0, 0, 0);	}	return TRUE;}

Если записать через Detours 3.0(как в уроке), то работает нормально(но там другая запись)... А почему не работает тут? Смотрел в СЕ там нормально все джамп ставит куда нужно, но после инжекта сразу креш... Гляньте ..

Ссылка на комментарий
Поделиться на другие сайты

Короче все нормально работает, это просто руки у меня кривоваты...

Было:

CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Hook(), 0, 0, 0);

Надо:

CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Hook, 0, 0, 0);

.....

Ссылка на комментарий
Поделиться на другие сайты

/*---------------------------------------------------------------------------*/

 

(LPTHREAD_START_ROUTINE) Hook вернёт адрес Hook, сконвертированный в 

LPTHREAD_START_ROUTINE, а (LPTHREAD_START_ROUTINE) Hook() - результат 

выполнения Hook(), сконверченный туда же. Если не уверен в результате того или

иного выражения - вынеси его в отдельную переменную и проверь в отладчике.

 

/*---------------------------------------------------------------------------*/

Ссылка на комментарий
Поделиться на другие сайты

/*---------------------------------------------------------------------------*/

 

(LPTHREAD_START_ROUTINE) Hook вернёт адрес Hook, сконвертированный в 

LPTHREAD_START_ROUTINE, а (LPTHREAD_START_ROUTINE) Hook() - результат 

выполнения Hook(), сконверченный туда же. Если не уверен в результате того или

иного выражения - вынеси его в отдельную переменную и проверь в отладчике.

 

/*---------------------------------------------------------------------------*/

 

Понял.

Ну и еще я вот тут счас учусь чуток хукать WinAPI, действительно все очень просто, если разобратся с Detours... Но вот такой вот вопросец ее у меня есть:

Вот я хукал SendMessageW, как сверху, и оригинальный адрес сохранял так:

LRESULT(WINAPI * RealSendMessageW)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) = SendMessageW;

А вот как так же сохранить адрес MessageBoxW на пример?

INT(WINAPI * RealMessageBoxW)(HWND hWnd, LPCTSTR  lpText, LPCTSTR lpCaption, UINT uType) = MessageBoxW; // Ошибка после "=".

P/S. Че реально Detours Pro стоит $10,000? ОО

Ссылка на комментарий
Поделиться на другие сайты

Действительно, у MessageBoxW оказывается чуть другие типы у параметров чем у MessageBoxA... Вот так работает нормально... Спасибо.

INT(WINAPI * RealMessageBoxW)(HWND hWnd, LPCWSTR  lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW;
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.