网站密度,单页面视频网站模板,网站根目录验证文件,c 手机版网站开发前言
项目中遇到这样一个需求#xff0c;需要动态切换指定进程Sockets5代理IP#xff0c;目前了解到可通过编写驱动拦截或者劫持LSP实现#xff0c;LSP劫持不太稳定#xff0c;驱动无疑是相对较好的解决方案#xff0c;奈何水平不足便有了这蹊径。
初步尝试…前言
项目中遇到这样一个需求需要动态切换指定进程Sockets5代理IP目前了解到可通过编写驱动拦截或者劫持LSP实现LSP劫持不太稳定驱动无疑是相对较好的解决方案奈何水平不足便有了这蹊径。
初步尝试
首先想到的是通过代码设置系统全局代理让目标进程乖乖的看过来 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public static void SetProxy(string ip_port) { //打开注册表 RegistryKey regKey Registry.CurrentUser; string SubKeyPath Software\Microsoft\Windows\CurrentVersion\Internet Settings; RegistryKey? optionKey regKey.OpenSubKey(SubKeyPath, true); //更改健值设置代理 optionKey?.SetValue(ProxyEnable, 1); if (ip_port.Length 0) { optionKey?.SetValue(ProxyEnable, 0); } optionKey?.SetValue(ProxyServer, socks5://ip_port); optionKey?.SetValue(ProxyOverride, localhost;127.0.0.*;local); // Configure the WebRequest to use the SOCKS5 proxy WebRequest.DefaultWebProxy new WebProxy(socks5:// ip_port, true, null); //激活代理设置 InternetSetOption(0, 39, IntPtr.Zero, 0); InternetSetOption(0, 37, IntPtr.Zero, 0); }
设置后发现系统代理确实设置成功并生效了浏览器查询一番发现走的是自己设置的代理IP了高高兴兴的打开目标应用发现网络请求仍然走本地了反复尝试了多次仍未成功不确定是不是应用层设置系统代理的姿势不对知道的小伙伴欢迎指点一二。
有捷径
自写代码行不通便寻思有没有更简单的方案一阵胡思乱想后突然想起曾经玩游戏用过的代理软件Proxifier当初不就通过这玩意实现进程IP访问吗一阵操作后发现该软件确实能够拦截目标进程的所有网络请求 暗自窃喜下毕竟前进了一步嘛回望初心咋是想通过自己的代码动态切换目标进程网络请求IP怀着敬畏之心寻找这大名鼎鼎的代理软件的API接口如果说有接口能够供我们的程序调用那不就借尸还魂了嘛。
再出发
真不能报太大希望一阵骚操作后并这调皮的软件没有发现任何可以调用的接口失望过后不能前功尽弃既然他不给接口那就给他增加个接口胡乱研究一番后发现有两种方式可以实现 1、通过界面修改代理IP 2、通过导入配置文件 由于配置文件里面记录了代理IP及代理规则等信息咋只用在自己的代码中修改配置文件并主动让Proxifier加载一次该配置不就OK了嘛。
上菜
附加Proxifier并在ReadFile上下断文件》导入配置文件: 多次堆栈回溯后来到打开文件选择框并导入配置的关键代码处: 提取出导入配置文件部分ASM 1 2 3 4 5 6 7 8 9 00337224 | E8 09A6F6FF | call proxifier.sub_2A1832 | [0x4A7360] 00337229 | FF75 F0 | push dword ptr ss:[ebp-10] | 配置文件路径 0033722C | 8B78 04 | mov edi,dword ptr ds:[eax4] | 0033722F | 8B07 | mov eax,dword ptr ds:[edi] | 00337231 | 8BB0 A4000000 | mov esi,dword ptr ds:[eaxA4] | 00337237 | 8BCE | mov ecx,esi | 00337239 | FF15 204D4600 | call dword ptr ds:[464D20] | 0033723F | 8BCF | mov ecx,edi | esi[[[0x4A7360]4]]a4 00337241 | FFD6 | call esi | 载入配置文件
测试调用过程中发现需要在主线程中调用才能生效轮番折腾后将ASM代码封装在Dll中并将Dll注入到Proxifier进程中调用成功。
收工
等等不忘初心,我们要通过自己的代码动态切换目标进程网络请求IP好像还差了点啥捋一捋整个流程吧 1、利用代理软件Proxifier设置指定进程走sockets5代理ok 2、在自己的工程中通过编写代码动态将代理IP写入Proxifier配置文件,ok 3、由于Proxifier没有提供接口加载配置文件所以通过编写dll代码并注入到Proxifier中主动调用加载配置文件的call,ok 4、自己的工程和Proxifier通过共享内存传递需要动态设置的代理IP,哦就是你了。 哦还差点什么吗没有如图: