请教高手: 截取网络程序的网络数据封包的@MySend、 @MyRecv不执行(100)

  • 主题发起人 主题发起人 江上游者
  • 开始时间 开始时间

江上游者

Unregistered / Unconfirmed
GUEST, unregistred user!
在发送与接收代码的函数是在HOOK.DLL中, 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; 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; 在HOOK.DLL获得的数据MySend(),MyRecv()中??如何写获得数据包的语句, 在unit fmMain中得到HOOK.DLL获得的数据,如何写获得数据包的语句。 请高手给写一些代码,现在数据包的数据传不到unit fmMain,我只需要获得(复制)数据包传送到unit fmMain中,数据的能够在主窗体上显示,谢谢。
 
可以自己定义一个数组,然后CopyMemery到数组里面,然后在处理
 
我做过用 SendMessage WM_COPYDATA 将数据从HOOK.DLL中传递到主程序里来
 
Buf^ 就是你要的东西
 
请高手给几句例子,在HOOK.DLL中我没有传送出来。
 
有没有高手给写几句
 
看你这么执着,留下QQ加你
 
在一个自己的进程中运行的话 ,可以直接把主窗体的 一个函数指针传近来,让dll 调用数据就出去了 ,要是远程dll非自己进程的,要做消息通知的方法比较多 内容隐射文件,加消息等等 顺便宣传下 自己用delphi搞的对战平台 unvsonline.com 大家可以自己架这玩
 
to delphfansHOOK.DLL是在我的程序中里,我只使用HOOK.DLL捕获目标程序中的网络数据,目前就是捕获不到,请你给详细一些,谢谢。
 
HOOK.DLl 在自己程序里 就要设置网卡为混杂模式 这个你可以找资料查下 有代码的,然后根据程序开大端口就可以 这个有点象防火墙的模式!!!
 
to delphfans我在HOOK.DLl中折腾了一些时间,数据发出是利用原程序,主要是能够捕获网络返回的数据,没有搞明白。请你介绍使用简单、容易的方法,可能是我的方法不合适,没有弄出来,谢谢。
 
跟混杂模式没关系。LZ基础太差,除非给现成代码,不然不可能会。
 
混杂模式 所有的数据包都可以获取,可以根据端口处理。
 
来自:delphfans, 时间:2010-5-13 16:38:14, ID:3993127 | 编辑在一个自己的进程中运行的话 ,可以直接把主窗体的 一个函数指针传近来,让dll 调用数据就出去了 ,要是远程dll非自己进程的,要做消息通知的方法比较多 内容隐射文件,加消息等等 顺便宣传下 自己用delphi搞的对战平台 unvsonline.com 大家可以自己架这玩 可以看下 hook api 很简单的
 
procedure HookAPI; var DLLModule: THandle; dwSize: cardinal; begin ProcessHandle := GetCurrentProcess; DLLModule := LoadLibrary('ws2_32.dll'); AddSend := GetProcAddress(DLLModule, 'send'); //取得API地址 AddRecv := GetProcAddress(DLLModule, 'recv'); JmpCode.JmpCode := $B8; JmpCode.MovEAX[0] := $FF; JmpCode.MovEAX[1] := $E0; JmpCode.MovEAX[2] := 0; ShowMessage(‘在这里可以传出信息’); //在这里可以传出信息???????-------------?????????????????ReadProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize); JmpCode.Address := @MySend; WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize); //修改Send入口 ReadProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize); JmpCode.Address := @MyRecv; WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize); //修改Recv入口 OldSend := AddSend; OldRecv := AddRecv; end;function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; 中传不出信息来
 
答案一早就告诉你了,有时间顶,不如老老实实去研究。
 
建立内存映射文件啊,直接从该指针读取数据,但是因为频繁调用,可能丢包! 至于建立内存映射的方法,本论坛多得是烂了
 
一个SendMessage就可以将信息传出了,---太累了,没有兴趣搞
 
内存映射已建立,在procedure HookAPI; 在第一个ReadProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize); 上面可以通过内存映射把设定数据传出,后面function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; 函数中没有获得数据,也就是说没有调用MySend、 MyRecv函数,怎么样才传出来。可以说是调用MySend、 MyRecv函数的问题,哪怕是乱码也没有,何况数据传出。 介绍在procedure HookAPI中能调用MySend、 MyRecv函数的方法。
 
"也就是说没有调用MySend、 MyRecv函数"这个只是你自己说的。
 
后退
顶部