用c#进行hook(数据拦截)时如何植入自己的函数?
我这几天看了一些资料。大概了解了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。是否我参数什么错了?
希望有类似经验的大侠给我答疑解惑!