导入的哪些变体允许 exe 连接到 Internet?

What variations of imports allow an exe to connect to the internet?

EXE 和 DLL 文件通常带有大量导入,其中一些指向位于 System32(Win API)中的文件,一些指向当前目录中的文件。在某些时候,应用程序喜欢在线检查更新、发送客户反馈并向应用程序开发人员发送崩溃报告,因此应用程序需要初始化互联网通信。

我搜索了 WinAPI docs 并发现 wininet.dll 中的 InternetOpenA 导出初始化了通过互联网的通信,但是....我做了一些测试并发现这并不总是正确的。某些应用程序仍然可以连接到互联网,而无需 wininet.dll 列为导入。

这怎么可能?这些应用程序是否带有自己的 DLL 以连接到 Internet,从而不依赖于 wininet.dll?

WindowsAPI 中有许多 HTTP(S) 堆栈,还有大量开源和私有堆栈。

对于这些 HTTP 客户端库的绝大多数实现,它们都需要访问 Windows 中的 TCP/IP 堆栈,而其主要接口是 Winsock2 stack( ws2_32.dll).

Windows 中基于 Winsock 构建的 HTTPS 堆栈包括以下内容:

构建在 Winsock 之上的其他一些第 3 方实现包括:

可能还有很多其他人。

此外,许多编程框架,包括 .NET、Java、Python 等...也有自己的套接字和 http 库。

没有要求应用程序必须使用这些堆栈中的任何一个 - 它们可以在 Windows 套接字库的顶部滚动自己的,或者理论上 thunk 到网络堆栈的较低部分。