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, +среда готова.