Логотип Antigravity

Antigravity-Proxy

🚀 Создано для редактора Antigravity: работа через прокси без режима TUN (особенно полезно в Китае)

Статус сборки Лицензия Платформа C++17 MinHook

🇨🇳 中文版 | 🇬🇧 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.

Снимок ошибки 0xc0000142

### Решение Установите **набор библиотек времени выполнения 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
QR-код WeChat
Добавить в WeChat
QR-код официального аккаунта
Подписаться на официальный аккаунт
QR-код группы WeChat
🔥 Вступить в группу WeChat
### 💰 Пожертвования Если проект вам помог, можете угостить автора кофе ☕
Вознаграждение WeChat
Вознаграждение WeChat
Alipay
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)