Скажите почему при перехвате апи с библиотеки WinSock перехват осуществляется великолепно в браузерах мазила и эксплорер но опера не подчиняется этому перехвату... неужели она не использует винсок? Помогите решить проблему...
| Код | library newsock; {$R *.res}
uses windows,winsock,Classes,SysUtils,dialogs;
type OldCode = packed record One: dword; two: word; end;
far_jmp = packed record PuhsOp: byte; PushArg: pointer; RetOp: byte; end;
var JmpSend: far_jmp; OldSend: OldCode; SendAdr: pointer; function newsend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; var Written: dword;
begin
WriteProcessMemory(INVALID_HANDLE_VALUE, SendAdr,@OldSend, SizeOf(OldCode), Written); ShowMessage('test'); Result := send(s,Buf,len, flags); WriteProcessMemory(INVALID_HANDLE_VALUE, SendAdr,@JmpSend, SizeOf(far_jmp), Written); end;
Procedure SetHook(); var hwsock32: dword; Bytes: dword; begin try hwsock32 := GetModuleHandle('wsock32.dll');// использование библиотеки WS2_32.dll ни к чему не привело SendAdr := GetProcAddress(hwsock32, 'send');
ReadProcessMemory(INVALID_HANDLE_VALUE, SendAdr, @OldSend, SizeOf(OldCode), Bytes); JmpSend.PuhsOp := $68; JmpSend.PushArg := @newsend; JmpSend.RetOp := $C3; WriteProcessMemory(INVALID_HANDLE_VALUE, SendAdr, @JmpSend, SizeOf(far_jmp), Bytes);
except end; end;
Procedure Unhook(); var Bytes: dword; begin try
WriteProcessMemory(INVALID_HANDLE_VALUE, SendAdr, @OldSend, SizeOf(OldCode), Bytes);
except end; end;
Function MessageProc(code : integer; wParam : word; lParam : longint) : longint; stdcall; begin CallNextHookEx(0, Code, wParam, lparam); Result := 0; end;
Procedure SetGlobalHookProc(); begin try SetWindowsHookEx(WH_GETMESSAGE, @MessageProc, HInstance, 0); Sleep(INFINITE); except end; end;
Procedure SetGlobalHook; var hMutex: dword; TrId: dword; begin try hMutex := CreateMutex(nil, false, 'DigitalHook'); if GetLastError = 0 then CreateThread(nil, 0, @SetGlobalHookProc, nil, 0, TrId) else CloseHandle(hMutex); except end; end;
procedure DLLEntryPoint(dwReason: DWord); begin try case dwReason of DLL_PROCESS_ATTACH: begin SetGlobalHook; SetHook; end; DLL_PROCESS_DETACH: UnHook; end; except end; end;
begin DllProc := @DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end.
|
|