首页
论坛
课程
招聘
[求助]请问c#借助dll实现了hook,但是c#如何获取hook的数据呢?
2020-7-30 23:10 2232

[求助]请问c#借助dll实现了hook,但是c#如何获取hook的数据呢?

2020-7-30 23:10
2232

求教大佬们一个问题。
最近在搞一个网页游戏的封包解析,我是用c#写的。然后需要hook socket。
最初我是用easyhook实现的,但是发现不知道为啥经常莫名其妙的断开hook(经过测试,运行大量代码时更加容易断开hook,但是注释掉那些影响效率的代码后,hook的稳定性会有所提高,但偶尔也会断开hook)。不过这个不是我提问的要点。
我因此弃用了easyhook,参考《加密与解密》,改用inline hook,用c++额外写了一个dll用于hook socket中的send和recv。
目前我写的这个dll可以稳定地实现hook,但是有个问题,我在c#中如何才能获取到这个dll中的hook的数据呢?这里特指如何获取recv和send的数据。
以recv为例,游戏客户端调用ws2_32.dll中的recv函数来接受数据,由于hook了,所以跳转至dll中的My_Recv继续执行。

int WINAPI My_Recv(SOCKET s, char *buf, int len, int flags)
{
    PFN_Recv OriginalRecv = (PFN_Recv)RecvHookData.pfnTrampolineFun;
    int ret = OriginalRecv(s, buf, len, flags);
    if (ret > 0) {
        printf("recvnum : %d\n", recvnum);
        printf("recvret : %d\n", ret);
        PrintHexDump(buf, ret);
        recvnum++;
    }
    return ret;
}

上面代码中的buf就是我需要的recv的数据。但是这个数据只能由dll访问,我的c#程序该如何才能拿到这个数据呢?
有个朋友让我通过dll将数据写入文件,然后c#读文件,感觉这个效率很低啊,请问大佬们有没有其他可行的方案呢?谢谢~


[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

最后于 2020-7-30 23:10 被iyzyi编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 2699
活跃值: 活跃值 (1731)
能力值: ( LV8,RANK:121 )
在线值:
发帖
回帖
粉丝
iyzyi 活跃值 2 2020-7-30 23:22
2
0
或者我换句话说:当dll处理完一次hook(比如说recv了一次)后,该如何向c#告知这一事件。
雪    币: 2822
活跃值: 活跃值 (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cattyabcd 活跃值 2020-7-31 00:01
3
0
c#建立一个套接字和dll通信
雪    币: 1040
活跃值: 活跃值 (345)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Rookietp 活跃值 2020-7-31 01:31
4
0
createfilemappingA
雪    币: 2699
活跃值: 活跃值 (1731)
能力值: ( LV8,RANK:121 )
在线值:
发帖
回帖
粉丝
iyzyi 活跃值 2 2020-7-31 02:57
5
0
谢谢大佬们给出的多个思路~不过我刚刚用回调函数实现了我的需求,参考了这个项目:https://github.com/mathes006/CSharp_Join_CPlus
雪    币: 3653
活跃值: 活跃值 (416)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
逻辑错误 活跃值 1 2020-7-31 09:21
6
1
hook用的dll再导出一个函数, 函数里面申明几个static类型的变量, 这样dll也能访问, C#也能访问. 
可以用C#写一个回调, 每次hook的dll做完事, 就调用回调通知C#, 还有就是 dll 申请的内存, 最好由dll 释放, 因为其他模块释放可能会崩溃.
你应该就是要简单能用的, 邮槽,管道,sendmessage什么的用起来太啰嗦.
雪    币: 3698
活跃值: 活跃值 (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 活跃值 2020-7-31 11:08
7
0
mark一下 。。。。
游客
登录 | 注册 方可回帖
返回