v8unpack-cf - распаковка и сборка бинарных файлов 1С

SkillFiles & storage

Unpacking and building 1C binary files (CF/CFE/EPF) via the v8unpack Python utility. Use when you need to unpack a configuration, extension, or data processor into sources, or build them back.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the v8unpack-cf - распаковка и сборка бинарных файлов 1С skill

What this skill tells your AI

The instructions your AI receives, as published by desko77/claude-code-skills-1c in skills/v8unpack-cf/SKILL.md and read by ahel’s review.

Утилита saby v8unpack (Python) распаковывает CF/CFE/EPF файлы 1С в человекочитаемые исходники (JSON + BSL) с деревом метаданных - без платформы 1С.

Установка: pip install v8unpack (или dev-install из репозитория).

Команды

Распаковка (-E)

python -m v8unpack -E "<файл.cf>" "<папка_исходников>" --temp "<папка_temp>"
ПараметрОписание
<файл.cf>Путь к CF, CFE или EPF файлу
<папка_исходников>Куда распаковать (создается автоматически)
--temp <путь>Папка для промежуточных данных (не удаляется - для отладки)
--processes NКоличество потоков (по умолчанию cpu_count - 2)
--descent XYYZZZРежим версионирования расширений (суффикс версии конфигурации)
--auto_includeДинамическое оглавление из папки, а не из заголовка
--prefix STRПрефикс имен метаданных 1-го уровня

Сборка (-B)

python -m v8unpack -B "<папка_исходников>" "<файл.cf>"
ПараметрОписание
<папка_исходников>Папка с распакованными исходниками
<файл.cf>Путь к выходному CF/CFE/EPF файлу
--index <path>JSON-файл оглавления (маппинг файлов по папкам)
--version XYYZZВерсия режима совместимости (для расширений), напр. 80306 = 8.3.6
--descent XYYZZZСуффикс версии конфигурации

Индексация (-I)

python -m v8unpack -I "<папка_исходников>" --index index.json --core core

Генерирует/обновляет index.json - файл оглавления для раскладки исходников по подпапкам.

Пакетные операции (-EA, -BA, -IA)

python -m v8unpack -EA products.json              # распаковать все продукты
python -m v8unpack -BA products.json              # собрать все продукты
python -m v8unpack -BA products.json --index KEY  # собрать конкретный продукт

Файл products.json описывает несколько продуктов с индивидуальными параметрами сборки.

Python API

import v8unpack

v8unpack.extract('d:/sample.cf', 'd:/src')
v8unpack.extract('d:/sample.cf', 'd:/src', temp_dir='d:/temp',
                 options={'descent': 4100200, 'auto_include': True})

v8unpack.build('d:/src', 'd:/repacked.cf')
v8unpack.build('d:/src', 'd:/repacked.cf', index='index.json',
               options={'descent': 4100200, 'version': '80306'})

Примеры использования

Распаковать конфигурацию

python -m v8unpack -E "<project>/1Cv8.cf" "<project>/src" --temp "<project>/temp"

Собрать обратно

python -m v8unpack -B "<project>/src" "<project>/1Cv8_new.cf"

Распаковать внешнюю обработку

python -m v8unpack -E "МояОбработка.epf" "src_epf"

Распаковать расширение

python -m v8unpack -E "МоеРасширение.cfe" "src_cfe" --descent 3000112

Собрать расширение

python -m v8unpack -B "src_cfe" "bin/ext.cfe" --index cmd/index.json --descent 3000112 --version 80316

Совместимость версий

Версия утилиты записывается в Configuration.json ("v8unpack": "1.2.6"). При сборке проверяется совпадение major.minor. Если версии не совпадают:

  1. Собрать старой версией
  2. Обновить утилиту
  3. Распаковать новой версией
  4. Закоммитить

Круговая сборка: проверяй, а не верь на слово

Про версию 1.2.6 встречается утверждение, что при сборке (-B) она пишет в заголовок контейнера размер блока 0x54 вместо 0x200, из-за чего результат приходится патчить.

На 1.2.9 это не воспроизводится (проверено 14.08.2026 на реальной .epf 1.8 МБ): распаковка и обратная сборка проходят без ошибок, в заголовке и исходного, и пересобранного файла page_size = 0x200. Размер файлов при этом отличается - это нормально и само по себе о поломке не говорит.

Отсюда правило: перед тем как городить патч заголовка, сделай круговую проверку на своей версии.

python -m v8unpack -E исходный.epf ./src
python -m v8unpack -B ./src пересобранный.epf
python -c "import struct;print([hex(struct.unpack('<IIII', open(p,'rb').read(16))[1]) for p in ('исходный.epf','пересобранный.epf')])"

Оба значения 0x200 - заголовок в порядке. Дальше проверяется главное: пересобранный файл должен открываться платформой и содержать те же модули.

Промежуточные стадии (--temp)

СтадияОписание
decode_stage_0/Извлечение из контейнера 1С
decode_stage_1/Декомпрессия (zlib), скобкофайлы
decode_stage_3/Разбор метаданных → дерево
Папка назначенияОрганизация кода (include, элементы форм)

Ограничения

  • Свойства объектов и разметка форм хранятся в header / raw как сырые массивы
  • Файлы > 1 МБ (макеты, HTML) хранятся как .bin без декодирования
  • Зашифрованные модули сохраняются в бинарном виде
  • При --auto_include вложенные объекты сортируются по алфавиту

Signals

GitHub stars
61
Forks
14
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
v8unpack-cf
Source
github.com/desko77/claude-code-skills-1c