[开源] 2 天 vibe 了个进程注入代理 Proxifier - 有编程大模型用 Python ,可以做一些以前不敢想的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录

独立开发者节点

愿每一位独立开发者都能保持初心,获得一个好的结果.

sbsummer
1D

[开源] 2 天 vibe 了个进程注入代理 Proxifier - 有编程大模型用 Python ,可以做一些以前不敢想的

  •  
  •   sbsummer 1 月 16 日 1051 次点击
    这是一个创建于 99 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在用 Antigravity 反代,使用的 Proxifier 让 Antigravity 可用(代理的 Tun 模式不太方便),然后注册 10 多个 gemini pro 账号,通过 Antigravity-Manager 来反代出 Claude Code 4.5 opus 轮流使用

    https://i. imgur .com/k9e6oLi.png

    一周几乎写了以前几周的东西,这些全部都是改用 C++ TUI/QT 做得,弃用了 python

    分布式打板器

    https://i. imgur .com/ZDVVuVF.png

    新闻自动找相关股并预测龙头

    https://i. imgur .com/1PiQTj7.png

    龙头选股和智能体解答

    https://i. imgur .com/fVuFffa.png

    网格交易工具

    https://i. imgur .com/0IVCt82.png

    除了睡觉就是和 CC 聊天,等待过程就是看 x ,无意中在 x 中看到一篇文章: https://x.com/mntruell/status/2011562190286045552

    大概意思是几天手搓了一个浏览器内核,包括:HTML 解析、CSS 级联、布局、文本整形、绘制和自定义 JS 虚拟机

    这 tm 太酷了,其实现在有了 coding 大模型,什么都可以敢做了,而且没必要经常用 python 了,所以决定用 C++ QT 来复现 Proxifier 来作一些更深入的尝试,100% AI 来开发一个以前不敢碰的更深层的东西,于是有了下面 2 天搓出来的开源项目: https://github.com/4111y80y/OpenProxifier

    https://i. imgur .com/v8ugfu9.gif

    下面的记录是让 gemini cli 根据我 claude code 的 jsonl 聊天文件生成的,有兴趣的可以看看这个开发过程

    [开源] 用 C++ Qt + Winsock Hook (Detours) 撸了一个 Windows 进程级代理工具 OpenProxifier

    大家好,最近为了给自研的反代工具 Antigravity 做配套的透明代理功能,突发奇想撸了一个 Windows 下的进程级代理工具。虽然市面上已经有 Proxifier 这样成熟的神器,但为了更轻量、可控(只针对特定进程),且能深度集成到我们自己的生态中,决定自己造个轮子。

    项目取名 OpenProxifier,目前核心功能( TCP/UDP )均已实现,特来 V2EX 分享一下开发过程中的技术选型和踩坑经历。

    项目背景与目标

    目标很明确:实现一个“迷你版”Proxifier ,指定任意 exe (比如我们的 Antigravity ),让它所有的 TCP/UDP 流量自动走 SOCKS5 代理,且对目标程序完全透明。

    项目地址: https://github.com/4111y80y/OpenProxifier

    技术架构

    起初考虑过 WinDivert (内核层拦截),但因为驱动签名太贵且调试蓝屏风险大,最终选择了 用户层 DLL 注入 + API Hook 的方案。

    • GUI 框架: Qt 6 (C++)
    • Hook 库: Microsoft Detours (稳定、成熟)
    • 构建工具: CMake + vcpkg
    • 注入方式: CreateProcess (Suspended) -> 注入 DLL -> Resume Thread

    核心技术实现

    1. 启动与注入

    为了确保不漏掉任何流量,我们不使用“附加到运行中进程”的方式,而是接管启动过程: 使用 CREATE_SUSPENDED 标志启动目标进程,此时进程的主线程是挂起的。然后通过 Remote Thread 注入我们的 ProxyDLL,最后再 Resume 进程。

    2. Winsock Hook (Detours)

    我们在 DLL 加载时(DllMain)初始化 Detours ,Hook 了以下关键 API:

    • 连接控制: connect, WSAConnect 在这里拦截连接请求,与 SOCKS5 服务器建立握手。
    • 数据传输 (TCP): send, recv, WSASend, WSARecv 拦截应用层数据,通过 SOCKS5 隧道转发。
    • 数据传输 (UDP): sendto, recvfrom, WSASendTo, WSARecvFrom 实现了完整的 SOCKS5 UDP Associate 流程,支持 UDP 转发。
    • 其他: select, WSAPoll 等 IO 复用函数也做了相应处理。

    3. Antigravity 反代测试

    为了验证代理效果,我们专门编写了一个配套的 Antigravity 程序。它会强制忽略系统代理设置( System Proxy ),直接发起 HTTP 请求。

    • 测试逻辑: 启动 OpenProxifier -> 监控 Antigravity.exe -> 启动 Antigravity -> 点击 "Check IP"。
    • 结果: 虽然 Antigravity 写死了“直连”,但经过我们注入后,显示的 IP 变成了代理服务器的 IP ,验证成功。

    开发踩坑记录

    1. 32 位与 64 位的兼容性地狱

    注入器是 64 位的,但目标程序可能是 32 位。64 位进程无法加载 32 位 DLL ,反之亦然。 解决方案: 编译了两套 DLL (MiniProxifierHook_x64.dllMiniProxifierHook_x86.dll)。注入器通过解析目标 PE 头 (Machine 字段) 判断架构,自动选择对应的 DLL 进行注入。

    2. Electron/Chromium 应用的崩溃

    Hook 普通 Win32 程序很稳,但一碰到 Electron 应用(如 VS Code, Discord )就崩。 原因: Chromium 的网络栈极其复杂,对 WSASend 的参数检查非常严格,且使用了特殊的缓冲区布局。 解决: 深入调试崩溃堆栈,修正了 Hook 函数中对 lpBuffers 的处理逻辑,确保内存访问越界检查比系统更严格。

    3. DLL 文件占用锁死

    开发时经常需要修改 DLL 代码,但如果测试进程没关,DLL 就被锁死无法编译。 解决: 写了自动化脚本,编译前自动查找并 Kill 掉所有加载了该 DLL 的进程。

    AI 结对编程体验

    本项目约 90% 的代码由 Claude Code opus 4.5 辅助完成。

    • AI 的强项: 快速生成 Detours 的 Hook 模板代码(几十个参数的 API 手写真的会疯)、CMakeLists.txt 编写、SOCKS5 协议解析。
    • 我的工作: 架构设计、解决复杂的内存崩溃 Bug 、Code Review 。 Opus 4.5 在理解复杂的 C++ 内存模型和 Windows API 方面表现令人印象深刻。

    项目进度

    3 条回复    2026-01-30 16:28:28 +08:00
    sbsummer
        1
    sbsummer  
    OP
       1 月 17 日
    更新了一个版本,CPU 占用下降非常多
    waynevan
        2
    waynevan  
       1 月 19 日
    感谢分享,mstsc 应该可以用上代理了
    fenildf
        3
    fenildf  
       1 月 30 日
    赞一个
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1043 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 18:28 PVG 02:28 LAX 11:28 JFK 14:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86