{"slug":"v8unpack-cf","title":"v8unpack-cf","summary":"Распаковка и сборка бинарных файлов 1С (CF/CFE/EPF) через Python-утилиту v8unpack. Используй когда нужно распаковать конфигурацию, расширение или обработку в исходники, или собрать обратно.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T17:35:12.889412Z","repo":{"url":"https://github.com/Desko77/claude-code-skills-1c","stars":72,"forks":16,"license":"MIT","updatedAt":"2026-09-24T10:53:41Z"},"bodyHtml":"<hr>\n<p>name: v8unpack-cf\ndescription: \"Распаковка и сборка бинарных файлов 1С (CF/CFE/EPF) через Python-утилиту v8unpack. Используй когда нужно распаковать конфигурацию, расширение или обработку в исходники, или собрать обратно.\"\nargument-hint: \"&lt;-E|-B&gt;  </p>\n<ul>\n<li>Bash</li>\n<li>Read</li>\n<li>Glob</li>\n<li>Grep</li>\n</ul>\n<hr>\n<h1>v8unpack-cf — распаковка и сборка бинарных файлов 1С</h1>\n<p>Утилита <code>saby v8unpack</code> (Python) распаковывает CF/CFE/EPF файлы 1С в человекочитаемые исходники (JSON + BSL) с деревом метаданных — <strong>без платформы 1С</strong>.</p>\n<p>Установка: <code>pip install v8unpack</code> (или dev-install из репозитория).</p>\n<h2>Команды</h2>\n<h3>Распаковка (-E)</h3>\n<pre><code>python -m v8unpack -E \"&lt;файл.cf&gt;\" \"&lt;папка_исходников&gt;\" --temp \"&lt;папка_temp&gt;\"\n</code></pre>\n<table>\n<thead>\n<tr>\n<th>Параметр</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>&lt;файл.cf&gt;</code></td>\n<td>Путь к CF, CFE или EPF файлу</td>\n</tr>\n<tr>\n<td><code>&lt;папка_исходников&gt;</code></td>\n<td>Куда распаковать (создаётся автоматически)</td>\n</tr>\n<tr>\n<td><code>--temp &lt;путь&gt;</code></td>\n<td>Папка для промежуточных данных (не удаляется — для отладки)</td>\n</tr>\n<tr>\n<td><code>--processes N</code></td>\n<td>Количество потоков (по умолчанию cpu_count - 2)</td>\n</tr>\n<tr>\n<td><code>--descent XYYZZZ</code></td>\n<td>Режим версионирования расширений (суффикс версии конфигурации)</td>\n</tr>\n<tr>\n<td><code>--auto_include</code></td>\n<td>Динамическое оглавление из папки, а не из заголовка</td>\n</tr>\n<tr>\n<td><code>--prefix STR</code></td>\n<td>Префикс имён метаданных 1-го уровня</td>\n</tr>\n</tbody>\n</table>\n<h3>Сборка (-B)</h3>\n<pre><code>python -m v8unpack -B \"&lt;папка_исходников&gt;\" \"&lt;файл.cf&gt;\"\n</code></pre>\n<table>\n<thead>\n<tr>\n<th>Параметр</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>&lt;папка_исходников&gt;</code></td>\n<td>Папка с распакованными исходниками</td>\n</tr>\n<tr>\n<td><code>&lt;файл.cf&gt;</code></td>\n<td>Путь к выходному CF/CFE/EPF файлу</td>\n</tr>\n<tr>\n<td><code>--index &lt;path&gt;</code></td>\n<td>JSON-файл оглавления (маппинг файлов по папкам)</td>\n</tr>\n<tr>\n<td><code>--version XYYZZ</code></td>\n<td>Версия режима совместимости (для расширений), напр. <code>80306</code> = 8.3.6</td>\n</tr>\n<tr>\n<td><code>--descent XYYZZZ</code></td>\n<td>Суффикс версии конфигурации</td>\n</tr>\n</tbody>\n</table>\n<h3>Индексация (-I)</h3>\n<pre><code>python -m v8unpack -I \"&lt;папка_исходников&gt;\" --index index.json --core core\n</code></pre>\n<p>Генерирует/обновляет <code>index.json</code> — файл оглавления для раскладки исходников по подпапкам.</p>\n<h3>Пакетные операции (-EA, -BA, -IA)</h3>\n<pre><code>python -m v8unpack -EA products.json              # распаковать все продукты\npython -m v8unpack -BA products.json              # собрать все продукты\npython -m v8unpack -BA products.json --index KEY  # собрать конкретный продукт\n</code></pre>\n<p>Файл <code>products.json</code> описывает несколько продуктов с индивидуальными параметрами сборки.</p>\n<h2>Python API</h2>\n<pre><code>import v8unpack\n\nv8unpack.extract('d:/sample.cf', 'd:/src')\nv8unpack.extract('d:/sample.cf', 'd:/src', temp_dir='d:/temp',\n                 options={'descent': 4100200, 'auto_include': True})\n\nv8unpack.build('d:/src', 'd:/repacked.cf')\nv8unpack.build('d:/src', 'd:/repacked.cf', index='index.json',\n               options={'descent': 4100200, 'version': '80306'})\n</code></pre>\n<h2>Примеры использования</h2>\n<h3>Распаковать конфигурацию</h3>\n<pre><code>python -m v8unpack -E \"&lt;project&gt;/1Cv8.cf\" \"&lt;project&gt;/src\" --temp \"&lt;project&gt;/temp\"\n</code></pre>\n<h3>Собрать обратно</h3>\n<pre><code>python -m v8unpack -B \"&lt;project&gt;/src\" \"&lt;project&gt;/1Cv8_new.cf\"\n</code></pre>\n<h3>Распаковать внешнюю обработку</h3>\n<pre><code>python -m v8unpack -E \"МояОбработка.epf\" \"src_epf\"\n</code></pre>\n<h3>Распаковать расширение</h3>\n<pre><code>python -m v8unpack -E \"МоёРасширение.cfe\" \"src_cfe\" --descent 3000112\n</code></pre>\n<h3>Собрать расширение</h3>\n<pre><code>python -m v8unpack -B \"src_cfe\" \"bin/ext.cfe\" --index cmd/index.json --descent 3000112 --version 80316\n</code></pre>\n<h2>Совместимость версий</h2>\n<p>Версия утилиты записывается в <code>Configuration.json</code> (<code>\"v8unpack\": \"1.2.6\"</code>). При сборке проверяется совпадение major.minor. Если версии не совпадают:</p>\n<ol>\n<li>Собрать старой версией</li>\n<li>Обновить утилиту</li>\n<li>Распаковать новой версией</li>\n<li>Закоммитить</li>\n</ol>\n<h3>Круговая сборка: проверяй, а не верь на слово</h3>\n<p>Про версию 1.2.6 встречается утверждение, что при сборке (<code>-B</code>) она пишет в заголовок контейнера\nразмер блока <code>0x54</code> вместо <code>0x200</code>, из-за чего результат приходится патчить.</p>\n<p><strong>На 1.2.9 это не воспроизводится</strong> (проверено 14.08.2026 на реальной <code>.epf</code> 1.8 МБ): распаковка и\nобратная сборка проходят без ошибок, в заголовке и исходного, и пересобранного файла\n<code>page_size = 0x200</code>. Размер файлов при этом отличается - это нормально и само по себе о поломке не\nговорит.</p>\n<p>Отсюда правило: перед тем как городить патч заголовка, <strong>сделай круговую проверку на своей версии</strong>.</p>\n<pre><code>python -m v8unpack -E исходный.epf ./src\npython -m v8unpack -B ./src пересобранный.epf\npython -c \"import struct;print([hex(struct.unpack('&lt;IIII', open(p,'rb').read(16))[1]) for p in ('исходный.epf','пересобранный.epf')])\"\n</code></pre>\n<p>Оба значения <code>0x200</code> - заголовок в порядке. Дальше проверяется главное: пересобранный файл должен\nоткрываться платформой и содержать те же модули.</p>\n<h2>Промежуточные стадии (--temp)</h2>\n<table>\n<thead>\n<tr>\n<th>Стадия</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>decode_stage_0/</code></td>\n<td>Извлечение из контейнера 1С</td>\n</tr>\n<tr>\n<td><code>decode_stage_1/</code></td>\n<td>Декомпрессия (zlib), скобкофайлы</td>\n</tr>\n<tr>\n<td><code>decode_stage_3/</code></td>\n<td>Разбор метаданных → дерево</td>\n</tr>\n<tr>\n<td>Папка назначения</td>\n<td>Организация кода (include, элементы форм)</td>\n</tr>\n</tbody>\n</table>\n<h2>Ограничения</h2>\n<ul>\n<li>Свойства объектов и разметка форм хранятся в <code>header</code> / <code>raw</code> как сырые массивы</li>\n<li>Файлы &gt; 1 МБ (макеты, HTML) хранятся как <code>.bin</code> без декодирования</li>\n<li>Зашифрованные модули сохраняются в бинарном виде</li>\n<li>При <code>--auto_include</code> вложенные объекты сортируются по алфавиту</li>\n</ul>\n","files":[{"path":"evals/evals.json","sizeBytes":2839,"isText":true},{"path":"SKILL.md","sizeBytes":7489,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-28T19:24:55.040812Z","sha256":"036576B9157BE94721D53E70BCE93B8028309D4C2955F65849DDEA2D5E172F1D","sizeBytes":3846},"review":null,"source":{"repositoryUrl":"https://github.com/Desko77/claude-code-skills-1c","path":"skills/v8unpack-cf","license":"MIT","commit":"3accdd9a57aca1aabbe49a892a932df403ad5059","subtreeSha":"0413DCB48D560A7D95097710F9313A7F5C7E47A3AAFBA3F554422F5D47D66E10","lastSyncedAt":"2026-09-27T20:54:37.190964Z"},"reviewedAt":"2026-08-28T19:30:01.723811Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/v8unpack-cf"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart"},{"target":"git","command":"git clone https://github.com/Desko77/claude-code-skills-1c.git"}]}