From 47f5015c3fdaf03288e7f2939879b98f39a5950c Mon Sep 17 00:00:00 2001 From: zuevav Date: Fri, 18 Sep 2026 20:14:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D1=83=D0=B4=D0=B8=D1=82:=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D1=8B=20=D0=BF.1=20(?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D0=BD=D0=B0)=20=D0=B8=20=D0=BF.2=20(garble?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=BC=D0=B0=D0=B5=D1=82=20html/template)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL --- docs/ip-audit-2026-09-18.md | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/ip-audit-2026-09-18.md b/docs/ip-audit-2026-09-18.md index c731e19..1d0f8a7 100644 --- a/docs/ip-audit-2026-09-18.md +++ b/docs/ip-audit-2026-09-18.md @@ -116,3 +116,47 @@ Go-бинаре — поменять один условный переход; Пункты 1–2 закрывают то, что находится за минуты. Пункт 3 — то, что нельзя закрыть технически. Остальное — по мере сил. + +--- + +## Ход работ (18.09, вечер) + +### Пункт 1 — вынос справки — СДЕЛАНО (коммит fcded5f) +Технические страницы `/admin/help/*` (архитектура НРД, протокол FTV_M2M на 41 КБ, +база, крипто, QUIK) вынесены за build-tag `internaldocs`. Клиентский релиз +(`build-release.sh`, обычный `go build`) их не содержит — заглушка «доступно на +портале»; наша сборка `go build -tags internaldocs` их включает. Проверено на +собранных бинарях: «Согласовано 10.09», «Для программиста Fancy», «как устроен +обмен» → 0 совпадений в клиентской сборке; −27 тыс. символов внутренней прозы. +Операторские страницы (ручной ввод, робот, системы, API ЛК) остались. + +### Пункт 2 — обфускация garble — ПРОВЕРЕНО, НЕ ВНЕДРЕНО (нужен ваш выбор) +Что garble даёт (проверено на реальном bj-server, сборка через go1.26.8): +- имена функций пакета `lkgateway` в бинаре: 72 → **0**; +- SQL-рецепт `OD_RESTS`, `spectreProceeds`, путь `internal/lkgateway/lkflow.go`: → **0**; +- строки `SELECT …`: 128 → **11**; литералы SQL шифруются и расшифровываются + только в момент выполнения — `strings` их больше не выдаёт; +- бинарь запускается, `/healthz` и `/admin/` отвечают 200. + +**Но: garble ломает наши HTML-страницы.** `html/template` обращается к полям +структур по имени во время выполнения (`{{$p.AsOf}}`), а garble переименовывает +поля (`AsOf` → случайное) — шаблон падает: «can't evaluate field AsOf». Это +системно: так устроена каждая страница админки и кабинета. Опции «не трогать +имена полей» у garble нет; проблема известная (reflection в html/template +garble не видит, т.к. `Execute` принимает `any`). + +Разблокировать garble можно, только передавая в шаблоны данные как +`map[string]any` вместо структур. Это крупная переделка всех обработчиков +страниц и постоянный налог на каждую новую страницу. + +**Решение — за вами:** +- **A. Остановиться на пункте 1 + договор (пункт 3).** Самая дешёвая и крупная + утечка (документация) закрыта; в коде остаются SQL-литералы и имена функций, + но чтобы ими воспользоваться, всё равно нужно знание DEPO и НРД, а разбор — + нарушение договора. Рекомендую как базовый вариант. +- **B. Инвестировать в garble.** Перевести данные шаблонов на map (недели работы, + риск регрессий в вёрстке), тогда `strings`/декомпилятор перестают что-либо + давать. Оправдано, если защита кода критична сама по себе. + +Тулчейн go1.26.8 и garble установлены в `~/sdk` и `~/go/bin` — если выберете B, +среда готова.