Proxifier这类的代理工具的工作原理

时间:2022-06-02 00:25:50
Proxifier是一款功能非常强大的socks5客户端, 可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类似SOCKSCAP。(来源:百度百科)

因为项目需要,我需要写一个类似Proxifier的程序,不过只要支持socks5代理就可以了。具体的来说,就是让A.exe通过本地代理127.0.0.1:5050上网,B.exe可以理解为一个代理服务器,它一直监听着5050端口(TCP),说白了B.exe就是一个中间人,起转发的作用。上面说的可能有点复杂了,实际上我并不关心A.exe和B.exe,因为他们都是已经完成了的程序,我要做的内容是:让A.exe支持代理上网的功能,从127.0.0.1:5050代理上网。求思路。

抛砖引玉:
1.注入A.exe,hook劫持其send函数吗?

6 个解决方案

#1


工作原理就是代理啊,接受客户端请求,发给下游,接受下游应答,返回给客户端。

#2


引用 1 楼 qq120848369 的回复:
工作原理就是代理啊,接受客户端请求,发给下游,接受下游应答,返回给客户端。

亲爱的,我懂你的意思,你所说的就是我所说的B.exe,B就是个代理程序,起的是中间人的作用。但是,现在的情况是A.exe不支持代理,而我要做的工作是让A.exe支持代理。

#3


现在可以肯定的是,老版本的“Proxifier PE”(测试的时候用的V2.91)用的就是dll注入的方式,其注入到A.exe的dll名叫“PrxDrvPE.dll”。而对于当前最新版“Proxifier 3.21”来说,启动代理功能后,A.exe里是找不到“PrxDrvPE.dll”模块的,实际上最新版连个dll都没有,我猜测最新版是在R0层做的劫持。

如上所说,Proxifier之所以能让不支持代理的工具支持代理,用的就是劫持的思想。并且给出了两个思路:
1.(老版本)在R3层通过dll注入的方法将“PrxDrvPE.dll”注入到A.exe,通过hook技术劫持send,sendto函数(猜测),。。。
2.(新版本)在R0层通过过滤驱动的方式,劫持了A.exe进程发送的数据包,。。。

两者方法优缺点比较,前者容易开发,但稳定性是个问题(又是注入,有时hook的,很容易出问题的),如果A.exe防注入的话,则此方法失效;后者开发较为困难(熟悉驱动层编程的人相对来说少很多),而且驱动的稳定性如果出问题那么就是个大问题,不过如果开发出来了则基本没有失效的可能(除非这个程序自己实现了个协议栈,不过一般的程序员哪有这么nb!!)

以上纯属楼主在意淫!

#4


2014.12新发现,v3.21版是通过安装 WinSock LSP 模块,来让每个需要上网的程序都会自动加载dll
文件在C:\Windows\SysWOW64\ 与 C:\Windows\system32\ 下,文件名为Prx***.dll

以下路径的注册表可查看 WinSock LSP设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9

#5


同样在试图寻找 Proxifier 程序是如何实现全局代理的,看了上面 Windows 系统的描述,感觉 Proxifier 应该使用了比较底层的实现方式,但是不知道 OSX 是如何实现的。

#6


HOOK LSP WSACONNECT SENDTO等通过代理转发数据!QQ:1289671197

#1


工作原理就是代理啊,接受客户端请求,发给下游,接受下游应答,返回给客户端。

#2


引用 1 楼 qq120848369 的回复:
工作原理就是代理啊,接受客户端请求,发给下游,接受下游应答,返回给客户端。

亲爱的,我懂你的意思,你所说的就是我所说的B.exe,B就是个代理程序,起的是中间人的作用。但是,现在的情况是A.exe不支持代理,而我要做的工作是让A.exe支持代理。

#3


现在可以肯定的是,老版本的“Proxifier PE”(测试的时候用的V2.91)用的就是dll注入的方式,其注入到A.exe的dll名叫“PrxDrvPE.dll”。而对于当前最新版“Proxifier 3.21”来说,启动代理功能后,A.exe里是找不到“PrxDrvPE.dll”模块的,实际上最新版连个dll都没有,我猜测最新版是在R0层做的劫持。

如上所说,Proxifier之所以能让不支持代理的工具支持代理,用的就是劫持的思想。并且给出了两个思路:
1.(老版本)在R3层通过dll注入的方法将“PrxDrvPE.dll”注入到A.exe,通过hook技术劫持send,sendto函数(猜测),。。。
2.(新版本)在R0层通过过滤驱动的方式,劫持了A.exe进程发送的数据包,。。。

两者方法优缺点比较,前者容易开发,但稳定性是个问题(又是注入,有时hook的,很容易出问题的),如果A.exe防注入的话,则此方法失效;后者开发较为困难(熟悉驱动层编程的人相对来说少很多),而且驱动的稳定性如果出问题那么就是个大问题,不过如果开发出来了则基本没有失效的可能(除非这个程序自己实现了个协议栈,不过一般的程序员哪有这么nb!!)

以上纯属楼主在意淫!

#4


2014.12新发现,v3.21版是通过安装 WinSock LSP 模块,来让每个需要上网的程序都会自动加载dll
文件在C:\Windows\SysWOW64\ 与 C:\Windows\system32\ 下,文件名为Prx***.dll

以下路径的注册表可查看 WinSock LSP设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9

#5


同样在试图寻找 Proxifier 程序是如何实现全局代理的,看了上面 Windows 系统的描述,感觉 Proxifier 应该使用了比较底层的实现方式,但是不知道 OSX 是如何实现的。

#6


HOOK LSP WSACONNECT SENDTO等通过代理转发数据!QQ:1289671197