Antigravity 编辑器不走系统代理,国内使用往往只能被迫开启 Clash 的 TUN 模式;但 TUN 是全局接管流量,本地开发、内网访问都会受影响,而且需要管理员权限。

Antigravity-Proxy 正是为了解决这个痛点:通过 DLL 劫持 + Winsock Hook,把 Antigravity 及其子进程的网络请求强制转到 SOCKS5/HTTP 代理上,不需要 TUN,普通用户权限即可运行,而且只代理指定进程,全局流量不受影响。

项目地址:https://github.com/yuaotian/antigravity-proxy

一、原理说明

整体架构

1
目标程序 → Winsock API (ws2_32.dll) → antigravity-proxy.dll(Hook 层) → 代理服务器(SOCKS5/HTTP)

核心流程

  1. DLL 劫持:程序加载 version.dll → 加载本 DLL → 转发真实 version.dll 的调用
  2. API Hook 安装:使用 MinHook 拦截网络与进程相关 API
  3. DNS 拦截:hook getaddrinfo,分配 FakeIP(198.18.x.x)并记录域名映射
  4. 连接重定向:connect(198.18.x.x) → 还原域名 → 连接代理 → 完成 SOCKS5 握手
  5. 子进程传播:hook CreateProcessW → 挂起子进程 → 注入 DLL → 恢复运行

Hook 的 API

API 所属模块 用途
connect / WSAConnect / ConnectEx ws2_32.dll 拦截连接(含异步)
getaddrinfo / GetAddrInfoW ws2_32.dll DNS 解析(ANSI / Unicode)
WSAConnectByNameA/W ws2_32.dll 按名称连接
CreateProcessW kernel32.dll 进程创建,注入子进程
send / recv ws2_32.dll 流量监控(可选)

支持的代理协议:SOCKS5(推荐) 与 HTTP CONNECT。

二、准备工作

1. 准备可用的代理

启动 Clash / Mihomo 等代理软件,确认 SOCKS5 或 HTTP 端口可用(混合端口常见为 7890,SOCKS5 常见为 7891)。

2. 安装运行库

系统缺少 VC++ 运行库时会出现 0xc0000142 / 0xc0000135 报错,仓库内附带了 微软常用运行库合集-2025.exe,也可以自行安装 VC++ 2015-2022 运行库。

3. 下载对应架构的 Release

在 Releases 页面按架构下载,共四个压缩包:

  • antigravity-proxy-vX-ide-win-x64.zip / -x86.zip:桌面端,内含 ide/(version.dll、config.json)
  • antigravity-proxy-vX-cli-win-x64.zip / -x86.zip:CLI 端,内含 cli/(dbghelp.dll、antigravity_proxy.dll、config.json)

三、部署步骤

桌面端

把 ide/ 内的文件复制到 Antigravity 主程序目录,与 Antigravity.exe 同级。

默认安装路径:

1
C:\Users\<用户名>\AppData\Local\Programs\Antigravity

CLI 端

把 cli/ 内的文件复制到 agy.exe 同级目录。

注意事项

  • ide/ 与 cli/ 不要混用
  • version.dll 与 config.json 必须是同一次构建、且架构一致
  • Antigravity 更新后可能清理劫持文件,更新完需要重新复制一遍

Antigravity 2.0 已默认覆盖的目标进程:agy.exe、language_server.exe、language_server_windows、Antigravity.exe、Antigravity IDE.exe、node.exe。

四、配置说明

默认配置基本开箱即用,只需把 proxy.port 改成自己代理软件的端口:

配置项 默认值 说明
proxy.host / port / type 127.0.0.1 / 7890 / socks5 代理地址、端口、协议
fake_ip.enabled true FakeIP 系统开关
fake_ip.cidr 198.18.0.0/15 虚拟 IP 段
timeout.connect/send/recv 5000 超时时间(毫秒)
child_injection true 是否注入子进程
target_processes [] 目标进程(空 = 全部)
proxy_rules.allowed_ports [80, 443] 端口白名单
proxy_rules.dns_mode direct DNS 策略
proxy_rules.ipv6_mode proxy proxy / direct / block
proxy_rules.udp_mode auto auto / block / direct / proxy
proxy_rules.udp_fallback block UDP 失败后的回退策略
diagnostics.agent_ip_probe false 出口 IP 探测(排查 location 报错用)

规则路由支持 CIDR、域名通配符、端口、协议分流,优先级可选 order 或 number。

不想手改 JSON 的话,仓库提供了可视化配置工具:resources/config-web/index.html(浏览器直接打开即可),或构建后的 output/config-web.html。

五、验证与日志

注入成功后,日志会输出到以下位置(按优先级):

  1. <DLL 所在目录>\logs\proxy-YYYYMMDD.log
  2. %TEMP%\antigravity-proxy-logs\proxy-YYYYMMDD.log

六、常见问题

报错先排查出口 IP,不要先怀疑 DLL

这是作者反复强调的一点。如果出现 Agent execution terminated due to error,先看 %APPDATA%\Antigravity\logs\<最新目录>\ls-main.log,若日志中提示:

1
FAILED_PRECONDITION (code 400): User location is not supported for the API use.

说明 DLL 注入、SOCKS5 隧道都正常,问题出在代理出口 IP 被服务端判定不可用。注意「国家支持」不等于「该出口 IP 被接受」,同一国家不同 ASN、不同机房的结果可能完全不一样,优先更换非机房/住宅 ISP 出口。

排查顺序:

  1. 查 DLL 日志 <安装目录>\logs\proxy-YYYYMMDD.log,确认注入与 SOCKS5 是否成功
  2. 查应用日志 %APPDATA%\Antigravity\logs\<最新目录>\ls-main.log,确认是否 location 限制
  3. 更换出口 IP 重试
  4. 只有 DLL 日志里完全没有注入成功记录时,才回头排查 DLL

也可以把 diagnostics.agent_ip_probe 打开,直接输出出口 IP 诊断日志。

错误码对照

错误码 原因 解决方案
0xC0000142 架构不兼容 / 缺 VC++ 运行库 / 安全软件拦截 使用架构一致的版本;安装 VC++ 2015-2022;或静态编译 .\build.ps1 -StaticRuntime
0xC000007B x86 / x64 位数混用 保证 DLL 与目标程序位数一致
0xC0000135 缺少依赖 DLL(VC++ 运行库) 安装运行库或静态编译
VCRUNTIME140_1.dll 缺失 运行库未安装或被删除 安装对应架构运行库
0xC0000906 文件被安全软件拦截 / 损坏 重新获取文件并加白名单
0xC0000005 Hook 不兼容 / 目标进程范围过大 缩小 target_processes,关闭 child_injection 或 fake_ip
10061(WSAECONNREFUSED) 代理未启动或端口错误 启动代理,核对 config.json
10060(WSAETIMEDOUT) 代理不可达或超时过短 检查网络,增大 timeout

IPv6 问题

出现 SOCKS5: 读取认证响应失败, WSA错误码=10060 且目标为 IPv6 时,把 ipv6_mode 改为 block 或 direct;也可以让代理监听 ::1 并同步修改 proxy.host。

UDP / QUIC

udp_mode=auto 在 SOCKS5 下会自动使用 UDP Associate,需要代理软件支持该能力。udp_fallback=direct 可能导致 UDP 直连泄漏(默认 block 更安全)。日志中大量出现 非 SOCK_STREAM socket 直连, soType=2,说明 UDP 没走代理。

安全软件拦截

360 安全卫士、火绒、腾讯电脑管家 等可能拦截 DLL 注入或 LSP,需要把 Antigravity 目录加入白名单;部分安全软件的 Winsock LSP 注入也会干扰 Hook。

七、WSL 环境

DLL 劫持方案无法代理 WSL 内部的流量(WSL2 使用 Linux 内核 socket,与 Winsock 完全独立)。替代方案:

方案 适用场景 复杂度 推荐度
antissh(graftcp 包装) 仅需在 WSL 内代理 Antigravity 中等 ⭐⭐⭐⭐⭐
WSL Mirrored 网络模式 Win11 22H2+ / WSL ≥ 2.0 低 ⭐⭐⭐⭐
TUN 全局代理 需要代理所有流量 低 ⭐⭐⭐

八、进阶玩法

这个工具本质是通用的进程级强制代理方案,把 ide/ 内的文件复制到 Chrome、VS Code 等程序目录,再修改 config.json 里的 target_processes,同样可以强制走代理,无需 TUN。

二次开发入口:

模块 文件
配置加载 src/core/Config.hpp
网络 Hook src/hooks/Hooks.cpp
SOCKS5 / HTTP CONNECT src/network/Socks5.hpp / HttpConnect.hpp
FakeIP src/network/FakeIP.hpp
DLL 劫持 src/proxy/VersionProxy.cpp
进程注入 src/injection/ProcessInjector.hpp

九、小结

  • 免 TUN、仅代理指定进程、普通权限可用,适合「只代理 Antigravity」的场景
  • 对话报错先排出口 IP,再排 DLL
  • 架构、版本必须匹配,x86 / x64 混用会直接启动失败
  • WSL 内无效,需要换用 antissh 或 Mirrored 网络模式

项目地址:https://github.com/yuaotian/antigravity-proxy