用c#进行hook(数据拦截)时如何植入自己的函数?

shilang999 2010-10-18 04:11:45
我这几天看了一些资料。大概了解了hook进行网络封包截取的过程
因为是用c#语言,所以存在很大的困难。需要大家的帮忙。
我把问题罗列如下:
1、我只要本线程注入,已经搞定
SetWindowsHookEx(HookType.CallWndProc, myhookProc, IntPtr.Zero, GetCurrentThreadId());
这里的myhookProc就是我自己写的一个委托函数

2、我在委托函数myhookProc里面需要载入ws2_32.dll.找到recv和send函数。已经完成
hLib = LoadLibrary("ws2_32.dll");
pRecv = (UInt32)GetProcAddress(hLib, "recv");

3、我要在ws2_32.dll里把recv函数修改内容,让先跳转到我自定义的recv_new函数。
然后再返回执行ws2_32.dll里自带的recv函数。这样我就可以看到socket里的数据了。

4、目前卡在第3步。主要是ReadProcessMemory和WriteProcessMemory函数不好搞定。

我的理解:通过ReadProcessMemory读取recv函数前8个字节内容。先保存起来。
然后获取recv_new函数的地址,利用WriteProcessMemory,把跳转到recv_new地址的汇编代码写入recv的前8个字节里。
这样完成我预定的功能。
目前我的疑惑:a、如何在c#里面获取recv_new函数的内存地址
b、感觉我调试的时候,利用ReadProcessMemory读取的时候,读出来的都是0。是否我参数什么错了?

希望有类似经验的大侠给我答疑解惑!
...全文
460 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
huodeming 2011-04-05
  • 打赏
  • 举报
回复
我用C#成功HOOK了,但有一个问题 修改RECV数据老是没用,只能拦截或监听RECV,但修改无效,怪的事修改SEND完全正确

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧