gpt4 book ai didi

c++ - WinAPI 函数 Hook 以捕获网络

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:13 25 4
gpt4 key购买 nike

我想编写 Hook 来打印某个进程的发送/接收数据(即网络数据、发送和接收的数据包)。我可以放置该 Hook 的最低级别是什么(可能是最终由下面详述的函数在内部调用的一个或两个特定函数)?

WS2_32!WSARecv
WS2_32!WSARecvFrom
WS2_32!recv
WS2_32!recvfrom
WS2_32!send
WS2_32!sendto
WS2_32!WSASend
WS2_32!WSASendDisconnect
WS2_32!WSASendMsg
WS2_32!WSASendTo

谢谢

最佳答案

我假设您不想重新发明轮子,所以请获取像 MinHook https://github.com/TsudaKageyu/minhook/ 这样的 Hook 库或微软绕道 https://www.microsoft.com/en-us/research/project/detours/minhook 的小例子

int YourDetourFuncHere(
SOCKET s,
const char *buf,
int len,
int flags
){
// your code here.
return RealFunction(s, buf, len, flags);
}
void hookex(){
MH_Initialize();
MH_CreateHook("ws2_32.dll", "send", YourDetourFuncHere, &RealFunction);
MH_EnableHook(MH_ALL_HOOKS);
}

这只是一种伪代码,因为您不应该首先复制和粘贴;)并且您应该根据 libs 文档添加更多错误检查。

如果您想查看全局的所有流量,请使用 NDIS 驱动程序并将数据发送到用户模式。您可以在用户模式下拥有一个线程,该线程将继续调用 ReadFile() 并在驱动程序端设置 IRP_MJ_READ 并从驱动程序获取数据包数据。同样对于其他浏览器,它可能会有所不同。例如,Firefox 可能是 PR_Write,而其他此类程序或浏览器可能使用不同的协议(protocol)等,因此根据您的目标,您应该查看您希望放置钩子(Hook)的位置。

关于c++ - WinAPI 函数 Hook 以捕获网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54927237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com