23 KiB
Executable File
PronBox
Форк box_for_magisk - прозрачный прокси для Android (root).
Собрано в стенах НИИ «ТехноПрон». Отображаемое имя в Magisk: PronBox; module id: box_for_root (апгрейд совместим).
Работает через Magisk, KernelSU и APatch. Ядро по умолчанию: sing-box. Anti-detection без LSPosed + sidecar: olcrtc / TrustTunnel / wg-obfuscator.
Зачем этот форк
Stock Box for Root хорошо проксирует трафик через TPROXY, но:
- Не поддерживает новые протоколы вроде olcrtc, TrustTunnel и WG-obfuscation «из коробки».
- Легко детектится проверщиками вроде RKNHardering: REST API на
9090, скан localhost, TUN-интерфейсы.
PronBox решает это без LSPosed - iptables port-hide, hardening конфигов и sidecar-цепочка. Разработано командой НИИ «ТехноПрон».
Отличия от stock BFR
| Функция | Stock BFR | PronBox |
|---|---|---|
| Ядро по умолчанию | clash | sing-box |
| Режим сети | tproxy | tproxy (TUN блокируется) |
| REST API (9090) | 0.0.0.0 |
отключён или только 127.0.0.1 |
| TUN mode | доступен | запрещён (stealth_forbid_tun) |
| Localhost scan | не защищён | iptables port-hide для observer apps |
| olcrtc / TrustTunnel | нет | sidecar → SOCKS → sing-box |
| WG obfuscator | нет | wg-obfuscator → WireGuard |
| Быстрый профиль | - | Manage Profiles / sbfr p … |
| LSPosed / VPN Hide | - | не требуется |
| Автор | - | команда НИИ «ТехноПрон» |
Возможности
- Прозрачный прокси через iptables TPROXY - без
VpnService, без VPN-иконки, безTRANSPORT_VPN. - Stealth-слой (
box.stealth): скрытие localhost-портов от банков и anti-tamper SDK. - Sidecar (
box.sidecar): olcrtc и TrustTunnel как локальный SOCKS5 upstream для sing-box. - Авто-hardening sing-box/clash: удаление REST API, запрет TUN, блок QUIC (опционально).
- Split tunneling через blacklist/whitelist приложений и GID (как в stock BFR).
- Совместимость с Magisk / KernelSU / APatch.
Архитектура
Обычный режим (VLESS / Hysteria / и т.д.)
Приложение
→ iptables mangle / TPROXY (порт 9898)
→ sing-box (tproxy inbound)
→ outbound (VLESS, Trojan, …)
→ сервер
Sidecar-режим (olcrtc / TrustTunnel)
Приложение
→ iptables TPROXY (:9898)
→ sing-box
→ SOCKS 127.0.0.1:10800 | :10801
→ trusttunnel_client | olcrtc
→ сервер (HTTPS / WebRTC)
WireGuard + wg-obfuscator
Приложение
→ iptables TPROXY
→ sing-box (route.final = WireGuard endpoint)
→ UDP 127.0.0.1:41320
→ wg-obfuscator (client, masking STUN/AUTO)
→ VPS:13255 (публичный obfuscator)
→ WireGuard на VPS (10.66.80.1 и т.д.)
Stealth-слой (параллельно)
Observer app (банк, RKNHardering)
→ connect(127.0.0.1:9090)
→ iptables REJECT (UID из stealth.list.cfg)
→ ECONNREFUSED (порт «закрыт»)
Ядро прокси (root) → loopback доступен, прокси работает
Установка
Из релиза
- Скачайте
pronbox-v*.zipиз Releases. - Magisk / KernelSU / APatch → Modules → Install from storage.
- При установке выберите загрузку sing-box (Vol+).
- Перезагрузите устройство.
Сборка из исходников
Windows / любая ОС (рекомендуется):
python tools/build_zip.py
# → pronbox-v1.14.0.zip
Linux / Git Bash:
sh build.sh
Профили и порты (шпаргалка)
| Профиль / протокол | Файл sing-box | Sidecar / UDP | route.final |
CLI |
|---|---|---|---|---|
| TrustTunnel | config-trusttunnel.json |
SOCKS :10800 |
sidecar-proxy |
sbfr p use trusttunnel |
| olcrtc | config-olcrtc.json |
SOCKS :10801 |
olcrtc-proxy |
sbfr p use olcrtc |
| WG + obfuscator | config-wg-obfs.json |
UDP :41320 |
wg-riga4 (endpoint tag) |
sbfr p use wg-obfs |
| Hysteria2 (нативно) | свой config.json / config-hy2.json |
- | proxy (hy2 outbound) |
вручную / BFR Manager |
| Комбо HY2+WG | config-hy2-wg.json |
опционально TT/olc | свой | BFR Manager |
Общие порты PronBox:
| Порт | Назначение |
|---|---|
9898 |
TPROXY inbound sing-box (прозрачный прокси) |
19090 |
mixed inbound (localhost, не 7890 - меньше Clash-fingerprint) |
10800 |
TrustTunnel SOCKS |
10801 |
olcrtc SOCKS |
41320 |
wg-obfuscator listen (loopback, sing-box WG peer сюда) |
Перед правкой конфигов остановите сервис:
sbfr stop.
Примеры настройки всех протоколов
0. Базовый settings.ini (общее для sidecar)
Файл: /data/adb/box/settings.ini
bin_name="sing-box"
network_mode="tproxy"
name_sing_config="config-trusttunnel.json"
# Stealth (по умолчанию включён)
stealth_mode="true"
stealth_hide_loopback="true"
stealth_disable_api="true"
# Sidecar: оба протокола + переключение final в JSON-профиле (BFR Manager)
sidecar_enable="true"
sidecar_protocol="both"
sidecar_set_final="false"
sidecar_tt_port="10800"
sidecar_olc_port="10801"
sidecar_outbound_tag="sidecar-proxy"
sidecar_olc_tag="olcrtc-proxy"
# WG obfuscator (только для профиля config-wg-obfs.json)
wgobfs_enable="false"
wgobfs_listen_port="41320"
wgobfs_config="${box_dir}/sidecar/wg-obfuscator.conf"
wgobfs_patch_config="true"
Установка бинарников sidecar / wg-obfuscator:
su -c /data/adb/box/scripts/box.tool upsidercar # trusttunnel_client + olcrtc (если есть в релизе)
su -c /data/adb/box/scripts/box.tool upwgobfs # wg-obfuscator arm64
1. Hysteria2 (нативный outbound sing-box)
Подходит, если на VPS уже поднят Hysteria2 без sidecar.
Фрагмент /data/adb/box/sing-box/config.json:
{
"inbounds": [
{ "type": "tproxy", "tag": "tproxy-in", "listen": "::", "listen_port": 9898 },
{ "type": "mixed", "tag": "mixed-in", "listen": "127.0.0.1", "listen_port": 19090 }
],
"outbounds": [
{
"type": "hysteria2",
"tag": "proxy",
"server": "YOUR_SERVER_IP",
"server_port": 443,
"password": "YOUR_HYSTERIA2_PASSWORD",
"tls": {
"enabled": true,
"server_name": "your.domain.example",
"alpn": ["h3"]
}
},
{ "type": "direct", "tag": "direct" }
],
"route": {
"rules": [
{ "domain_suffix": ["yandex.ru", "ya.ru"], "outbound": "direct" },
{ "ip_cidr": ["YOUR_SERVER_IP/32"], "outbound": "direct" }
],
"final": "proxy"
}
}
В settings.ini: name_sing_config="config.json", sidecar_enable="false", wgobfs_enable="false".
Проверка:
su -c /data/adb/box/scripts/box.tool check
sbfr start
2. TrustTunnel (sidecar → SOCKS :10800)
Шаг 1. Экспорт клиентского конфига с вашего TrustTunnel endpoint (на сервере):
trusttunnel_endpoint vpn.toml hosts.toml -c client -a server --format toml
Шаг 2. Положить на телефон /data/adb/box/sidecar/trusttunnel.toml (из экспорта).
Обязательно SOCKS на loopback 10800:
[listener]
type = "socks5"
address = "127.0.0.1:10800"
# ... credentials / TLS из экспорта endpoint ...
Шаг 3. Профиль sing-box: скопировать шаблон и указать свой HY2/VLESS fallback при необходимости:
cp /data/adb/box/sing-box/config-trusttunnel.json /data/adb/box/sing-box/config-trusttunnel.json.bak
# в config-trusttunnel.json уже есть:
# outbounds[].tag = sidecar-proxy → 127.0.0.1:10800
# route.final = sidecar-proxy
Шаг 4. Переключение:
sbfr p use trusttunnel
# или BFR Manager → Manage Profiles → config-trusttunnel.json
Цепочка: App → TPROXY → sing-box → SOCKS:10800 → trusttunnel_client → VPS.
3. olcrtc (sidecar → SOCKS :10801)
Шаг 1. Собрать или положить бинарник olcrtc в /data/adb/box/bin/olcrtc (chmod 755).
Шаг 2. Конфиг /data/adb/box/sidecar/olcrtc.yaml:
mode: cnc
auth:
provider: telemost
room:
id: "YOUR_TELEMOST_NUMERIC_ROOM_ID"
crypto:
key: "64_HEX_CHARS_SAME_ON_SERVER_AND_CLIENT"
net:
transport: vp8channel
dns: "192.168.0.1:53"
socks:
host: "127.0.0.1"
port: 10801
data: /data/adb/box/run/olcrtc-data
room.id- числовой id комнаты Telemost, не полный URL.
net.dns- LAN DNS роутера; публичный DNS из root-контекста olcrtc часто зависает.
Шаг 3. Профиль config-olcrtc.json: route.final = olcrtc-proxy, SOCKS :10801.
Шаг 4. Переключение:
sbfr p use olcrtc
4. TrustTunnel + olcrtc одновременно (переключение в BFR Manager)
Оба sidecar поднимаются параллельно; какой exit - решает route.final в выбранном JSON-профиле.
settings.ini:
sidecar_enable="true"
sidecar_protocol="both"
sidecar_set_final="false"
В приложении BFR Manager → Manage Profiles:
config-trusttunnel.json→ exit через TrustTunnel (sidecar-proxy)config-olcrtc.json→ exit через olcrtc (olcrtc-proxy)
CLI то же самое: sbfr p use trusttunnel / sbfr p use olcrtc.
5. WireGuard + wg-obfuscator (профиль config-wg-obfs)
Нужен obfuscator на VPS с тем же key. Plain WireGuard на публичный UDP obfuscator не подключится.
Клиент /data/adb/box/sidecar/wg-obfuscator.conf:
[client]
source-if = 127.0.0.1
source-lport = 41320
target = YOUR_VPS_IP:13255
key = YOUR_SHARED_OBFS_KEY
masking = AUTO
verbose = INFO
Сервер (VPS) - см. box/sidecar/wg-obfuscator.server.example.conf:
[server]
source-if = 0.0.0.0
source-lport = 13255
target = 127.0.0.1:51820
key = YOUR_SHARED_OBFS_KEY
masking = AUTO
WireGuard на VPS слушает 51820; снаружи клиенты бьют в 13255 (obfuscator).
Профиль sing-box /data/adb/box/sing-box/config-wg-obfs.json (фрагмент):
{
"endpoints": [{
"type": "wireguard",
"tag": "wg-riga4",
"mtu": 1280,
"address": ["10.66.80.3/32"],
"private_key": "YOUR_WG_PRIVATE_KEY",
"peers": [{
"address": "127.0.0.1",
"port": 41320,
"public_key": "YOUR_WG_PEER_PUBLIC_KEY",
"allowed_ips": ["0.0.0.0/0"],
"persistent_keepalive_interval": 25
}]
}],
"route": {
"rules": [
{ "ip_cidr": ["YOUR_VPS_IP/32"], "outbound": "direct" },
{ "ip_cidr": ["10.66.80.0/24"], "outbound": "wg-riga4" },
{ "ip_cidr": ["192.168.0.0/16", "127.0.0.0/8"], "outbound": "direct" }
],
"final": "wg-riga4"
}
}
PronBox при старте перепишет peer на 127.0.0.1:41320 (если wgobfs_patch_config="true"), VPS IP уйдёт в /data/adb/box/run/wgobfs-real-peers.txt.
Включение:
sbfr p use wg-obfs
# alias: sbfr p use wg | sbfr p use riga4
su -c /data/adb/box/scripts/box.wgobfs status
ping -c 3 10.66.80.1
6. Комбо Hysteria2 + WireGuard (config-hy2-wg.json)
Для сценария «HY2 как основной exit + WG endpoint для LAN/VPS».
Создайте файл в /data/adb/box/sing-box/config-hy2-wg.json:
outbounds: hysteria2proxy+ socks sidecar (если нужны TT/olc)endpoints: wireguardwg-homeс peer на VPS или через obfuscatorroute.rules:.ru/ private →direct, HY2 server IP →direct,final→proxyили sidecar
Выберите профиль в BFR Manager или:
name_sing_config="config-hy2-wg.json"
Шаблон можно собрать из рабочего конфига:
su -c '/data/adb/box/scripts/box.profile seed'
cp /data/adb/box/sing-box/config-trusttunnel.json /data/adb/box/sing-box/config-hy2-wg.json
# добавьте/оставьте endpoints WireGuard и нужный route.final
7. Stealth + blacklist (банки, RKNHardering)
Observer apps (не видят localhost-прокси) - /data/adb/box/stealth.list.cfg:
com.notcvnt.rknhardering
ru.sberbankmobile
com.idamob.tinkoff.android
ru.gosuslugi.gosapp
Blacklist (трафик мимо прокси, домашний IP) - /data/adb/box/package.list.cfg:
mode:blacklist
com.notcvnt.rknhardering
ru.sberbankmobile
ru.gosuslugi.gosapp
После установки новых банков:
su -c /data/adb/box/scripts/box.stealth renew
su -c /data/adb/box/scripts/box.iptables renew
Быстрый старт (чеклист)
- Установить ZIP, перезагрузка,
sbfr start - Выбрать протокол (см. таблицу выше) и заполнить sidecar / sing-box конфиг
sbfr p use trusttunnel|olcrtc|wg-obfssbfr p status- проверитьroute.finalи PID процессов- Для RKN:
stealth.list.cfg+ blacklist вpackage.list.cfg
Seed профилей из текущего рабочего конфига:
su -c '/data/adb/box/scripts/box.profile seed'
sbfr p list
Stealth (без LSPosed)
Скрипт /data/adb/box/scripts/box.stealth реализует port-hide по модели vpnhide/portshide:
| Механизм | Описание |
|---|---|
| Loopback block | Для UID из stealth.list.cfg блокируется 127.0.0.0/8 и ::1 |
| INPUT drop | TCP на proxy/API-порты с LAN (не с loopback) |
| API lockdown | REST API sing-box/clash удаляется или bind только на 127.0.0.1 |
| TUN forbid | network_mode=tun принудительно заменяется на tproxy |
| QUIC block | Опционально REJECT UDP 443/80 |
Настройки в settings.ini
stealth_mode="true"
stealth_hide_loopback="true"
stealth_block_external_api="true"
stealth_disable_api="true"
stealth_api_bind="127.0.0.1"
stealth_api_port="19090"
stealth_block_quic="false"
stealth_forbid_tun="true"
stealth_extra_ports=("7890" "7891" "19090" "1080" "10808" "2080" "41320" "10800" "10801" "9090" "9091" "1053")
Что закрывает / что нет
| Закрывает | Не закрывает |
|---|---|
Clash/sing-box API scan (127.0.0.1:9090) |
GeoIP «IP не РФ / hosting» |
| Localhost SOCKS/proxy probe от observer apps | Root / Magisk detection |
TUN-интерфейсы (tun0, MTU) |
Policy routing fwmark (нативно) |
| REST API на LAN | Установленные VPN-приложения (needsReview) |
Полный NOT DETECTED против RKNHardering + VPS + root недостижим. Цель форка - убрать hard detect от localhost, API и TUN.
Sidecar: olcrtc и TrustTunnel (кратко)
Подробные пошаговые примеры - в разделе Примеры настройки всех протоколов (п. 2-4).
| Протокол | Конфиг sidecar | SOCKS порт | sing-box outbound tag |
|---|---|---|---|
| TrustTunnel | /data/adb/box/sidecar/trusttunnel.toml |
10800 |
sidecar-proxy |
| olcrtc | /data/adb/box/sidecar/olcrtc.yaml |
10801 |
olcrtc-proxy |
Шаблоны: box/sidecar/trusttunnel.example.toml, box/sidecar/olcrtc.example.yaml.
WireGuard Obfuscator (кратко)
Полный пример клиент + сервер + config-wg-obfs.json - в разделе п. 5.
Репозиторий: ClusterM/wg-obfuscator.
Обязателен на обоих концах с одинаковым key.
su -c /data/adb/box/scripts/box.tool upwgobfs
sbfr p use wg-obfs
Структура модуля
| Путь | Назначение |
|---|---|
/data/adb/box/settings.ini |
Главный конфиг |
/data/adb/box/stealth.list.cfg |
Observer apps для port-hide |
/data/adb/box/package.list.cfg |
Blacklist/whitelist приложений |
/data/adb/box/sing-box/config-trusttunnel.json |
Профиль TrustTunnel |
/data/adb/box/sing-box/config-olcrtc.json |
Профиль olcrtc |
/data/adb/box/sing-box/config-wg-obfs.json |
Профиль WG + wg-obfuscator |
/data/adb/box/sing-box/config-hy2-wg.json |
Комбо HY2 + WG (создаётся вручную) |
/data/adb/box/sing-box/config.json |
Активный конфиг (или через name_sing_config) |
/data/adb/box/sidecar/ |
trusttunnel.toml, olcrtc.yaml, wg-obfuscator.conf |
/data/adb/box/bin/ |
Бинарники (sing-box, sidecar) |
/data/adb/box/run/ |
Логи, PID, UID-списки |
/data/adb/box/scripts/box.stealth |
Stealth iptables |
/data/adb/box/scripts/box.sidecar |
Sidecar lifecycle |
/data/adb/box/scripts/box.profile |
Переключение TT / olcrtc / wg-obfs |
/data/adb/box/scripts/box.service |
Старт/стоп ядра |
/data/adb/box/scripts/box.iptables |
TPROXY правила |
Управление сервисом
Старт / стоп
# Запуск
su -c /data/adb/box/scripts/box.service start
su -c /data/adb/box/scripts/box.iptables enable
# Остановка
su -c /data/adb/box/scripts/box.iptables disable
su -c /data/adb/box/scripts/box.service stop
# Перезапуск
su -c /data/adb/box/scripts/box.service restart
Полезные команды
su -c /data/adb/box/scripts/box.service status
su -c /data/adb/box/scripts/box.stealth status
su -c /data/adb/box/scripts/box.sidecar status
su -c /data/adb/box/scripts/box.tool upkernel # обновить sing-box
su -c /data/adb/box/scripts/box.tool upsidercar # olcrtc + trusttunnel
su -c /data/adb/box/scripts/box.tool check # проверить конфиг
su -c /data/adb/box/scripts/box.tool reload # reload (если API включён)
su -c /data/adb/box/scripts/box.tool
# check | geosub | geox | subs | upkernel | upsidercar | upyq | upcurl | reload | all
su -c /data/adb/box/scripts/box.iptables
# enable | disable | renew
CLI-шорткат
sbfr start # start + iptables
sbfr stop # disable + stop
sbfr s status # статус сервиса
sbfr i enable # iptables
sbfr p use trusttunnel # профиль TT
sbfr p use olcrtc # профиль olcrtc
sbfr p use wg-obfs # WG + wg-obfuscator
sbfr p list | status
Тест против RKNHardering
com.notcvnt.rknhardering→stealth.list.cfg- Тот же package →
package.list.cfgblacklist (checker вне прокси) stealth_disable_api="true",network_mode="tproxy"- Запустить PronBox → запустить RKNHardering
Ожидаемый результат: модули Bypass Check (Clash API, localhost proxy) и Indirect Signs (TUN) не должны давать hard detect. GeoIP/hosting и root-следы могут остаться.
Рекомендуемый стек
Magisk / KernelSU / APatch
└── PronBox (НИИ «ТехноПрон»)
├── network_mode=tproxy, bin_name=sing-box
├── stealth.list.cfg → банки, маркетплейсы
├── package.list.cfg → whitelist нужных app ИЛИ blacklist checker'ов
└── sidecar → TrustTunnel / olcrtc / wg-obfuscator
Обновление модуля
Установите новый ZIP поверх старого через Magisk Manager. При запросе restore settings.ini - Vol+ сохранит ваши настройки stealth/sidecar.
Удаление
- Отключите модуль в Magisk / KernelSU / APatch Manager.
- Очистите данные:
su -c rm -rf /data/adb/box
su -c rm -rf /data/adb/service.d/box_service.sh
su -c rm -rf /data/adb/modules/box_for_root
Ограничения и disclaimer
- Модуль требует root. Это само по себе детектируется native-проверками.
- Stealth не маскирует Java API (
NetworkCapabilities) - для этого нужен kernel hook (VPN Hide kmod), мы сознательно обходимся без LSPosed. - olcrtc на Android требует ручной сборки бинарника.
- TrustTunnel в sing-box upstream пока через sidecar SOCKS, не нативный outbound.
- Автор не несёт ответственности за блокировки аккаунтов, некорректные конфиги и петли маршрутизации.
Credits
- taamarin/box_for_magisk - базовый модуль
- CHIZI-0618/box4magisk - оригинальный Box for Magisk
- okhsunrog/vpnhide - идея port-hide без LSPosed
- openlibrecommunity/olcrtc - WebRTC-туннель
- TrustTunnel/TrustTunnel - HTTPS VPN-протокол
- xtclovver/RKNHardering - референс методики детекта
License
GPL-3.0 - см. LICENSE.