procedure HookSend;
var
hModule: THandle;
dwSize: cardinal;
begin
hProcess := GetCurrentProcess;//返当前句柄虚拟句柄
hModule := LoadLibrary('ws2_32.dll');
//AddSend := MyGetProcAddress(hModule, 'send');
AddSend := GetProcAddress(hModule, 'send'); JmpCode.JmpCode := $B8;
JmpCode.MovEAX[0] := $FF;
JmpCode.MovEAX[1] := $E0;
JmpCode.MovEAX[2] := 0; ReadProcessMemory(hProcess, AddSend, @OldSendCode, 8, dwSize);
JmpCode.Address := @NewSend;
WriteProcessMemory(hProcess, AddSend, @JmpCode, 8, dwSize);
OldSend := AddSend;
end;
function NewSend(s: TSocket; var Buf; len,
flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
Data: TCMTDATA;
s_i: WinSock.TSockAddrIn;
tempSize: Integer;
itm: TListItem;
tmp:string;
begin
//这儿进行发送的数据处理
MessageBeep(1000); //简单的响一声
//调用直正的Send函数
WriteProcessMemory(hProcess, AddSend, @OldSendCode, 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @NewSend;
WriteProcessMemory(hProcess, AddSend, @JmpCode, 8, dwSize);
setlength(tmp,len);
move(buf,tmp[1],len);
//form1.Memo1.Lines.Add(tmp);
end; //form1.Memo1.Lines.Add(tmp); 这行代码 运行一段时间的话就会报内存错误 ,有什么方法,我把获取的数据,显示在窗口上,用了很多组件,只要显示就会报内存错误 ,要是我保存在配置文件,就不会.
var
hModule: THandle;
dwSize: cardinal;
begin
hProcess := GetCurrentProcess;//返当前句柄虚拟句柄
hModule := LoadLibrary('ws2_32.dll');
//AddSend := MyGetProcAddress(hModule, 'send');
AddSend := GetProcAddress(hModule, 'send'); JmpCode.JmpCode := $B8;
JmpCode.MovEAX[0] := $FF;
JmpCode.MovEAX[1] := $E0;
JmpCode.MovEAX[2] := 0; ReadProcessMemory(hProcess, AddSend, @OldSendCode, 8, dwSize);
JmpCode.Address := @NewSend;
WriteProcessMemory(hProcess, AddSend, @JmpCode, 8, dwSize);
OldSend := AddSend;
end;
function NewSend(s: TSocket; var Buf; len,
flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
Data: TCMTDATA;
s_i: WinSock.TSockAddrIn;
tempSize: Integer;
itm: TListItem;
tmp:string;
begin
//这儿进行发送的数据处理
MessageBeep(1000); //简单的响一声
//调用直正的Send函数
WriteProcessMemory(hProcess, AddSend, @OldSendCode, 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @NewSend;
WriteProcessMemory(hProcess, AddSend, @JmpCode, 8, dwSize);
setlength(tmp,len);
move(buf,tmp[1],len);
//form1.Memo1.Lines.Add(tmp);
end; //form1.Memo1.Lines.Add(tmp); 这行代码 运行一段时间的话就会报内存错误 ,有什么方法,我把获取的数据,显示在窗口上,用了很多组件,只要显示就会报内存错误 ,要是我保存在配置文件,就不会.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货