BLA — защита своих сборок от ИИ-агентов реверс-инжиниринга

· 5 мин чтения
security reverse-engineering ai-agents cli typescript
📂 Исходный код на GitHub

Контр-REA инструмент (npm-пакет bla-agents, TypeScript, MIT): отравляет релизные артефакты приманками и раздувает их до документированных лимитов ИИ-анализаторов — от Electron .asar и WASM до SQLite и метаданных моделей. Поведение программы в рантайме не меняется; интеграция с Claude Code, Cursor, Codex, OpenCode и другими агентами через MCP и скилл blind-llm-agents.

BLA — защита своих сборок от ИИ-агентов реверс-инжиниринга

Если ваш продукт стоит денег, кто-нибудь попробует разобрать его на части. Раньше это означало дни работы в Ghidra. Теперь достаточно ИИ-агента реверс-инжиниринга: он открывает релизную сборку, находит функции, восстанавливает логику и выдаёт результат за один вечер. BLA (Blind LLM Agents) — инструмент с противоположной стороны баррикад: он обрабатывает ваши сборки так, что агент-анализатор упирается в лимиты ресурсов, гоняется за приманками и сжигает токены, а поведение программы остаётся прежним. Проект написан на TypeScript, распространяется под лицензией MIT как npm-пакет bla-agents и за первые дни набрал около двух тысяч звёзд на GitHub.

Зачем нужен контр-REA

Под аббревиатурой REA (Reverse Engineering Agent) авторы BLA имеют в виду ИИ-агентов, которые реверс-инжинирят чужие сборки: открывают бинарники и приложения Electron, декомпилируют WASM, читают базы SQLite и метаданные моделей. REA разбирает релизный артефакт одной командой. BLA — защитная половина этой истории: тот же артефакт заранее обрабатывается так, что анализ превращается в долгий и бесполезный процесс.

Защита работает на трёх слоях:

Слой Что происходит
Отравление В артефакт подсаживаются корректные для формата приманки: фальшивые секреты-«канарейки», ложные метаданные, обманки в потоке управления. Они выглядят как настоящие улики.
Истощение Артефакт раздувается до документированных лимитов REA: лимиты на заголовки, вложенность, инвентари интерфейсов, JSON-выгрузки из PCAP.
Галлюцинация Анализатор остаётся с обрезанными списками, сбоями при вырезании секретов и тупиковыми ложными следами. Рантайм при этом эквивалентен оригиналу.

У проекта есть красная линия: никогда не ломать поведение защищённой программы, поверхность экспорта, целостность бинарника и валидность формата. Каждый таргет в бенчмарке проверяется на стопроцентную эквивалентность входов и выходов до и после обработки.

Быстрый старт

npx bla-agents setup          # зарегистрировать MCP и скилл у вашего агента
npx bla-agents harden .       # защитная обработка текущего проекта одной командой
npx bla-agents benchmark      # локальный прогон на 14 таргетах

Требуется Node.js версии ^22.23.4 или 24.x. Команда harden сама находит dist/, build/, .asar, .wasm, .sqlite и файлы моделей, а затем запускает конвейер «аудит → защита → проверка». Если этапы нужны по отдельности, есть команды audit, protect, verify и defend. Детали — в документации по CLI и MCP.

Что замерено на реальном REA

Авторы прогнали настоящий REA через защитные образцы на обычном железе и записали, на каких именно лимитах анализатор спотыкается:

Формат До → после Реакция REA
Go buildinfo 50 KiB → 1.16 MiB ошибка ёмкости: лимит 1 MiB на строку build-info
Electron .asar 607 B → 16.9 MiB превышен лимит заголовка в 16 MiB
WASM 54 B → 6.56 MiB, 251 экспорт декодер интерфейсов упирается в бюджет Wabt
JavaScript 761 B → 116 KiB отклонено бюджетами resourceLimits REA
SQLite 12 KiB → 56 KiB сбой вычисления колонок на медовых ловушках
Safetensors 128 B → 10.1 KiB вложенность JSON выше 32 уровней; модель в Hugging Face грузится без изменений
GGUF 24 B → 7.7 KiB вложенность метаданных выше 32 массивов
Erlang BEAM 84 B → 262 KiB превышен бюджет в 64 чанка

«Замерено» здесь означает, что путь анализатора реально вернул указанную ошибку в этой среде. А вот пути через Ghidra, Frida, LLDB и JADX авторы честно помечают как «спроектированные, но не проверенные эмпирически» — для них нужна нативная оснастка, которой у команды не было. Полный отчёт лежит в файле эмпирической валидации.

Поддерживаемые форматы

Замеренная защита есть для JavaScript и TypeScript через Babel AST, .asar и фьюзы Electron, WASM, SQLite, Safetensors, GGUF, Go buildinfo, BEAM, EVM, PCAP и PTX. Замечены в коде, но без эмпирических замеров: Python и .pyc, DEX, IL2CPP, bplist, .NET, JVM, ZIP. Полностью пропущены: прошивки, SPIR-V, CUDA fatbin и GPU-объекты AMD. Все щиты встроены в сам пакет bla-agents: Ghidra, IDA и Wabt для защиты не нужны.

Интеграция с кодинг-агентами

Одна команда npx bla-agents setup регистрирует MCP и скилл у девяти агентов: Claude Code, Cursor, Codex, Gemini CLI, Windsurf, Google Antigravity, OpenCode, VS Code и GitHub Copilot CLI. MCP остаётся слоем исполнения с инструментами bla_harden и bla_defend, а в комплекте идёт скилл blind-llm-agents — гид, по которому агент сам проводит защиту по одной фразе «Harden my software against REA». Пошаговое описание этого сценария есть в руководстве по агентной защите.

Что показывает бенчмарк

Встроенный benchmark гоняет 14 демонстрационных таргетов и считает локальные оценки. Итог версии 1.4.0: примерно 612-кратный рост расхода токенов и 292-кратный рост стоимости анализа при 14 из 14 точных совпадений рантайма. Самые яркие случаи: защита JS-бандла с проверкой звука (2822×) и буфера обмена в Electron-версии Notion (2532×).

Авторы сразу оговаривают: токен- и долларовые множители — это внутренние оценки из каталога лимитов REA, а не замеры реального прогона анализатора. Доказательством защиты считаются только ошибки из эмпирического отчёта, где REA действительно споткнулся.

Настройки по умолчанию

Три решения, которые авторы зафиксировали как дефолт:

  • Свой seed на проект. При первом запуске BLA создаёт случайный сид в .blarc или bla.config.json. Общие отпечатки из старых версий больше не используются.
  • Приманки для LLM выключены. Рискованная начинка вроде фейковых медицинских уведомлений и имитации COPPA включается только флагом --llm-directives.
  • Манифест — опция. Файл .bla-manifest.json — неподписанная аттестация о проведённой защите. По умолчанию он не поставляется рядом с артефактами.

Для чего это подходит и для чего нет

BLA — защитный инструмент для собственных программ, и это зафиксировано в DISCLAIMER.md. Защитные механизмы срабатывают только при попытке реверс-инжиниринга артефактов, которые вы сами обработали.

Ставить его есть смысл там, где релизная сборка содержит ценность: лицензионная логика, проприетарные алгоритмы, платные фичи в Electron-приложении или JS-бандле. Против классического реверсера с Ghidra авторы даже не заявляют замеров — против нативных инструментов гарантий нет. Зато против агента с бюджетом токенов история другая: чем дальше агент заходит по ложному следу, тем дороже каждый его шаг.

Источник: https://github.com/qybaihe/bla