привет всем, подскажите пожалуйста, хочу перехватить функцию send из ws2_32 у iexplorer.exe, взять данные и вызвать оригинальную функцию, с MessageBoxA такая фишка проходит а вот с send почему то нет, там рекурсия какая то получается, в итоге у меня не получается вызвать оригинальную функцию. Вот код иджектируемой ДЛЛ: library Filter; uses Windows, SysUtils, advApiHook, WinSock, WinSock2, Dialogs, Classes; {$R *.res} var Truesend: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; function Newsend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; begin Truesend(s, Buf, len, flags); //ShowMessage(PChar(Buf)); end; begin MessageBoxA(0, 'Апи перехват', 'HookProc', 0); HookProc('ws2_32.dll', 'send', @Newsend, @Truesend); end. Далее код проекта, который импортирует ДЛЛ в процесс: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, advApiHook, tlHelp32; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var FProcessEntry32: TProcessEntry32; FSnapshotHandle: THANDLE; PID: Integer; bFind: boolean; hProcess: Thandle; begin bFind:=true; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := sizeof(FProcessEntry32); Process32First(FSnapshotHandle, FProcessEntry32); while bFind do begin if (ExtractFileName(FProcessEntry32.szExeFile) = 'iexplorer.exe') then begin bFind:=false; Break; end; if bFind=true then bFind:=Process32Next(FSnapshotHandle, FProcessEntry32); end; Sleep(2000); InjectDll(OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID), 'Filter.dll'); end; end.