1,183
社区成员
发帖
与我相关
我的任务
分享
uses
SysUtils, classes, windows, madCodeHook, winsock2;
var
oldWSARecv: function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
var lpNumberOfBytesRecvd: DWORD; var lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
function SetHook: Boolean;
implementation
procedure myRecv(buf: PChar; len: integer);
var
ss: string;
//PacketDispose: TPacketDispose;
begin
//PacketDispose := TPacketDispose.Create(buf, len); // 通过其它线程输出以免阻塞
ss := strPas(buf);
Form1.Memo1.Lines.Add(IntToStr(lpNumberOfBytesRecvd) + '------------- >' + #13#10 + ss);
end;
function myWSARecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
var lpNumberOfBytesRecvd: DWORD; var lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
begin
myWSARecv := oldWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionROUTINE);
myRecv(lpBuffers.buf, lpNumberOfBytesRecvd);
end;
function SetHook: Boolean;
begin // 由于我是Hook程序本身(程序里面有TWebBrowser控件),所以没有做DLL
HookAPI('ws2_32.dll', 'WSARecv', @myWSARecv, @oldWSARecv);
end;