SiriusED Опубликовано 21 августа, 2014 Поделиться Опубликовано 21 августа, 2014 Всем доброго времени суток.Начал вот учить хуки 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(как в уроке), то работает нормально(но там другая запись)... А почему не работает тут? Смотрел в СЕ там нормально все джамп ставит куда нужно, но после инжекта сразу креш... Гляньте .. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 августа, 2014 Поделиться Опубликовано 22 августа, 2014 А почему ты хукаешь и вызываешь MySendMessage, когда надо SendMessage? Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 22 августа, 2014 Автор Поделиться Опубликовано 22 августа, 2014 Короче все нормально работает, это просто руки у меня кривоваты...Было:CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Hook(), 0, 0, 0);Надо:CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Hook, 0, 0, 0);..... Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 22 августа, 2014 Поделиться Опубликовано 22 августа, 2014 Суров парень Я кстати тоже косяка-то этого не заметил) Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 22 августа, 2014 Автор Поделиться Опубликовано 22 августа, 2014 Но почему оно скомпилило то, могло и ошибку кинуть.. или это что-то тоже рабочее но не в ту сторону?) Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 августа, 2014 Поделиться Опубликовано 22 августа, 2014 /*---------------------------------------------------------------------------*/ (LPTHREAD_START_ROUTINE) Hook вернёт адрес Hook, сконвертированный в LPTHREAD_START_ROUTINE, а (LPTHREAD_START_ROUTINE) Hook() - результат выполнения Hook(), сконверченный туда же. Если не уверен в результате того или иного выражения - вынеси его в отдельную переменную и проверь в отладчике. /*---------------------------------------------------------------------------*/ Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 22 августа, 2014 Автор Поделиться Опубликовано 22 августа, 2014 /*---------------------------------------------------------------------------*/ (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? ОО Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 августа, 2014 Поделиться Опубликовано 22 августа, 2014 Ты параметры неправильно указываешь. У тебя ж юникод. LPCWSTR (или LPWCSTR точно не помню) должно быть, а не LPCTSTR Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 22 августа, 2014 Автор Поделиться Опубликовано 22 августа, 2014 Действительно, у MessageBoxW оказывается чуть другие типы у параметров чем у MessageBoxA... Вот так работает нормально... Спасибо.INT(WINAPI * RealMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW; Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения