S
sunnybaby
Unregistered / Unconfirmed
GUEST, unregistred user!
我HOOK了API的recv和send函数,使应用程序在调用recv和send函数时先调用我的函数,在我的函数myrecv和mysend中对数据进行处理后再调用真正的recv和send,部分代码如下
Library Hook;
.....
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Send函数
WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;
{---------------------------------------}
{函数功能:Recv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Recv函数
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf, len, flags);
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
...
我是个小菜菜,我的问题是:我如何知道应用程序传过来的var buf参数的类型,并以十六进制的格式保存在文件中或显示在其它可编辑控件中,如果我要编辑buf应该用什么函数呢?
我试过在MySend函数中声明一个text(还有Tinifile也试过)文件,将string(buf)写入文件,应用程序执行的时候会异常退出。
注:按上面的代码执行应用程序运行正常,在收发数据包时也可以响一声。
Library Hook;
.....
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Send函数
WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;
{---------------------------------------}
{函数功能:Recv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Recv函数
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf, len, flags);
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
...
我是个小菜菜,我的问题是:我如何知道应用程序传过来的var buf参数的类型,并以十六进制的格式保存在文件中或显示在其它可编辑控件中,如果我要编辑buf应该用什么函数呢?
我试过在MySend函数中声明一个text(还有Tinifile也试过)文件,将string(buf)写入文件,应用程序执行的时候会异常退出。
注:按上面的代码执行应用程序运行正常,在收发数据包时也可以响一声。