V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录

独立开发者节点

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

sbsummer
1D
V2EX  ›  Vibe Coding

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

  •  
  •   sbsummer · 3 天前 · 312 次点击

    最近在用 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 方面表现令人印象深刻。

    项目进度

    2 条回复    2026-01-19 11:26:55 +08:00
    sbsummer
        1
    sbsummer  
    OP
       2 天前
    更新了一个版本,CPU 占用下降非常多
    waynevan
        2
    waynevan  
       20 小时 55 分钟前
    感谢分享,mstsc 应该可以用上代理了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2832 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:22 · PVG 08:22 · LAX 16:22 · JFK 19:22
    ♥ Do have faith in what you're doing.