gpt4 book ai didi

delphi - Winsock 使用不同版本

转载 作者:行者123 更新时间:2023-12-01 17:52:18 24 4
gpt4 key购买 nike

我写了一个数据包拦截器来转储来自winsock的send/recv函数的信息,据我所知,这两个函数都位于ws2_32.dll中;该钩子(Hook)是通过向一个函数写入一个 jmp 来完成的,该函数记录我需要的信息,然后调用原始函数,钩子(Hook)本身工作得很好。

真正奇怪的是,我开始注意到我无法记录任何 RECV 调用,而 SEND 调用却被很好地拦截。

编写钩子(Hook)的函数如下:

procedure Setup;
var
lModuleHandle : dword;
lPlaceHolder : dword;
begin
lModuleHandle := LoadLibrary(MODULE_NAME);

OriginalSend := Dword(GetProcAddress(lModuleHandle, FUNCTION_SEND));
OriginalRecv := Dword(GetProcAddress(lModuleHandle, FUNCTION_RECV));

VirtualProtect(Ptr(OriginalSend), 5, PAGE_EXECUTE_READWRITE, lPlaceHolder);
VirtualProtect(Ptr(OriginalRecv), 5, PAGE_EXECUTE_READWRITE, lPlaceHolder);

PByte(OriginalRecv)^ := $E9;
PDword(OriginalRecv + 1)^ := Dword(@Hook_Recv) - OriginalRecv - 5;

PByte(OriginalSend)^ := $E9;
PDword(OriginalSend + 1)^ := Dword(@Hook_Send) - OriginalSend - 5;

Inc(OriginalSend, 5);
Inc(OriginalRecv, 5);
end;

我正在使用的程序(被拦截的程序)使用winsock 2,经过一些调试,我注意到我加载了wsock32.dll,并决定在其RECV上放置一个断点,而我在ws2_32.dll中有另一个断点发送;两个断点均已命中。

这意味着程序正在使用 ws2_32.dll 进行发送,使用 wsock32.dll 进行接收,这有什么意义吗?这种行为正常吗?

在不同的模块中编写钩子(Hook)相当容易,但由于它们应该是不同的,这让我相信出了什么问题,而且我的计算机中的一些其他应用程序(如火狐本身)也有同样的行为。

我添加此图像是为了更好地解释情况,看起来该程序链接到 wsock32 并最终得到一些 ws2_32 的函数。

An image to explain better the situation

最佳答案

wsock32.dll 适用于 Winsock 1.x,ws2_32.dll 适用于 Winsock 2.x。大多数应用程序链接到 ws2_32.dll,但旧版应用程序(和配置错误的应用程序)可能仍链接到 wsock32.dll。在现代系统上,wsock32.dll 在内部将其大部分功能重定向到 ws2_32.dllmswsock.dll .

您的目标应用程序正在链接到 wsock32.dll。您正在 Hook ws2_32.dll 中的函数。

在内部,wsock32.send() 直接映射到 ws2_32.send(),这就是 send() Hook 起作用的原因。但是,wsock32.recv()映射到ws2_32.recv(),这就是为什么你的recv() 钩子(Hook)不起作用。 wsock32.recv() 实际上调用了 ws2_32.WSARecv()

在 WinSock 2.x 中,标准 BSD 套接字函数仍然可用(send()recv() 等),但也有 Winsock 特定的函数还提供扩展函数(WSASend()WSARecv() 等),并且 Winsock 2.x 套接字还可以支持重叠 I/O 和 I/O 完成端口以及。因此,如果您确实想要在任何给定应用程序中 Hook 所有可能的数据交换途径,您可能必须 Hook BSD 函数、Winsock 扩展函数和 I/O 函数。但是,如果您仅针对一个特定应用程序,则只需 Hook 它实际调用的函数(在本例中为 send()WSARecv() )。

关于delphi - Winsock 使用不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641097/

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