关于HOOK API的问题,也许只是数据操作的问题,100分求救~~~
我在网上找了一段用于hook ws2_32.dll中recv和send函数的api,编译之后可以正常使用,但是有一个地方有问题,想了两天不知道怎么改才好,麻烦大家帮我看看。
{---------------------------------------}
{函数功能:Recv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//这儿进行接收的数据处理
TByteArray(Buf)[0] := 254;
//调用直正的Recv函数
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf, len, flags);
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
上面这个函数,实现了hook recv函数的功能,其中:
TByteArray(Buf)[0] := 254;
是我对该字节数组的修改,也就是说不管收到什么,都把第一位改成FE,我这样改了之后,通过写log,发现TByteArray(Buf)[0]确实是变了,但是再交给recv函数处理后,recv接收到的Buf还是我修改以前的。
该DLL确实已经实现了hook功能,就是这里我弄不明白,谁知道为什么的给我讲一下啊。