native · swift 6 · macOS 26+ · zero runtime deps

BleedSuite

Нативный перехватывающий прокси для macOS — нативный аналог Burp Suite, написанный на Swift без рантайм-зависимостей.

Разворачивается между браузером и сетью как HTTP/HTTPS-прокси: терминирует TLS через собственный удостоверяющий центр, фиксирует каждый обмен в истории, удерживает и переписывает трафик в полёте, отправляет запросы повторно с изменёнными параметрами. Одиннадцать воркспейсов, движок на Swift, ноль рантайм-зависимостей.

com.bleedsuite.proxy — ● active · ♥ 72 bpm
bleedsuite — zsh — 80×24live feed · proxy@macOS
proxy %↑/↓ история
01 // интерфейс

Интерфейс BleedSuite

BleedSuite — интерфейс нативного перехватывающего прокси для macOS
  • Dashboard: статус листенера, доверие CA, счётчики
  • Intercept: hold / edit / forward / drop
  • HTTP history с фильтрами и инспектором
  • Target: авто-карта хостов и эндпоинтов
  • Repeater и Comparer
  • Intruder с позициями § и Sequencer
  • Scanner: 12 пассивных + 4 активных
  • Match / Replace с тестовой областью
  • Settings: порт, CA, системный прокси, scope
02 // воркспейсы

Что делает каждый экран

Один sidebar — одиннадцать рабочих областей. Всё состояние живёт в AppModel, движок при этом не импортирует ни одного UI-фреймворка.

04 // исходники

Структура репозитория

Core не импортирует UI. UI — нативный фронтенд на SwiftUI + AppKit, AppKit там, где строк в таблице много. В scripts/ — soak, скриншоты и сравнение с реальным миром.

Sources/ Core/ движок — без UI-импортов HTTPParsing HTTP/1.1 парсер, chunked, framing ProxyServer листнер, сессии, MITM, upstream pool ByteStream NWConnection как async stream TLSTermination Secure Transport поверх socketpair CertAuthority Root CA, выпуск листов, trust RulesEngine Match & Replace + scope-фильтр InterceptQueue hold / edit / release HistoryStore thread-safe история, индекс фильтра BodyStore SQLite spill, project files Scanner пассивные и активные проверки Intruder позиции, словари, sweeps Spider поиск ссылок и краулинг Exporter HAR, CSV, XML, project JSON System обёртки networksetup / security Repeater ручной движок запросов, comparer Models модель сообщения, sitemap, issues SelfTest 137 проверок · --selftest UI/ нативный фронтенд (SwiftUI + AppKit) Theme дизайн-токены и цветовая шкала AppModel состояние приложения, event sink RootView sidebar, воркспейсы, site map UITest 22 проверки интерактивных путей · --uitest … по файлу на воркспейс, AppKit для больших таблиц scripts/ soak, скриншоты, real-world сравнения
// типографика. каждый шрифт проходит через Theme.typeScale в Sources/UI/Theme.swift — он прибавляется к каждому размеру в Theme.ui, Theme.monoSwiftUI и в NSFont-зеркале для AppKit-таблиц. Сейчас стоит 2: на номинальных размерах интерфейс читается мелко. Поставь 0 — получишь исходные размеры; магических офсетов на вызовах нет, больше трогать ничего не нужно.
05 // сборка

Собрать своими руками

Нужны macOS 26+ и тулчейн Swift 6 (Xcode 16 или Command Line Tools). Если тулчейна нет — бери готовый BleedSuite.dmg, он лежит в корне репозитория.

zsh — ~/BleedSuite
open BleedSuite.dmg# перетащить в Applications, запустить
git clone https://github.com/sucksecure-alt/BleedSuite && cd BleedSuite
./build.sh# debug-сборка, только ошибки
./package.sh# release → dist/Bleed Suite.app + .dmg
./package.sh --test# release-сборка, затем --selftest
./.build/debug/BleedSuite --selftest# 137 проверок движка
./.build/debug/BleedSuite --uitest# 22 проверки UI

// что делает package.sh

  • собирает universal binary: arm64 + x86_64
  • ad-hoc подпись с non-sandbox entitlements
  • собирает стилизованный DMG в dist/
  • готовые DMG прикреплены к tagged releases и архивируются CI — тулчейн конечному пользователю не нужен
  • SDK-нюанс: в Command Line Tools нет плагина SwiftUIMacros, который нужен каждому @State. Оба скрипта предпочитают SDK MacOSX26.x, если он есть. С полным Xcode это происходит автоматически

// первый запуск

  • перетащи Bleed Suite.app в Applications и запусти
  • Settings → CA: выпустить и установить Root CA, добавить в доверенные (обёртка над security)
  • Settings → System proxy: включить системный прокси (networksetup) либо прописать 127.0.0.1:<порт> руками в браузере
  • проверь статус на Dashboard — листенер, доверие CA, счётчики
06 // faq

Частые вопросы

Коротко о том, что спрашивают чаще всего. Подсказка: нажми / в любом месте, чтобы прыгнуть в терминал.