leanrea — реверс-инжиниринг через один файл SKILL.md без MCP-сервера

· 7 мин чтения
reverse-engineering skills cli tokens benchmarks
📂 Исходный код на GitHub

Скилл для реверс-инжиниринга Electron-приложений, нативных бинарников и сборок Go, Rust, .NET, Flutter и WASM: один файл SKILL.md вместо MCP-сервера, агент сам запускает обычные команды терминала. MIT

leanrea — реверс-инжиниринг через один файл SKILL.md без MCP-сервера

leanrea — это один файл SKILL.md размером 8 КБ, который учит агента разбирать уже собранные чужие программы. Задуман он как замена MCP-серверу REA: агент не получает ни одного нового инструмента, вместо этого ему объясняют, какие обычные команды терминала быстрее всего подходят под каждую задачу.

Реверс-инжиниринг здесь — это разбор готовой программы без исходного кода, чтобы понять, как она устроена: какие функции наружу экспортируются, какие каналы IPC связывают процессы, какая версия компилятора и библиотек зашита внутрь.

Зачем убирать MCP-прослойку

REA (Reverse Engineer Anything) ставит между агентом и инструментами слой MCP. Он умеет работать с asar, otool, nm, go version -m, jadx, apktool, Ghidra, tshark, binwalk и sqlite3 — то есть с программами, которые и так лежат в системе или ставятся одним пакетом. Плата за прослойку — 207 инструментов, определения которых весят 3,35 МБ.

leanrea выбрасывает прослойку и оставляет три вещи:

  • маршрутизацию: по типу файла и magic bytes выбирается самая дешёвая первая проверка;
  • готовые к вставке команды для первичной разведки;
  • список типичных граблей, которые в REA обрабатывает код.

Дальше агент сам запускает настоящие команды в терминале.

REA 6.5.0 leanrea
Что ставится npm-пакет 25 МБ и MCP-сервер один SKILL.md
Инструкций 23,5 КБ скилл и 48,8 КБ справочников 8 КБ
Инструментов у агента 207 (3,35 МБ определений) 0 (работает через Bash)
Контекст на запрос «Reply OK» со всеми инструментами 400,7k токенов и $1,60 34,5k токенов и $0,09

Бенчмарк

Прогон: Claude Code в headless-режиме (claude -p), модель Sonnet 5.5, macOS arm64. Четыре задачи, по три повтора на вариант, варианты запускались параллельно. Ответы сверялись с ключами, составленными вручную.

Задачи:

  • electron — пройти по фиче в настоящем Electron-приложении через app.asar: от нативной функции к классу главного процесса и дальше к каналам IPC;
  • native — перечислить экспорты, проверку разрешения TCC и блокировку второго экземпляра в нативном аддоне .node;
  • go — узнать версию тулчейна и зависимостей у срезанного бинарника gh;
  • deep — по одной только дизассемблировке определить формат пути сокета, протокол обмена и проверку собеседника.

Три варианта агента: leanrea, вообще без скилла, и REA (его MCP плюс его собственный скилл).

вариант общее время стоимость раундов токенов балл
leanrea 388 с $2,17 55 2,40 M 74/75
без скилла 479 с $2,21 81 3,11 M 67/75 (один отказ)
REA (MCP и его скилл) 627 с $3,36 124 5,93 M 75/75

Против REA leanrea показал на 38% меньше времени, на 35% ниже стоимость, на 56% меньше раундов диалога и на 60% меньше токенов — при той же точности. Единственный частичный промах: в одном прогоне назван устаревший канал IPC вместо актуального v2, причём оба канала существуют.

Против варианта без скилла выигрыш заметно скромнее: примерно на 19% быстрее, на 32% меньше раундов и на 23% меньше токенов при примерно одинаковой цене. Разница в том, что leanrea не отказался выполнять задачу там, где голая модель отказалась.

Сколько стоит контекст

Отдельный замер: сколько токенов агент тратит, чтобы ответить «Reply with exactly OK».

конфигурация токенов в контексте стоимость
ничего 31,4k $0,08
вызван leanrea 34,5k (+3,1k) $0,09
MCP от REA с отложенным поиском инструментов (обычный режим Claude Code) 34,9k (+3,5k) $0,09
скилл REA и MCP вместе 42,7k (+11,3k) $0,13
MCP от REA, поиск инструментов выключен (загружены все) 400,7k (+369k) $1,60

Сырой список инструментов REA — это 207 записей и 3,35 МБ JSON: 745 КБ схем входных данных, 2,46 МБ схем выходных, 90 КБ описаний.

Микробенчмарк: одна и та же операция

операция через CLI REA обычной командой
Данные о сборке Go для gh 0,56 с, 62,5 КБ go version -m: 0,06 с, 15,6 КБ
Обзор Mach-O для mac_utils.node 3,32 с, 52,8 КБ otool, dyld_info, nm: 0,04 с, 28,3 КБ
Разбор Electron-приложения Notion падает с artifact_integrity_mismatch, пока не подставишь --integrity-policy record-and-continue; потом 47,9 с и 140 МБ asar extract и rg -uu: 4,8 с, 24 КБ

Что внутри SKILL.md

Правила работы, которые агент обязан соблюдать:

  • работать на копии файла, а не на оригинале;
  • определять тип по file -b и magic bytes, потом запускать самую дешёвую проверку, и только потом декомпилировать;
  • не читать большие и минифицированные файлы целиком, а вырезать нужные куски;
  • собирать независимые проверки в один вызов терминала;
  • искать по распакованным деревьям через rg -uu, потому что бандлеры прячут код в точечных папках вроде .webpack/;
  • помечать каждое утверждение в ответе как увиденное (со ссылкой на файл и смещение), выведенное или неизвестное.

Дальше идёт таблица-маршрутизатор: самая быстрая команда для каждого типа цели.

Цель С чего начинать
Electron-приложение npx -y @electron/asar extract app.asar X, точка входа — jq .main X/package.json
Минифицированная сборка JS найти sourceMappingURL, при наличии sourcesContent вытащить исходники
Mach-O lipo -info, otool -L, nm -gU и nm -u, strings, otool -ov для классов Objective-C
Нативный код otool -tV в файл, затем поиск функции по имени и чтение цепочки вызовов
ELF и PE readelf -hlSW, readelf -dW, nm -D, objdump -d -M intel
Go go version -m — одной командой даёт тулчейн, зависимости и флаги сборки
Rust cargo audit для зависимостей, strings для версии компилятора
.NET ilspycmd -p и поиск по результату
Android APK jadx, для ресурсов и манифеста — apktool
WASM wasm-objdump -x, wasm2wat
SQLite копия базы и файла -wal, затем sqlite3 в режиме чтения
pcap и HAR tshark, для HAR — jq
Прошивка binwalk или unblob, дальше каждый извлечённый бинарник идёт по таблице
Сайт curl -sL, вырезание нужных кусков из JS, для поведения — headless-браузер с логом сети

Есть ещё два блока. «Первый ход» — по одной готовой команде, которую можно вставить и запустить, для нативных бинарников и для Electron: она сразу выдаёт полный перечень экспортов, импортов и строк за один вызов. И «приёмы ускорения»: начинать со строк и импортов; находить функцию по строке через комментарии literal pool в выводе otool; читать последовательность вызовов, а не каждую инструкцию; сравнивать сначала перечни (nm, список модулей), и только потом код.

Установка

npx skills add aicodeking/leanrea

Так используется skills CLI: он находит скилл leanrea и спрашивает, для каких агентов ставить — Claude Code, Codex, Cursor, Gemini CLI, OpenCode и другие.

Частые варианты:

npx skills add aicodeking/leanrea -g                 # для текущего пользователя, во все проекты
npx skills add aicodeking/leanrea -a claude-code -y  # только Claude Code, без вопросов
npx skills add aicodeking/leanrea -g -a '*' -y       # все поддерживаемые агенты, на уровне пользователя
npx skills update leanrea                            # позже подтянуть свежую версию

Ручная установка:

git clone https://github.com/aicodeking/leanrea
mkdir -p ~/.claude/skills && cp -R leanrea/leanrea ~/.claude/skills/

Если агент вообще не умеет скиллы, содержимое leanrea/SKILL.md можно вставить в его правила или системный промпт — это обычный текст.

Использование:

/leanrea How does the search feature in Foo.app work? Show the evidence.

Ограничения измерения

  • По три повтора на каждую ячейку, одна модель, одна машина.
  • REA тестировался в лучшем случае: Claude Code умеет подгружать инструменты MCP по требованию. Агенты, которые грузят всё сразу, попадают в строку с 400,7k токенов.
  • Ghidra, Hopper и jadx на машине не стояли, поэтому задачи по нативному коду в обоих вариантах шли на инструментах Xcode.
  • Простая модель и сама неплохо справляется с реверс-инжинирингом. Прирост leanrea над вариантом без скилла заметно меньше, чем над REA.

Исходники и таблицы — в репозитории: бенчмарк, файл скилла, сырые метрики прогонов, лицензия MIT.

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

Источник: https://github.com/aicodeking/leanrea