如何强制特定进程使用代理进行networking通信

有一些像Proxifier这样的程序可以强制exe使用代理。 还有一些其他的。 但是这些网站都显得有些阴暗。 我甚至不信任Proxifier tbh …所以我想知道这些程序是如何工作的。 他们是如何做到的呢? 是否有一个WinAPI函数可以用来做到这一点? 或者你是否真的需要将代码注入进程

我只能findfunction来更改Windows的全局代理。 但有些程序并不关心全局代理说什么,他们总是直接连接,即使这是不可能的…

Proxifier基于LSP(分层服务提供商) ,但是由于经常遇到稳定性问题,我个人从来不喜欢这种技术。 但是,除了LSP之外,还有其他可能的方法可以实现相同的功能,您可以在这里找到一个简短的网络过滤方法(包括LSP): https : //www.ntkernel.com/ndis-hooking-drivers-and- legacy-windows-systems / ,但是这个文档有一点点过时,我已经在早期的Windows XP破晓的时候写了它,它不包括替换TDI的WFP(Windows Filtering Platform),NDIS Lightweight过滤器,取代了NDIS中级和NDIS挂钩驱动程序。 这两种技术都是由Windows Vista和NDIS 6.0一起引入的。

我认为Wininet.dll是从Windows上的用户模式程序访问HTTP的规范方法。 (Windows网络和互联网支持文件在这里 ,我不想通过所有的文件,但我很确定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前身)是相当常见的。) 以下是在winsock层捕获流量的情况。 链接中的文章有一个很好的图,说明了替换ws2_32.dll的概念以及实现细节。