Antigravity-Proxy
🚀 Создано для редактора Antigravity: работа через прокси без режима TUN (особенно полезно в Китае)
🇨🇳 中文版 |
🇬🇧 English Version
---
## 📖 Содержание
- [📖 Введение](#-введение)
- [🚨 Сначала проверьте IP, а не DLL](#-сначала-проверьте-ip-а-не-dll)
- [⚡ Быстрый старт Antigravity](#-быстрый-старт-antigravity)
- [🔧 Руководство по устранению неполадок](#-руководство-по-устранению-неполадок)
- [✨ Возможности](#-возможности)
- [🔧 Как это работает](#-как-это-работает)
- [🛠️ Сборка](#️-сборка)
- [📝 Использование](#-использование)
- [🚀 Расширенное использование](#-расширенное-использование)
- [📄 Лицензия](#-лицензия)
- [👤 Автор](#-автор)
---
## 🚨 Сначала проверьте IP, а не DLL
> **Если Antigravity показывает `Agent execution terminated due to error`, сначала проверьте выходной IP-адрес прокси. Не спешите считать, что DLL перестала работать.**
Мы уже проверили самый обманчивый сценарий, встречающийся на практике:
- `version.dll` успешно загружена
- `language_server_windows_x64.exe` успешно внедрен
- `node.exe` успешно внедрен
- `oauth2.googleapis.com` / `daily-cloudcode-pa.googleapis.com` по-прежнему доступны через SOCKS5
- **но собственный `ls-main.log` Antigravity все равно возвращает:**
- `FAILED_PRECONDITION (code 400): User location is not supported for the API use.`
В таких случаях основной причиной обычно является **не** сбой DLL. Чаще всего проблема в следующем:
- **текущий выходной IP-адрес прокси, ASN или признаки дата-центра отклоняются режимом агента Antigravity или цепочкой Gemini CLI**
- другими словами: **поддержка страны не гарантирует, что именно эта цепочка выполнения агента принимает текущий выходной IP-адрес**
### Какие два журнала нужно проверить в первую очередь
#### 1. Журнал DLL: подтверждает, что уровень внедрения работает
- `<Каталог установки Antigravity>\logs\proxy-YYYYMMDD.log`
Если вы видите такие строки, сама DLL уже выполняет свою задачу:
- `[成功] 已注入目标进程: language_server_windows_x64.exe`
- `[成功] 已注入目标进程: node.exe`
- `SOCKS5: 隧道建立成功, 目标=oauth2.googleapis.com:443`
- `SOCKS5: 隧道建立成功, 目标=daily-cloudcode-pa.googleapis.com:443`
Начиная с этой версии DLL также выводит диагностику IP:
- `[诊断/IP] 当前代理出口探测完成: ...`
- `[诊断/IP] 当前代理出口呈现机房/托管特征...`
- `[诊断/IP] 最新 Antigravity 日志已命中 location 限制错误,同时当前代理出口呈现机房/托管特征...`
#### 2. Журнал приложения Antigravity: подтверждает, что реальный сбой происходит при выполнении агента
- `%APPDATA%\Antigravity\logs\<последний сеанс>\ls-main.log`
Если вы видите строку:
- `agent executor error: FAILED_PRECONDITION (code 400): User location is not supported for the API use.`
это означает следующее:
- **сбой больше не связан с внедрением DLL или базовым прокси-туннелем**
- **теперь сбой происходит внутри собственной цепочки выполнения агента Antigravity**
### Наиболее эффективный порядок диагностики
1. Проверьте `proxy-YYYYMMDD.log`
- Если внедрение и SOCKS5 работают успешно, DLL, скорее всего, исправна.
2. Проверьте `%APPDATA%\Antigravity\logs\<последний сеанс>\ls-main.log`
- Если там есть `User location is not supported for the API use.`, в первую очередь проверяйте IP-адрес.
3. Сначала попробуйте выходной IP-адрес **не из дата-центра, не хостинговый, домашний или обычного интернет-провайдера**
- Даже в одной стране, например в Сингапуре, разные ASN и типы выходных адресов могут давать совершенно разные результаты.
4. Возвращайтесь к диагностике DLL только в том случае, если журнал DLL **не** содержит успешного внедрения или успешного создания прокси-туннеля.
### Коротко
> **Если чат Antigravity не работает, сначала проверьте выходной IP-адрес, а уже потом DLL. При сообщении `location is not supported` в первую очередь проверяйте IP.**
---
## ⚠️ Требования к окружению
> Перед использованием инструмента убедитесь, что установлены необходимые библиотеки времени выполнения, иначе целевое приложение может не запуститься.
### Распространенная проблема: ошибка 0xc0000142
Если при запуске программы возникает **ошибка с кодом 0xc0000142** (как показано ниже), обычно причиной являются отсутствующие библиотеки времени выполнения Windows.
### Решение
Установите **набор библиотек времени выполнения Microsoft Visual C++**, включенный в этот репозиторий:
📦 **Путь для загрузки**: [`microsoft微软常用运行库合集-2025.exe`](microsoft/微软常用运行库合集-2025.exe)
**Порядок установки:**
1. Перейдите в каталог `microsoft` этого репозитория
2. Запустите `微软常用运行库合集-2025.exe`
3. Следуйте указаниям мастера установки
4. Перезапустите целевое приложение
---
## 📖 Введение
**Antigravity-Proxy** — это модуль внедрения прокси для Windows, созданный специально для **редактора Antigravity**.
Цель проста: помочь пользователям, особенно в Китае, работать с Antigravity **без включения режима Clash TUN**, при этом направляя трафик Antigravity через ваш SOCKS5/HTTP-прокси.
> О названии: **Antigravity-Proxy** = Antigravity + Proxy — он направляет через прокси только процессы, связанные с Antigravity, не перехватывая весь системный трафик.
### 🎯 Решаемая проблема
Вы сталкивались с такими ситуациями?
- 🔴 В некоторых окружениях Antigravity **игнорирует системный прокси**, из-за чего приходится включать режим Clash TUN
- 🔴 Режим TUN направляет через прокси **весь трафик системы**, мешая локальной разработке
- 🔴 Режим TUN требует **прав администратора**, которые доступны не во всех окружениях
**Antigravity-Proxy решает эти проблемы.** Он позволяет:
- ✅ **Проксировать только указанные приложения** (прежде всего связанные с Antigravity), не затрагивая остальной трафик
- ✅ Работать **без режима TUN**, избегая глобального перехвата трафика
- ✅ Использовать **прозрачный прокси**, незаметный для целевых приложений
### 🌟 Основная ценность
| Традиционный подход | Antigravity-Proxy |
|---------------------|-------------------|
| Требуется режим TUN | TUN не нужен |
| Глобальный прокси | Точное проксирование отдельных процессов |
| Нужны права администратора | Достаточно прав обычного пользователя |
| Сложная настройка | Достаточно поместить DLL в каталог |
---
## ⚡ Быстрый старт Antigravity
> Если вам нужно прямо сейчас запустить Antigravity, используйте этот кратчайший путь.
### Шаг 1. Подготовьте прокси
Запустите прокси-клиент (например, Clash/Mihomo) и убедитесь, что доступна локальная конечная точка SOCKS5- или HTTP-прокси (например, `127.0.0.1:7890`).
📋 Справочник портов популярных прокси-программ (нажмите, чтобы развернуть)
#### Порты по умолчанию популярных прокси-клиентов
| Прокси-программа | Порт SOCKS5 | Порт HTTP | Смешанный порт | Примечания |
|------------------|-------------|-----------|----------------|------------|
| **Clash / Clash Verge** | 7891 | 7890 | 7890 | Смешанный порт поддерживает SOCKS5 и HTTP |
| **Clash for Windows** | 7891 | 7890 | 7890 | Просмотр и изменение: Settings → Ports |
| **Mihomo (Clash Meta)** | 7891 | 7890 | 7890 | Использует формат конфигурации Clash |
| **V2RayN** | 10808 | 10809 | - | Settings → Basic Settings → Core |
| **V2RayA** | 20170 | 20171 | - | Настраивается в панели администратора |
| **Shadowsocks** | 1080 | - | - | Только SOCKS5, без HTTP |
| **ShadowsocksR** | 1080 | - | - | Только SOCKS5, без HTTP |
| **Surge (Mac/iOS)** | 6153 | 6152 | - | В расширенном режиме порты могут отличаться |
| **Qv2ray** | 1089 | 8889 | - | Preferences → Inbound Settings |
| **sing-box** | Произвольный | Произвольный | Произвольный | Необходимо вручную указать в конфигурации |
| **NekoBox** | 2080 | 2081 | - | Settings → Inbound |
| **Clash Meta for Android** | 7891 | 7890 | 7890 | Аналогично правилам Clash |
> 💡 **Рекомендуется SOCKS5**: инструмент лучше поддерживает SOCKS5, поэтому по возможности используйте его.
#### Как проверить, открыт ли порт прокси?
**Способ 1. Интерфейс прокси-программы**
- Большинство прокси-клиентов показывает прослушиваемый порт в главном окне или настройках
**Способ 2. Проверка в PowerShell**
```powershell
# Проверка порта SOCKS5 (по умолчанию 7891)
Test-NetConnection -ComputerName 127.0.0.1 -Port 7891
# Проверка порта HTTP (по умолчанию 7890)
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890
```
**Способ 3. Проверка через curl (требуется curl)**
```bash
# Проверка через прокси SOCKS5
curl -x socks5://127.0.0.1:7891 https://www.google.com -I
# Проверка через прокси HTTP
curl -x http://127.0.0.1:7890 https://www.google.com -I
```
#### Распространенные проблемы с портами и их решения
| Проблема | Причина | Решение |
|----------|---------|---------|
| Порт занят | Порт используется другой программой | Найдите процесс командой `netstat -ano | findstr :7890` |
| В подключении отказано | Прокси не запущен или указан неверный порт | Убедитесь, что прокси запущен, и проверьте настройку порта |
| Нет ответа | Подключение блокирует брандмауэр | Проверьте настройки брандмауэра Windows |
### Шаг 2. Получите файлы
Вам понадобятся:
- `version.dll`
- `dbghelp.dll` (только для Antigravity CLI)
- `config.json`
(Загрузите их из Releases или соберите самостоятельно.)
### Шаг 3. Разверните в Antigravity
Скопируйте `version.dll` и `config.json` в основной каталог программы Antigravity, рядом с `Antigravity.exe`. Затем запустите Antigravity — готово.
Для **Antigravity CLI** скопируйте `dbghelp.dll`, `version.dll` и `config.json` в каталог рядом с `agy.exe`. `agy.exe` загрузит находящуюся рядом `dbghelp.dll`, которая затем загрузит `version.dll`; отдельный лаунчер не требуется.
#### Примечания для Antigravity 2.0
В Antigravity 2.0 были добавлены или переименованы ключевые процессы. Конфигурация по умолчанию теперь охватывает:
```json
"target_processes": [
"agy.exe",
"language_server.exe",
"language_server_windows",
"Antigravity.exe",
"Antigravity IDE.exe",
"node.exe"
]
```
Если вы переносите старый `config.json`, убедитесь, что `child_injection` по-прежнему имеет значение `true`, и синхронизируйте приведенный выше список целевых процессов. Если в установленной версии 2.0 есть несколько каталогов запуска, поместите `version.dll` и `config.json` в фактически используемый каталог Antigravity/IDE.
При обновлении Antigravity внедренные файлы могут быть удалены из каталога установки. Если после обновления проксирование прекратилось, скопируйте файлы еще раз. Если прокси-клиент разделяет смешанный порт и порт SOCKS5, убедитесь, что `proxy.type` и `proxy.port` соответствуют реально прослушиваемой локальной конечной точке.
Дополнительные практические заметки: `docs/antigravity-2.0-issue-85.md`.
#### Распространенный путь Windows и быстрый переход
В большинстве случаев Antigravity устанавливается по адресу:
`C:Users<имя_пользователя>AppDataLocalProgramsAntigravity`
Пример: `C:UsersyuaotianAppDataLocalProgramsAntigravity`
Если каталог не удается найти, найдите ярлык Antigravity на рабочем столе или в меню «Пуск», затем выберите **правой кнопкой мыши → Расположение файла**. Открытый каталог и будет основным каталогом Antigravity.
Быстрый переход из терминала:
```powershell
cd "$env:LOCALAPPDATAProgramsAntigravity"
```
```bat
cd /d "%LOCALAPPDATA%ProgramsAntigravity"
```
При желании задайте собственную переменную окружения для быстрого перехода:
```bat
setx ANTIGRAVITY_HOME "%LOCALAPPDATA%ProgramsAntigravity"
```
После этого используйте `cd $env:ANTIGRAVITY_HOME` в PowerShell или `cd /d %ANTIGRAVITY_HOME%` в CMD.
## 🔧 Руководство по устранению неполадок
> Прокси не работает? Следуйте этому руководству, чтобы найти и устранить проблему.
### 📋 Краткая схема диагностики
```
Прокси не работает?
│
├── Проверьте наличие файла журнала ────────────────────────┐
│ │ │
│ ├── ❌ Журнала нет → DLL не загружена / неверный путь
│ │ └── См. «Проблемы загрузки DLL» │
│ │ │
│ └── ✅ Журнал есть → Проверьте его содержимое │
│ │ │
├── В журнале есть "SOCKS5: Tunnel established"? ──────────┤
│ │ │
│ ├── ❌ Нет → Не удалось подключиться к прокси │
│ │ └── См. «Проверка прокси-программы» │
│ │ │
│ └── ✅ Да → Туннель работает, проблема дальше │
│ │ │
└── Проверьте журналы Clash и доступность узла ─────────────┘
```
---
### 🔍 Шаг 1. Проверьте файлы журналов
Журналы — основной источник информации для диагностики.
**Расположение журналов** (в порядке приоритета):
1. `<Каталог установки Antigravity>logsproxy-YYYYMMDD.log`
2. `%TEMP%antigravity-proxy-logsproxy-YYYYMMDD.log`
**Быстрый доступ**:
```powershell
# Открыть каталог logs рядом с DLL
cd "$env:LOCALAPPDATAProgramsAntigravitylogs"
# Или открыть каталог TEMP
cd "$env:TEMPantigravity-proxy-logs"
```
**Расшифровка основных строк журнала**:
| Содержимое журнала | Значение | Состояние |
|--------------------|----------|-----------|
| `Antigravity-Proxy DLL loaded` | DLL успешно внедрена | ✅ Норма |
| `Config loaded successfully` | config.json успешно прочитан | ✅ Норма |
| `All API Hooks installed` | Перехватчики активны | ✅ Норма |
| `ConnectEx Hook installed` | Асинхронные подключения перехватываются | ✅ Норма |
| `SOCKS5: Tunnel established` | Подключение к прокси работает | ✅ Норма |
| `Non-SOCK_STREAM socket direct, soType=2` | UDP-трафик пропущен напрямую (нормально) | ⚠️ Ожидаемо |
| `SOCKS5 handshake failed` | Ошибка рукопожатия с прокси | ❌ Проверить |
| `Failed to connect proxy` | Подключиться к прокси не удалось | ❌ Проверить |
| `WSA Error=10061` | В подключении отказано (прокси не запущен) | ❌ Проверить |
| `WSA Error=10060` | Истекло время ожидания подключения | ❌ Проверить |
---
### 🌐 Шаг 2. Проверьте прокси-программу
#### 2.1. Убедитесь, что порт прокси открыт
```powershell
# Проверка порта SOCKS5 или смешанного порта
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890
# Если TcpTestSucceeded: False, порт не прослушивается
```
#### 2.2. Проверьте конфигурацию Clash
Проверьте файл конфигурации Clash:
```yaml
# Необходимо включить смешанный порт или порт SOCKS5
mixed-port: 7890 # Смешанный порт (рекомендуется)
# Или
port: 7890 # Порт HTTP
socks-port: 7891 # Порт SOCKS5
# Если требуется доступ из локальной сети
allow-lan: true
```
#### 2.3. Проверьте журналы Clash
В интерфейсе Clash откройте «Logs» и проверьте:
- Запросы к `daily-cloudcode-pa.googleapis.com` и `www.googleapis.com`
- Направляются ли запросы через `DIRECT` или прокси-узел
- Срабатывают ли правила `REJECT`
#### 2.4. Проверьте доступность узла
Самый простой способ: включите **режим TUN**. Если Antigravity работает в режиме TUN, прокси-узел исправен.
---
### 💻 Шаг 3. Проверьте системное окружение
#### 3.1. Проверьте версию Windows
```powershell
winver
```
Поведение Winsock может отличаться в разных сборках Windows 11.
#### 3.2. Проверьте конфигурацию Winsock LSP
Некоторые программы безопасности внедряют LSP (Layered Service Providers), что может мешать перехватчикам.
```powershell
# Запустите от имени администратора
netsh winsock show catalog
```
В нормальной ситуации должны отображаться только поставщики Microsoft. Сторонние поставщики, например от 360 или Huorong, могут вызывать проблемы совместимости.
#### 3.3. Проверьте защитное ПО
Следующие программы могут мешать внедрению DLL или перехватчикам:
| Программа | Возможное влияние | Решение |
|-----------|-------------------|---------|
| **360 Security** | Блокирует внедрение DLL и перехватчики | Добавьте в белый список или временно отключите |
| **Huorong** | Может блокировать внедрение удаленного потока | Добавьте в белый список |
| **Tencent PC Manager** | Внедрение LSP может мешать работе | Добавьте в белый список |
| **Windows Defender** | Обычно не мешает | Ничего делать не требуется |
**Совет по диагностике**: полностью закройте защитное ПО, а не просто сверните его в область уведомлений.
#### 3.4. Проверьте конфигурацию IPv6
Если IPv6 включен, некоторые подключения могут предпочитать IPv6:
```powershell
# Проверка состояния IPv6 сетевого адаптера
Get-NetAdapterBinding -ComponentID ms_tcpip6
```
Если в журналах много записей об IPv6, попробуйте задать в `config.json`:
```json
"proxy_rules": {
"ipv6_mode": "block"
}
```
---
### 🔄 Шаг 4. Сравните окружения
Если у вас все работает, а у друга нет, сравните следующие данные:
| Параметр | Ваше значение | Значение друга |
|----------|---------------|----------------|
| Версия Windows (`winver`) | | |
| Версия Clash | | |
| Порт прокси | 7890 | |
| Тип прокси | socks5 | |
| Установленное защитное ПО | | |
| Число строк в выводе `netsh winsock show catalog` | | |
---
### 📊 Шаг 5. Соберите данные для GitHub Issue
Если предыдущие действия не решили проблему, соберите следующие данные и создайте [GitHub Issue](https://github.com/yuaotian/antigravity-proxy/issues):
1. **Файл журнала**: полное содержимое `proxy-YYYYMMDD.log`
2. **config.json**: ваш файл конфигурации без конфиденциальных данных
3. **Версия Windows**: вывод `winver`
4. **Версия и конфигурация Clash**: настройки портов
5. **Список защитного ПО**: установленные антивирусы и программы безопасности
6. **Описание проблемы**: что именно не работает, какой сайт или функция завершается с ошибкой
---
### ⚠️ Известные проблемы совместимости
| Проблема | Причина | Решение |
|----------|---------|---------|
| **Много записей `Non-SOCK_STREAM socket direct, soType=2`** | UDP/QUIC-трафик пропускается напрямую (нормально) | Ничего делать не требуется, SOCKS5 проксирует только TCP |
| **Журнал сообщает об успехе, но страницы не загружаются** | Правила Clash или проблемы узла | Проверьте журналы Clash |
| **Некоторые запросы обходят прокси** | Приложение использует API без перехватчика | Создайте Issue и сообщите подробности |
| **Сбой с 360 и похожим защитным ПО** | Вмешательство внедренного LSP | Добавьте в белый список или удалите программу |
---
## ✨ Возможности
| Возможность | Описание |
|-------------|----------|
| 🔀 **Перенаправление через прокси** | Перехватывает вызовы `connect()` и перенаправляет их на прокси-сервер |
| 🌐 **Система FakeIP** | Перехватывает разрешение DNS, выделяет виртуальные IP-адреса и хранит соответствия |
| 👶 **Внедрение в дочерние процессы** | Автоматически внедряет DLL в дочерние процессы |
| ⏱️ **Управление тайм-аутами** | Не дает целевому приложению зависнуть из-за сетевых проблем |
| 🔄 **Отказоустойчивость** | При ошибке конфигурации возвращается к прямому подключению |
| 🎯 **Фильтр процессов** | Проксирует только указанные процессы |
| 📊 **Мониторинг трафика** | Необязательное журналирование трафика |
### Поддерживаемые протоколы
- ✅ SOCKS5 (рекомендуется)
- ✅ HTTP CONNECT
---
## 🔧 Как это работает
### Архитектура
```
┌─────────────────────────────────────────────────────────────────────────┐
│ Целевой процесс │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Код │───►│ Winsock API │───►│ antigravity-proxy.dll │ │
│ │ приложения │ │ (ws2_32.dll) │ │ (уровень Hook) │ │
│ └──────────────┘ └──────────────┘ └────────────┬─────────────┘ │
│ │ │
└───────────────────────────────────────────────────────│──────────────────┘
▼
┌──────────────────┐
│ Прокси-сервер │
│ (SOCKS5/HTTP) │
└──────────────────┘
```
### Основной процесс
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 1. Подмена DLL │
│ Программа загружает version.dll → нашу DLL → передает реальные вызовы│
└─────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 2. Установка перехватчиков API │
│ MinHook перехватывает connect, getaddrinfo, CreateProcessW и т. д. │
└─────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 3. Перехват DNS │
│ getaddrinfo("example.com") → FakeIP (198.18.x.x) → сохранение связи │
└─────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 4. Перенаправление подключения │
│ connect(FakeIP) → поиск связи → прокси → рукопожатие SOCKS5 │
└─────────────────────────────────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 5. Передача дочерним процессам │
│ CreateProcessW → пауза → внедрение DLL → продолжение │
└─────────────────────────────────────────────────────────────────────────┘
```
### Перехватываемые API
| API | Модуль | Назначение |
|-----|--------|------------|
| `connect` | ws2_32.dll | Перехват TCP-подключений |
| `WSAConnect` | ws2_32.dll | Перехват WSA-подключений |
| `getaddrinfo` | ws2_32.dll | Перехват разрешения DNS (ANSI) |
| `GetAddrInfoW` | ws2_32.dll | Перехват разрешения DNS (Unicode) |
| `WSAConnectByNameA/W` | ws2_32.dll | Перехват подключения по имени |
| `ConnectEx` | ws2_32.dll | Перехват асинхронных подключений |
| `CreateProcessW` | kernel32.dll | Перехват создания процессов для внедрения |
| `send/recv` | ws2_32.dll | Мониторинг трафика (необязательно) |
---
## 🛠️ Сборка
### Предварительные требования
Перед сборкой убедитесь, что установлены следующие инструменты:
| Зависимость | Версия | Назначение | Загрузка |
|-------------|--------|------------|----------|
| **Visual Studio 2022** | 2022 или новее | Компилятор C/C++ | [Загрузить](https://visualstudio.microsoft.com/) |
| **CMake** | >= 3.0 | Система сборки | [Загрузить](https://cmake.org/download/) |
| **PowerShell** | 5.0+ | Скрипт сборки | Встроен в Windows |
> 💡 **Совет**: при установке Visual Studio обязательно выберите рабочую нагрузку **«Desktop development with C++»**.
### Зависимости
| Зависимость | Описание | Способ получения |
|-------------|----------|------------------|
| **MinHook** | Фреймворк перехвата API | Включен в проект |
| **nlohmann/json** | Библиотека разбора JSON | Автоматически загружается скриптом сборки |
### Быстрая сборка
Проект содержит PowerShell-скрипт для сборки одной командой:
```powershell
# Сборка по умолчанию: Release x64
.uild.ps1
# Сборка версии Debug
.uild.ps1 -Config Debug
# Сборка 32-разрядной версии
.uild.ps1 -Arch x86
# Очистка и повторная сборка
.uild.ps1 -Clean
# Показать справку
.uild.ps1 -Help
```
### Ручная сборка
Если вы предпочитаете ручную сборку, используйте следующие команды:
```bash
# ========== x64 (64-разрядная) ==========
mkdir build-x64 && cd build-x64
# Настройка (Visual Studio 2022)
cmake .. -G "Visual Studio 17 2022" -A x64
# Сборка Release
cmake --build . --config Release
# Результат: version.dll
# ========== x86 (32-разрядная) ==========
mkdir build-x86 && cd build-x86
# Настройка
cmake .. -G "Visual Studio 17 2022" -A Win32
# Сборка
cmake --build . --config Release
# Результат: version.dll
```
### Распространенные ошибки сборки
❌ Ошибка: «CMake not found»
**Причина**: CMake не установлен или отсутствует в PATH
**Решение**:
1. Загрузите и установите [CMake](https://cmake.org/download/)
2. Во время установки отметьте «Add CMake to the system PATH»
3. Перезапустите терминал и повторите попытку
❌ Ошибка: «No CMAKE_CXX_COMPILER could be found»
**Причина**: Visual Studio не установлена или отсутствует набор инструментов C++
**Решение**:
1. Откройте Visual Studio Installer
2. Убедитесь, что установлена рабочая нагрузка **«Desktop development with C++»**
3. Либо запустите команды сборки из Developer Command Prompt
❌ Ошибка: nlohmann/json.hpp not found
**Причина**: библиотека JSON не загружена
**Решение**:
`build.ps1` загружает ее автоматически. Для ручной загрузки используйте:
```bash
# Ручная загрузка
curl -o include/nlohmann/json.hpp https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp
```
❌ Ошибка: LNK2019 unresolved external symbol
**Причина**: ошибка компоновщика, обычно библиотека Winsock не подключена
**Решение**:
Убедитесь, что `CMakeLists.txt` содержит:
```cmake
target_link_libraries(version PRIVATE ws2_32)
```
## ❓ Распространенные ошибки и коды ошибок
> При возникновении проблем сначала проверьте архитектуру целевого приложения (x86/x64) и журналы, например `proxy-YYYYMMDD.log`.
| Код ошибки | Описание | Возможная причина | Решение |
|------------|----------|-------------------|---------|
| `VCRUNTIME140_1.dll missing` | Системная ошибка: «VCRUNTIME140_1.dll was not found» | Среда выполнения VC++ 2015-2022 не установлена или удалена защитным ПО | Установите VC++ 2015-2022 Redistributable (x64/x86)
Или соберите со статической средой выполнения: `.uild.ps1 -StaticRuntime` |
---
## 📝 Использование
### Быстрый старт
**Всего три шага, чтобы целевое приложение начало использовать прокси.**
#### Шаг 1. Подготовьте файлы
После сборки в каталоге `output` появятся:
- `version.dll` — DLL прокси
- `dbghelp.dll` — DLL-посредник для Antigravity CLI
- `config.json` — файл конфигурации
#### Шаг 2. Настройте прокси
Измените `config.json`:
```json
{
"proxy": {
"host": "127.0.0.1",
"port": 7890,
"type": "socks5"
},
"fake_ip": {
"enabled": true,
"cidr": "198.18.0.0/15"
},
"timeout": {
"connect": 5000,
"send": 5000,
"recv": 5000
},
"child_injection": true,
"child_injection_mode": "filtered",
"target_processes": [
"agy.exe",
"language_server.exe",
"language_server_windows",
"Antigravity.exe",
"Antigravity IDE.exe",
"node.exe"
]
}
```
#### Шаг 3. Разверните DLL
Скопируйте `version.dll` и `config.json` в **тот же каталог**, где находится целевое приложение:
```
Каталог целевого приложения/
├── target_app.exe
├── version.dll ← Поместить сюда
└── config.json ← Поместить сюда
```
Запустите целевое приложение — готово! 🎉
### Справочник по конфигурации
| Параметр | Тип | По умолчанию | Описание |
|----------|-----|--------------|----------|
| `proxy.host` | string | `"127.0.0.1"` | Адрес прокси-сервера |
| `proxy.port` | int | `7890` | Порт прокси-сервера |
| `proxy.type` | string | `"socks5"` | Тип прокси: `socks5` или `http` (`https` принимается и обрабатывается как `http`) |
| `fake_ip.enabled` | bool | `true` | Включить систему FakeIP |
| `fake_ip.cidr` | string | `"198.18.0.0/15"` | Диапазон адресов FakeIP (зарезервирован для тестирования) |
| `timeout.connect` | int | `5000` | Тайм-аут подключения (мс) |
| `timeout.send` | int | `5000` | Тайм-аут отправки (мс) |
| `timeout.recv` | int | `5000` | Тайм-аут получения (мс) |
| `child_injection` | bool | `true` | Внедрять DLL в дочерние процессы |
| `traffic_logging` | bool | `false` | Включить журналирование трафика |
| `target_processes` | array | `[]` | Список целевых процессов (пустой означает все процессы) |
| `proxy_rules.routing.enabled` | bool | `true` | Включить маршрутизацию по правилам |
| `proxy_rules.routing.priority_mode` | string | `"order"` | Приоритет: `order` (порядок списка) или `number` (числовой приоритет) |
| `proxy_rules.routing.default_action` | string | `"proxy"` | Действие по умолчанию, если правило не найдено |
| `proxy_rules.routing.use_default_private` | bool | `true` | Автоматически загружать прямые правила для RFC1918 и loopback |
| `proxy_rules.routing.rules` | array | `[]` | Список правил (CIDR, домен с маской, порт, протокол) |
### Правила маршрутизации
Правила маршрутизации находятся в `proxy_rules.routing`. Они поддерживают CIDR, домены с масками, порты и фильтры протоколов. Приоритет может быть `order` (порядок списка) или `number` (числовой приоритет).
```json
{
"proxy_rules": {
"routing": {
"enabled": true,
"priority_mode": "order",
"default_action": "proxy",
"use_default_private": true,
"rules": [
{
"name": "lan-direct",
"action": "direct",
"ip_cidrs_v4": ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"],
"ip_cidrs_v6": ["fc00::/7","fe80::/10","::1/128"],
"domains": [".local","*.corp.example.com"],
"protocols": ["tcp"]
}
]
}
}
}
```
**Инструмент настройки**: `tools/config-web/index.html` (откройте локально, чтобы импортировать, изменить или экспортировать `config.json`).
**Примечание**: в `AUTHORS.txt` перечислены участники разработки включенной зависимости MinHook, а не сопровождающие этого проекта.
**Примечания**:
- Оставьте порты пустыми, чтобы сопоставлять любые порты. Оставьте домены пустыми, чтобы сопоставлять только CIDR. `*` соответствует всем доменам.
- Используйте `0.0.0.0/0` и `::/0` для полного совпадения.
- Инструмент позволяет изменять `proxy.host`, `proxy.port` и `proxy.type`.
### Известные проблемы
- **Историческая проблема (исправлена): FakeIP + `direct + domains + ports`**: в некоторых старых версиях, если FakeIP включен, а правило `direct` содержит одновременно `domains` и `ports`, на этапе DNS мог выделяться FakeIP, после чего этап подключения пытался подключиться к FakeIP напрямую и завершался ошибкой. Если вы используете старую сборку, обновитесь. Временное решение: удалите условие `ports` из правила или отключите FakeIP.
### Примечания об IPv6
**Приоритет**: для целей с **чистым IPv6** (не сопоставленным с IPv4) параметр `proxy_rules.ipv6_mode` применяется **до** `routing`. Сопоставление правил маршрутизации продолжается только при `ipv6_mode=proxy`.
### Проверка
1. **Проверьте журналы**: найдите `proxy.log` в каталоге целевого приложения
2. **Проверьте прокси-программу**: посмотрите журнал подключений в прокси-программе
3. **Используйте захват пакетов**: проверьте направление трафика с помощью Wireshark
---
## 🚀 Расширенное использование
> Дополнительная возможность: проект создан прежде всего для Antigravity, но лежащий в его основе подход универсален и может быть адаптирован для других Windows-приложений, игнорирующих системный прокси.
### 🎯 Принудительное проксирование других программ
Хотите направить Chrome, VS Code или другую программу через прокси? Просто измените конфигурацию.
#### Пример 1. Принудительное проксирование Chrome
```json
{
"proxy": {
"host": "127.0.0.1",
"port": 7890,
"type": "socks5"
},
"child_injection": true,
"target_processes": []
}
```
Затем скопируйте `version.dll` и `config.json` в каталог установки Chrome:
```
C:Program FilesGoogleChromeApplication├── chrome.exe
├── version.dll ← Поместить сюда
└── config.json ← Поместить сюда
```
#### Пример 2. Принудительное проксирование VS Code
```
C:UsersYourUsernameAppDataLocalProgramsMicrosoft VS Code├── Code.exe
├── version.dll ← Поместить сюда
└── config.json ← Поместить сюда
```
#### Пример 3. Проксирование только отдельных дочерних процессов
Если нужно проксировать только определенные дочерние процессы, используйте параметр `target_processes`:
```json
{
"target_processes": [
"node.exe",
"npm.cmd",
"language_server.exe"
]
}
```
### 🔧 Точки входа для разработки
Если вы хотите дорабатывать проект, основные участки кода находятся здесь:
| Модуль | Файл | Описание |
|--------|------|----------|
| **Конфигурация** | `src/core/Config.hpp` | Изменение структуры конфигурации |
| **Сетевые перехватчики** | `src/hooks/Hooks.cpp` | Добавление или изменение функций-перехватчиков |
| **Протокол SOCKS5** | `src/network/Socks5.hpp` | Реализация рукопожатия SOCKS5 |
| **Протокол HTTP** | `src/network/HttpConnect.hpp` | Реализация HTTP CONNECT |
| **FakeIP** | `src/network/FakeIP.hpp` | Логика выделения виртуальных IP-адресов |
| **Подмена DLL** | `src/proxy/VersionProxy.cpp` | Перенаправление вызовов version.dll |
| **Внедрение в процессы** | `src/injection/ProcessInjector.hpp` | Внедрение в дочерние процессы |
#### Как добавить новый перехватчик?
1. Определите тип указателя функции и Detour-функцию в `src/hooks/Hooks.cpp`
2. Добавьте вызов `MH_CreateHookApi()` в `Hooks::Install()`
3. Добавьте очистку в `Hooks::Uninstall()`
#### Как добавить новый прокси-протокол?
1. Создайте реализацию нового протокола в `src/network/`, ориентируясь на `Socks5.hpp`
2. Добавьте ветвь протокола в `DoProxyHandshake()` в `src/hooks/Hooks.cpp`
---
## 📄 Лицензия
Проект распространяется с открытым исходным кодом по [лицензии BSD-2-Clause](LICENSE.txt).
Авторские права на часть MinHook принадлежат **Tsuda Kageyu**.
---
## 👤 Автор
煎饼果子(86)
Независимый разработчик
|
### 📱 Контакты
| Платформа | Данные |
|-----------|--------|
| **WeChat** | JavaRookie666 |
| **Telegram** | [@yuaotian](https://t.me/yuaotian) |
| **GitHub** | [@yuaotian](https://github.com/yuaotian) |
### 🎁 Поддержка
Если проект оказался полезен, вы можете:
- ⭐ Поставить звезду проекту
- 🔗 Поделиться им с друзьями
- 💬 Создать Issue или PR

Добавить в WeChat
|

Подписаться на официальный аккаунт
|

🔥 Вступить в группу WeChat
|
### 💰 Пожертвования
Если проект вам помог, можете угостить автора кофе ☕

Вознаграждение WeChat
|

Alipay
|
### 💳 Криптовалюта
Для зарубежных пользователей также доступны пожертвования в криптовалюте:
🪙 Показать криптовалютные адреса (нажмите, чтобы развернуть)
#### 1️⃣ USDT (Tether) и стейблкоины
| Сеть | Адрес |
|------|-------|
| 🔴 **TRC-20 (Tron)** | `TFbJNoY5Lep5ZrDwBbT8rV1i8xR4ZhX53k` |
| 🟡 **Polygon / BSC / Arbitrum** 🔥 *Самые низкие комиссии* | `0x44f8925b9f93b3d6da8d5ad26a3516e3e652cc88` |
> *Адрес EVM поддерживает USDT в сетях Polygon, BSC и Arbitrum One*
#### 2️⃣ Litecoin (LTC) ✅ Низкие комиссии
| Сеть | Адрес |
|------|-------|
| 🔵 **Litecoin** | `LVrigKxtWfPymMRtRqL3z2eZxfncR3dPV7` |
---
## 🔍 Примечание об источнике псевдокода (`pseudocode_dll`)
Каталог `pseudocode_dll/` в этом репозитории содержит псевдокод, полученный путем декомпиляции **DLL, опубликованной в сообщении на форуме** (результат Binary Ninja / IDA Hex-Rays). Он используется исключительно для следующих целей:
- Исследование **периодических сбоев Antigravity**, с которыми я столкнулся в **Windows 11**.
- Изучение и сравнение подходов к реализации перехватчиков и принудительного проксирования.
- Сохранение результатов исследования для дальнейшего использования.
> ⚠️ Важное уведомление
> - `pseudocode_dll/` **НЕ участвует** в сборке или выпуске проекта; это только запись процесса изучения и исследования.
> - Текущий код проекта **реализован мной с нуля и постоянно сопровождается**. Это **НЕ «публикация исходного кода оригинальной DLL»**.
> - Этот репозиторий **НЕ распространяет** готовую DLL из исходного сообщения; для ее получения обратитесь к исходной теме.
> - Если автор оригинала считает анализ или публикацию этого псевдокода неуместными и хочет их удалить, создайте Issue, и я сразу внесу необходимые изменения: перенесу материалы в отдельную ветку, удалю их или перепишу описание.
**Источник (исходное сообщение с DLL):**
https://linux.do/t/topic/1189424
**Файлы псевдокода в репозитории:**
- `pseudocode_dll/BinaryNinja.txt` (результат декомпиляции Binary Ninja)
- `pseudocode_dll/Hex-Rays.txt` (результат декомпиляции IDA Hex-Rays)
---
Сделано с ❤️ автором 煎饼果子(86)