程序
DLLData^.chHook := SetWindowsHookEx(WH_GETMESSAGE, @HookProc, Hinstance, ThreadID); function Sock2_RecvFrom(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
var dwSize: cardinal;
const Index=1;
begin
//1
MyDataMessage(s,len, PChar(@Buf), @from, nil, dtRecvFrom);
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].FunJmp, 8, dwSize);
Result := TSock2_RecvFrom(Myhook[index].FunProc)(s, buf, len, flags,from,fromlen);
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].MyJmp, 8, dwSize);
//2
end;
MyDataMessage是我处理数据的过程,Sendto是正常的,但RecvFrom有点问题,MyDataMessage放到现在这个位置,Hook能截获RecvFrom,数据基本正常,只是长度不对,总是固定的532,正常数据+无用信息,但只要放到后面(2位置)就无法截获RecvFrom,即使在2位置直接放置SendMessage也不会被执行,怎么会是这样呢?
SendTo倒是放到任何位置都没问题,
DLLData^.chHook := SetWindowsHookEx(WH_GETMESSAGE, @HookProc, Hinstance, ThreadID); function Sock2_RecvFrom(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
var dwSize: cardinal;
const Index=1;
begin
//1
MyDataMessage(s,len, PChar(@Buf), @from, nil, dtRecvFrom);
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].FunJmp, 8, dwSize);
Result := TSock2_RecvFrom(Myhook[index].FunProc)(s, buf, len, flags,from,fromlen);
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].MyJmp, 8, dwSize);
//2
end;
MyDataMessage是我处理数据的过程,Sendto是正常的,但RecvFrom有点问题,MyDataMessage放到现在这个位置,Hook能截获RecvFrom,数据基本正常,只是长度不对,总是固定的532,正常数据+无用信息,但只要放到后面(2位置)就无法截获RecvFrom,即使在2位置直接放置SendMessage也不会被执行,怎么会是这样呢?
SendTo倒是放到任何位置都没问题,
解决方案 »
- Locate 简单问题
- 如何动态修DB数据表字段的max.value及min.value值
- 动态创建treeview的双击事件怎么写,急,在线等
- 请教各位!帮delphi开发一个成绩管理系统如何入手?最好是C/S
- 小弟想找工作!熟悉delphi+sql server200,开发过两个项目!在上海!请各位大侠出点意见
- 数据库: 如何将sql server数据库导出到access??
- 散分!请问用过D4后又用过D6的大哥,从D4升级到D6后编译同一个项目所产生的EXE在运行时可能会在哪些方面不同?
- 怎樣求表中的記錄數量﹖
- Delphi7可以用Delphi7开发出来吗
- 如何用Delphi把文本文件中的数据写入到数据库中
- barcode vcl能在delphi2007上安装么?
- 两个rzpanel上下重叠显示的问题
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].FunJmp, 8, dwSize);
Result := TSock2_RecvFrom(Myhook[index].FunProc)(s, buf, len, flags,from,fromlen);
WriteProcessMemory(ProcessHandle, Myhook[index].TmpProc, @Myhook[index].MyJmp, 8, dwSize);
//这时buf已经取到数据了, Result 这个是长度吧
MyDataMessage(s,len, PChar(@Buf), @from, nil, dtRecvFrom);