代码如下:{---------------------------------------}
{函数功能:WSARecv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyWSARecv( s : TSocket; lpBuffers : PWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : PWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
var
dwSize: cardinal;
Datalong:Integer;begin
//这儿进行接收的数据处理
WriteProcessMemory(ProcessHandle, AddWSARecv, @OldWSARecvProc[0], 8, dwSize);
Datalong:=OldWSARecv( s,lpBuffers,dwBufferCount,lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
recvout(lpBuffers,'接收 WSARecv',10); //这个地方,数据的长度我不知道怎么获取;
Result :=Datalong;
JmpWSARecvCode.Address := @MyWSARecv;
WriteProcessMemory(ProcessHandle, AddWSARecv, @JmpWSARecvCode, 8, dwSize);
end;
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
recvout(Buf,'发送 Send',len); //还有这个地方的len
WriteProcessMemory(ProcessHandle, AddSend, @OldSendProc[0], 8, dwSize);
Result :=OldSend(S, Buf, len, flags);
JmpsendCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpsendCode, 8, dwSize);
end;这是我写的收数据方法和发数据方法,现在就是获取不到数据的长度,请大家看一下。
{函数功能:WSARecv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyWSARecv( s : TSocket; lpBuffers : PWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : PWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
var
dwSize: cardinal;
Datalong:Integer;begin
//这儿进行接收的数据处理
WriteProcessMemory(ProcessHandle, AddWSARecv, @OldWSARecvProc[0], 8, dwSize);
Datalong:=OldWSARecv( s,lpBuffers,dwBufferCount,lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
recvout(lpBuffers,'接收 WSARecv',10); //这个地方,数据的长度我不知道怎么获取;
Result :=Datalong;
JmpWSARecvCode.Address := @MyWSARecv;
WriteProcessMemory(ProcessHandle, AddWSARecv, @JmpWSARecvCode, 8, dwSize);
end;
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
recvout(Buf,'发送 Send',len); //还有这个地方的len
WriteProcessMemory(ProcessHandle, AddSend, @OldSendProc[0], 8, dwSize);
Result :=OldSend(S, Buf, len, flags);
JmpsendCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpsendCode, 8, dwSize);
end;这是我写的收数据方法和发数据方法,现在就是获取不到数据的长度,请大家看一下。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货