Четверг, 28.03.2024, 13:07 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024  
delphicode » Delphi » Windows API в Delphi » Перехват api функций
Перехват api функций
vvova15Дата: Пятница, 15.04.2011, 17:18 | Сообщение # 1
Участник
Зарегистрирован: 24.04.2010
Группа: Пользователи
Сообщений: 83
Статус: Offline
заинтересовал перехват апи функций мастдая. немного погуглив я нашел исходник,
который показывает как перехватить функцию MessageBoxA и изменить gараметры, с которыми она была вызвана.
вот исходник. там в каждый месаджбок дописывается реклама.
для изучения и знакомства c хуками само то.
Прикрепления: adwarebox.rar (14.3 Kb)



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
 
delphicode » Delphi » Windows API в Delphi » Перехват api функций
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz