leanrea — реверс-инжиниринг через один файл SKILL.md без MCP-сервера
📂 Исходный код на GitHubСкилл для реверс-инжиниринга Electron-приложений, нативных бинарников и сборок Go, Rust, .NET, Flutter и WASM: один файл SKILL.md вместо MCP-сервера, агент сам запускает обычные команды терминала. MIT
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