Перехват 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
|
|
|
|
|