有一些程序如Proxifier可以强制exe使用代理。还有其他几个。但这些网站看起来都有些阴暗。我甚至不相信Proxifier ...所以我想知道这些程序是如何工作的。他们是如何做到的呢?是否有可用于执行此操作的WinAPI函数?或者您是否必须实际将代码注入流程?
我只能找到更改Windows全局代理的函数。但有些程序并不关心全球代理所说的内容,他们总是试图直接联系,即使它不可能......
答案 0 :(得分:3)
Proxifier基于LSP (layered service provider),但我个人从不喜欢这项技术,因为通常存在稳定性问题。但是,除了LSP之外还有其他适合实现相同功能的方法,你可以在这里找到网络过滤方法(包括LSP)的简短报道:https://www.ntkernel.com/ndis-hooking-drivers-and-legacy-windows-systems/,但是文档有点过时了我在早期的Windows XP曙光中写过它并没有涵盖取代TDI的WFP(Windows过滤平台)和取代NDIS中级和NDIS挂钩驱动程序的NDIS轻量级过滤器。这两种技术都是由Windows Vista和NDIS 6.0引入的。
答案 1 :(得分:1)
我认为Wininet.dll是从Windows上的用户模式程序访问HTTP的规范方法。 (Windows网络和Internet支持的文档是here。我不想查看所有文档,但我非常确定Wininet.dll是正确的文件)
执行每个进程代理的一种方法是编写一个类似于Wininet.dll的DLL(并且位于Windows的Wininet.dll之上)。您的Wininet将具有某种机制(注册表,配置文件等),以确定是否要代理特定进程。如果进程未被代理,则所有调用都将进入原始Wininet,但如果进程被代理,那么您的Wininet将进行重定向。
另一个有点类似的注入点是winsock层(ws2_32.dll)。 (回到Windows 3.1,Win95时代,TCP / IP堆栈供应商替换winsock.dll(ws2_32前身)是相当常见的。)Here's使用相同概念捕获winsock流量的情况层。该链接上的文章有一个很好的图表,说明了替换ws2_32.dll的概念和实现细节。
答案 2 :(得分:0)
执行此操作的现代方法是使用Windows筛选平台。
https://en.wikipedia.org/wiki/Windows_Filtering_Platform
https://docs.microsoft.com/en-us/windows/win32/fwp/windows-filtering-platform-start-page
Windows筛选平台(WFP)是一组API和系统服务 提供了用于创建网络过滤应用程序的平台。 WFP API允许开发人员编写与 分组处理在网络中的多个层进行 操作系统堆栈。 可以过滤网络数据,也可以 在到达目的地之前进行了修改。