Перехват api функций
|
|
vvova15 | Дата: Пятница, 15.04.2011, 17:18 | Сообщение # 1 |
Участник
Зарегистрирован: 24.04.2010
Группа: Пользователи
Сообщений: 83
Статус: Offline
| заинтересовал перехват апи функций мастдая. немного погуглив я нашел исходник, который показывает как перехватить функцию MessageBoxA и изменить gараметры, с которыми она была вызвана. вот исходник. там в каждый месаджбок дописывается реклама. для изучения и знакомства c хуками само то.
ICQ 185-398
|
|
| |
gravitas | Дата: Суббота, 29.10.2011, 21:42 | Сообщение # 2 |
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
| Попробовал сделать просто замену текста, вот что получилось: Code library mydll;
uses Windows;
type OldCode = packed record One: dword; two: word; end; far_jmp = packed record PuhsOp: byte; PushArg: pointer; RetOp: byte; end;
var SH: HHOOK; ProcAddr: Pointer; OldC: OldCode; JumpCode: far_jmp;
function NewMBX(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; var NewMess: PChar; W: DWORD; begin NewMess:='ss'; WriteProcessMemory(INVALID_HANDLE_VALUE, ProcAddr, @OldC, SizeOf(OldC), W); Result:=MessageBox(hWnd, NewMess, lpCaption, 0); WriteProcessMemory(INVALID_HANDLE_VALUE, ProcAddr, @JumpCode, SizeOf(far_jmp), W); end;
procedure ExHook; var B: DWORD; begin ProcAddr:=GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA'); ReadProcessMemory(INVALID_HANDLE_VALUE, ProcAddr, @OldC, SizeOf(OldCode), B); JumpCode.PuhsOp:=$68; JumpCode.PushArg:=@NewMBX; JumpCode.RetOp:=$C3; WriteProcessMemory(INVALID_HANDLE_VALUE, ProcAddr, @JumpCode, SizeOf(far_jmp), B); end;
function MsgProc(code:DWORD;wParam,lparam:DWORD):DWORD;stdcall; begin Result:=CallNextHookEx(SH,code,wParam,lparam); end;
procedure SetGlobalHookP; begin SH:=SetWindowsHookEx(WH_GETMESSAGE, @MsgProc, HInstance, 0); Sleep(INFINITE); end;
procedure DLLEntryPoint(dwReason:DWord); var ThrID: Cardinal; begin case dwReason of DLL_PROCESS_ATTACH: begin CreateThread(nil, 0, @SetGlobalHookP, nil, 0, ThrID); ExHook; end; end; end;
begin DLLPROC:=@DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end. Но чот никак(
Ночь спустя: Код правильный, все работает) Просто мессаджбокс вызывал в безоконном приложении.
TheDeduction Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
|
|
| |
FeniX | Дата: Воскресенье, 28.07.2013, 19:23 | Сообщение # 3 |
Был не раз
Зарегистрирован: 08.05.2013
Группа: Пользователи
Сообщений: 8
Статус: Offline
| Ребят, помогите хукнуть момент создания процесса (любого) и сразу же отследить его имя.Срочно надо. Пожалуйста)
|
|
| |
Neo | Дата: Понедельник, 29.07.2013, 10:46 | Сообщение # 4 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| FeniX, Подобные коды уже есть на форуме.Ну я повторюсь)))) Доступно только для пользователей Пример заодно не даёт запуститься calc.exe
|
|
| |
FeniX | Дата: Вторник, 30.07.2013, 13:14 | Сообщение # 5 |
Был не раз
Зарегистрирован: 08.05.2013
Группа: Пользователи
Сообщений: 8
Статус: Offline
| Neo, мне нужно перехватывать все процессы. И вычислять их имя. Так же расскажи как его подключить правильно. (дллку к проге). Буду очень благодарен.
Добавлено (29.07.2013, 12:29) --------------------------------------------- Так, я понял, что если я просто сделаю Result:=false; без каких либо условных операторов, то ни один процесс не будет запущен.
И подключать через LoadLibrary?
Добавлено (29.07.2013, 12:34) --------------------------------------------- И ещё, если не сложно, то можете поискать хук на перехват SuspendThread? (заморозка процесса) И при перехвате блокировать его и не дать заморозится приложению. Тоже срочно надо) Пожалуйста Ещё, не подскажете как сделать хук на клавиши типо Pause, Delete, Insert?Добавлено (30.07.2013, 13:14) --------------------------------------------- Ребят, ну помогите плиз)
Сообщение отредактировал FeniX - Понедельник, 29.07.2013, 14:34 |
|
| |
Neo | Дата: Вторник, 30.07.2013, 18:06 | Сообщение # 6 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| Цитата (FeniX) Neo, мне нужно перехватывать все процессы. Тут и так идёт перехват всех процессов,которые имеют окна.Из всех контролируется только калькулятор.Но ты можешь выбирать не только калькулятор.
|
|
| |
FeniX | Дата: Среда, 31.07.2013, 16:22 | Сообщение # 7 |
Был не раз
Зарегистрирован: 08.05.2013
Группа: Пользователи
Сообщений: 8
Статус: Offline
| Neo, Я уж понял.
Теперь мне нужно только 2 вещи: 1) Отследить процесс из которого идёт CreateProcess и перехватить SuspendThread.
Помогите чем можете) Буду ждать
|
|
| |
koan_093 | Дата: Понедельник, 25.12.2017, 20:54 | Сообщение # 8 |
Новичок
Зарегистрирован: 25.12.2017
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Всем привет, подскажите как подключить приведеный dll FeniX.
Сообщение отредактировал koan_093 - Понедельник, 25.12.2017, 20:55 |
|
| |