Реверс-инжиниринг Claude Code
Prajwalsrinvas/claude-code-reverse-engineeringСкилл для реверс-инжиниринга Claude Code: распаковывает минифицированный CLI, восстанавливает читаемый код через webcrack и prettier, анализирует внутренние механизмы команд и генерирует подробные markdown-отчёты.
Установка
git clone https://github.com/Prajwalsrinvas/claude-code-reverse-engineering.gitREADME
Как Claude Code работает изнутри
Глубокий анализ возможностей Claude Code методом реверс-инжиниринга — путём прямого чтения минифицированного исходного кода.
Зачем это нужно
Claude Code не является open source. Публичный репозиторий на GitHub содержит только плагины, примеры и changelogs — сам CLI поставляется в виде минифицированного JavaScript в npm-пакете. На момент запуска проекта официальной документации о внутренней работе /insights не существовало, и единственным способом разобраться было читать исходный код напрямую.
Первый анализ превратился в воспроизводимый процесс: получить npm-пакет, разминифицировать с помощью webcrack + prettier, найти якорные строки, извлечь нужный код, переименовать идентификаторы и задокументировать результаты. Процесс упакован в виде скилла Claude Code, чтобы его можно было применять к любой функции.
Глубокие разборы
| Функция | Что делает | Разбор |
|---|---|---|
/insights | Анализирует прошлые сессии, с помощью Opus извлекает структурированные аспекты из каждой, агрегирует статистику, генерирует текстовые разделы и создаёт HTML-отчёт | deep-dives/insights/ |
/compact | Очищает историю разговора, сохраняя подробное резюме. Два пути: быстрый путь через память сессии (без вызова LLM) и стандартный путь суммаризации через LLM | deep-dives/compact/ |
| Меню slash-команд | Выпадающий список автодополнения / — нечёткий поиск через Fuse.js с взвешенными полями, оценка давности с экспоненциальным затуханием, архитектура реестра команд | deep-dives/slash-commands/ |
/stats и /context | /stats показывает историческую статистику использования (тепловая карта в стиле GitHub, серии, разбивка токенов по моделям) из JSONL-файлов сессий с инкрементальным дисковым кешированием. /context визуализирует использование текущего контекстного окна в виде цветной сетки с количеством токенов по категориям | deep-dives/stats-and-context/ |
Каждая папка с разбором содержит README.md с полным описанием (диаграммы архитектуры, фрагменты кода, выводы). Разборы, потребовавшие существенного извлечения кода, также включают файл *-annotated.js с переименованными в осмысленные имена идентификаторами. Разбор slash-команд повторно использует код, уже извлечённый в аннотированном файле compact.
Скилл
Папка skill/ содержит кастомный скилл Claude Code, автоматизирующий процесс анализа:
- Получение исходника — Загрузка
cli.jsиз npm (npm pack @anthropic-ai/claude-code) - Разминификация — webcrack для синтаксических преобразований + prettier для форматирования (712K+ читаемых строк)
- Поиск — Поиск якорных строк (строковые литералы отлично сохраняются после минификации)
- Извлечение и аннотирование — Извлечение кода функции, переименование идентификаторов на месте
- Анализ — Документирование поведения, вызовов LLM, потоков данных
- Отчёт — Создание markdown-отчёта с доказательствами из кода
- Саморефлексия — Оценка того, нужно ли обновить сам скилл
Для использования скопируйте skill/ в ~/.claude/skills/analyze-cc-feature/ и вызовите командой /analyze-cc-feature [feature-name]. Требуется установленный Claude Code.
См. skill/SKILL.md для полных инструкций и skill/REFERENCE.md для сравнения инструментов, предшествующих работ и таблицы известных искажённых идентификаторов.
Как получается исходный код
CLI-реализация Claude Code поставляется в виде минифицированного cli.js (~11 МБ) в npm-пакете. Код минифицирован (пробелы удалены, идентификаторы сокращены), но не обфусцирован (нет выравнивания потока управления, нет шифрования строк). Это означает, что строковые литералы — промпты, сообщения об ошибках, имена полей, события телеметрии — полностью сохранены и служат основными доказательствами для понимания работы кода.
npm pack @anthropic-ai/claude-code
tar -xzf anthropic-ai-claude-code-*.tgz
npx webcrack package/cli.js --no-unpack --no-deobfuscate --force -o webcrack-output/
npx prettier --write webcrack-output/deobfuscated.jsРазминифицированный исходник (deep-dives/webcrack-output/deobfuscated.js) добавлен в gitignore — его размер ~17 МБ / 712K строк. Воспроизведите его с помощью команд выше или скриптов из skill/scripts/.
Предшествующие работы
Другие исследователи, занимавшиеся реверс-инжинирингом Claude Code:
| Кто | Метод |
|---|---|
| Martin Alderson | AST-диффинг с помощью acorn — ввёл термин «минификация — не обфускация» |
| 0xdevalias | Исчерпывающий каталог инструментов и техник |
| Sabrina | Конвейер деобфускации через LLM-субагентов |
| ghuntley | Транспиляция через LLM в чистой комнате |
| Kir Shatrov | Перехват API через mitmproxy |
| Reid Barber | Блог о реверс-инжиниринге |
| ShareAI Lab | Гибридный конвейер: статический + динамический анализ + LLM |
См. skill/REFERENCE.md для полного списка.
Используемые инструменты
| Инструмент | Назначение |
|---|---|
| webcrack | Синтаксическая разминификация |
| Prettier | Форматирование кода |
| Claude Code | Сам анализ (модель: Claude Opus 4.6) |