Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Кстати, тебе чего, заняться нечем?) Ты не в курсе как работает CallNextHookEx?
Добавлено через 8 минут
В общем в одной игрухе пытаюсь найти обработку нажатия клавиш.
Оконная процедура начинается вот с такой бадяги:
Код:
void __userpurge sub_41F06B(int this<ecx>, double a2<st0>, HWND hWnd, int message, int wParam, unsigned int lParam)
{
int v6; // edi@1
unsigned int v7; // eax@9
int v8; // ecx@13
int v9; // eax@23
int v10; // edi@23
int v11; // ST14_4@23
int v12; // ST18_4@23
int v13; // ST14_4@23
int v14; // ST18_4@23
int v15; // eax@27
int v16; // [sp+8h] [bp-70h]@22
char v17; // [sp+Ch] [bp-6Ch]@22
int v18; // [sp+10h] [bp-68h]@22
int v19; // [sp+14h] [bp-64h]@22
int v20; // [sp+18h] [bp-60h]@22
int v21; // [sp+1Ch] [bp-5Ch]@22
int v22; // [sp+24h] [bp-54h]@22
int v23; // [sp+44h] [bp-34h]@1
int v24; // [sp+48h] [bp-30h]@22
char v25; // [sp+4Ch] [bp-2Ch]@22
char v26; // [sp+78h] [bp+0h]@1
unsigned int v27; // [sp+DCh] [bp+64h]@1
v27 = (unsigned int)&v26 ^ dword_8C8C20;
v23 = (int)hWnd;
v6 = this;
if ( message == 1 )
{
v15 = dword_7F32CC();
hookHandle = SetWindowsHookExA(2, sub_41E792, 0, v15);
goto LABEL_28;
}
То есть если WM_CREATE, то ставим кейборд хук с вот таким колбеком:
Код:
int __stdcall sub_41E792(int actionCode, int keyCode, int lParam)
{
int result; // eax@4
if ( actionCode < 0 )
goto LABEL_13;
if ( actionCode == 46 && lParam == 0x2E0003 )
return 1;
if ( keyCode != 25 && (keyCode != 21 || dword_8DCE4C || dword_8DAC08) )
LABEL_13:
result = CallNextHookEx(hookHandle, actionCode, keyCode, lParam);
else
result = -1;
return result;
}
И всё бля, тут глухо, просто вызывается следующий хук. И вот вопрос такой: а можно как-то посмотреть эту таблицу хуков или колбэков? Или как определить, какой колбэк он сейчас вызовет?
Есть вариант самому хукнуть SetWindowsHookEx, но в рамках ГГ это для меня сейчас геморно.
Последний раз редактировалось dark; 11.10.2014 в 12:54.
Причина: Добавлено сообщение
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Тоже сторонник фаерфокса, уже отписывал где-то на рфч что он збс, а хром гавно.
Добавлено через 35 секунд
Что ты хочешь вообще?
Я хочу найти то место, где обрабатываются нажатия на клавиши в игре. У меня есть оконная процедура - в ней обрабатывается всё, кроме WM_KEYUP/DOWN/CHAR. Но она ставит кейборд хук, в котором в свою очередь тоже нифига нет, но он вызывает следующий хук. Вероятно как раз в следующем обработчике будет то, что мне нужно. Собственно, мне нужно его найти. Поэтому и спрашиваю, как работает CallNextHookEx
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Я хочу найти то место, где обрабатываются нажатия на клавиши в игре. У меня есть оконная процедура - в ней обрабатывается всё, кроме WM_KEYUP/DOWN/CHAR. Но она ставит кейборд хук, в котором в свою очередь тоже нифига нет, но он вызывает следующий хук. Вероятно как раз в следующем обработчике будет то, что мне нужно. Собственно, мне нужно его найти. Поэтому и спрашиваю, как работает CallNextHookEx
он не может просто так вызвать следующий хук, для этого этот хук должен быть установлен. Смотри в иде по коду ставится ли еще где то хук на клаву. CallNextHookEx, передает управление на следующий установленный хук. А там уже винда сама в своих внутренностях смотрит по таблице на какой фильтр передать управление. Список всех фильтров(хуков) можно посмотреть в той проге что паладин привел, правда у него там устанолено чтоб только глобальные фильтры показывались. Правой ПКМ на списке и там выбери отображение всех хуков(галку надо снять). В таблице видно будет какому процессу принадлежит хук, и адрес процедуры-обработчика. Если у твоей игры только 1 хук, то нажатия клавиш обрабатываются как то по другому, тогда смотри в сторону DirectInput.
Ну вообще, если бы тут не было SetWindowHookEx, оконная процедура по умолчанию вызывает DefWindowProc. Вроде там в конце цепочки этих хуков она и должна будет вызваться, могу ошибаться.
Вот её бы брякнуть
ну да
Код:
00697625 |> \FF75 14 PUSH [ARG.4] ; Default case of switch 00697429
00697628 |. 57 PUSH EDI
00697629 |. FF75 0C PUSH [ARG.2]
0069762C |. FF75 08 PUSH [ARG.1]
0069762F |. FF15 74347F00 CALL NEAR DWORD PTR DS:[7F3474] ; ntdll_1.NtdllDefWindowProc_A
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
значит обработка нажатий осуществляется в этом потоке.
dword_7F32CC() возвращает хэндл потока. Дальше тебе остается раскопать откуда она берет хэндл и где стартует поток и его адрес. Возможно даже в этой функции он и создается. Ну а дальше в этом потоке смотри что происходит.
Добавлено через 57 секунд
точнее не хэндл потока, а ThreadId
Последний раз редактировалось Тигрь; 11.10.2014 в 13:50.
Причина: Добавлено сообщение