From 9411fd775d3ff5a1b9eeefb519484af10b665374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=A2=D1=80=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 23 Oct 2026 09:50:09 +0300 Subject: [PATCH] v3.32.7: drop the pySim JSON disclosure from the file manager The decoded view is the client-side EF decoder's table over the raw read's bytes. The collapsed "pySim JSON (server)" block was an unrelated second decode - opening it ran another /api/read with mode 'decoded' (pySim's read_binary_decoded/read_records_decoded on the card) - and it existed only when our decoder covered the file, so it could not serve as a cross-check where one would matter. /api/read keeps mode 'decoded' for API callers. Help, READMEs and the project notes now state the table is built in the browser from the same raw bytes; ef_decode.test.js pins the view's output and that no mode 'decoded' read remains in the PWA. 1016 Python + 955 frontend green; simple-v465. --- CHANGELOG.md | 15 +++++++++++++++ README.md | 2 +- README_RUS.md | 2 +- frontend/help-ru.html | 2 +- frontend/help.html | 2 +- frontend/index.html | 27 ++++----------------------- frontend/sw.js | 2 +- frontend/tests/ef_decode.test.js | 14 +++++++++++++- pyproject.toml | 2 +- pysim_simple_server/server.py | 2 +- 10 files changed, 39 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 738b764..f22b0cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,21 @@ every change carries a descriptive commit message. ## [Unreleased] +## [3.32.7] — 2026-10-23 + +### Removed + +- The file manager's decoded view no longer carries the collapsed **pySim JSON + (server)** disclosure — the view is the client-side EF decoder's table only. The + disclosure was an unrelated *second* decode: opening it issued another `/api/read` with + `mode: 'decoded'` to run pySim's `read_binary_decoded`/`read_records_decoded`, and it + was reachable only when our decoder covered the file (`Read decoded` is decoder-gated), + so the one case where a second opinion would matter — a file our decoders do not + cover — never offered it. `/api/read` keeps `mode: 'decoded'` for API callers; the + help, READMEs and project notes now say the decoded table is built in the browser from + the same raw bytes. `ef_decode.test.js` pins the view's output and the absence of the + lookup. + ## [3.32.6] — 2026-10-23 ### Fixed diff --git a/README.md b/README.md index 90cecf2..ad087ca 100644 --- a/README.md +++ b/README.md @@ -593,7 +593,7 @@ Connects to the bundled [`pysim-simple-server`](pysim_simple_server/) for live c Browse the UICC filesystem in a tree view. Files are shown with names, FIDs, and AIDs (for ADFs). Selecting a file shows its detail pane: FID, file type, size / record layout and the decoded FCI (in a bordered block labelled with the file's symbolic name) above the content pane. When the FCI references its access rules through an EF.ARR record (security attribute `8B`), the referenced record's decoded rules are shown as indented lines under that row — resolved from the card's cached EF.ARR copies (MF, DF.TELECOM/DF.GSM and ADF.USIM, following the file's DF chain; a snapshot resolves them from its own captured copy). - Entries are grouped with DFs above EFs and sorted by **FID** or symbolic **Name** (pills pinned above the tree together with **Probe all files**, remembered in `localStorage`) -- **Read raw** / **Read decoded** — read the selected file as a hex dump or as a decoded field table (client-side decoders for IMSI, ICCID, SPN, PLMN lists, LOCI/EPSLOCI, ADN/MSISDN, service tables, SUME, …); the highlighted pill is the current view and clicking either pill (re-)reads the file. The server-side pySim JSON of the same read stays behind a collapsed *pySim JSON (server)* disclosure; **Read decoded** is disabled when the client-side decoders do not cover the file (resolved by name/FID before reading) +- **Read raw** / **Read decoded** — read the selected file as a hex dump or as a decoded field table (client-side decoders for IMSI, ICCID, SPN, PLMN lists, LOCI/EPSLOCI, ADN/MSISDN, service tables, SUME, …); the highlighted pill is the current view and clicking either pill (re-)reads the file. The decoded table is built in the browser from the same raw bytes (no server-side decode); **Read decoded** is disabled when the client-side decoders do not cover the file (resolved by name/FID before reading) - **Edit raw** — edit the raw hex data and **Save** to write back (or **Cancel**); transparent files use a textarea, record files one input per record with selection checkboxes. The decoded view is read-only — **Edit raw** switches to the hex view first and reads the file if needed - **Probe all files** — walks the whole tree (incl. custom files), marks every entry present/absent with *N / total* progress, stoppable, and ends with a summary; browsing itself stays lazy. Missing files are shown in red (✗); a present but empty DF shows `(empty)` - **ADM** — files that need the administrator PIN fail with `6982`/`9804`; when the matching card preset (same ICCID) carries an ADM key, a **Verify ADM** button appears next to the error and the header badge (`ADM ✓/✗ ⚿`) becomes clickable. Every wrong key consumes an attempt (the remaining attempts are shown and a retry asks for confirmation); a blocked ADM needs the card's unblock key diff --git a/README_RUS.md b/README_RUS.md index 1811e93..e0af258 100644 --- a/README_RUS.md +++ b/README_RUS.md @@ -568,7 +568,7 @@ Delivery PoR (SPI2 `01`) проще — карта возвращает PoR на Дерево файлов UICC. Отображаются имена, FID и AID (для ADF). При выборе файла открывается панель деталей: FID, тип файла, размер / структура записей и декодированный FCI (в блоке с рамкой и именем файла) над панелью содержимого. Когда FCI ссылается на свои правила доступа через запись EF.ARR (атрибут безопасности `8B`), правила указанной записи показываются отступом под этой строкой — они берутся из кэшированных копий EF.ARR карты (MF, DF.TELECOM/DF.GSM и ADF.USIM, по цепочке DF файла; снимок разрешает их из собственной захваченной копии). - Элементы сгруппированы (DF выше EF) и отсортированы по **FID** или символьному **имени** (пиллы закреплены над деревом вместе с **«Проверить все файлы»**, выбор сохраняется в `localStorage`) -- **Read raw** / **Read decoded** — чтение выбранного файла как hex-дампа или как таблицы декодированных полей (клиентские декодеры: IMSI, ICCID, SPN, списки PLMN, LOCI/EPSLOCI, ADN/MSISDN, таблицы сервисов, SUME, …); подсвеченная пилла — текущий вид, клик по любой из них перечитывает файл. Серверный pySim JSON того же чтения остаётся в свёрнутом блоке *pySim JSON (server)*; **Read decoded** отключается, когда клиентские декодеры не покрывают файл (определяется по имени/FID до чтения) +- **Read raw** / **Read decoded** — чтение выбранного файла как hex-дампа или как таблицы декодированных полей (клиентские декодеры: IMSI, ICCID, SPN, списки PLMN, LOCI/EPSLOCI, ADN/MSISDN, таблицы сервисов, SUME, …); подсвеченная пилла — текущий вид, клик по любой из них перечитывает файл. таблица декодируется в браузере из тех же сырых байт (без серверного декодирования); **Read decoded** отключается, когда клиентские декодеры не покрывают файл (определяется по имени/FID до чтения) - **Edit raw** — редактирование сырых hex-данных и **Save** для записи (или **Cancel**); для transparent-файлов — textarea, для record-файлов — по полю на запись с флажками выбора. Декодированный вид только для чтения — **Edit raw** сначала переключается на hex и при необходимости читает файл - **Проверить все файлы** — обход всего дерева (включая пользовательские) с пометкой «есть/нет», прогрессом *N / всего*, возможностью остановки и сводкой в конце; сам просмотр остаётся ленивым. Отсутствующие файлы показаны красным (✗); существующий пустой DF — `(пусто)` - **ADM** — файлы, требующие администраторский PIN, возвращают `6982`/`9804`; если в подходящем пресете карты (тот же ICCID) есть ключ ADM, рядом с ошибкой появляется кнопка **«Проверить ADM»**, а значок в заголовке (`ADM ✓/✗ ⚿`) становится кликабельным. Каждый неверный ключ расходует попытку (остаток показывается, повторная попытка требует подтверждения); заблокированный ADM требует ключа разблокировки карты diff --git a/frontend/help-ru.html b/frontend/help-ru.html index ee5faf4..4f6ec08 100644 --- a/frontend/help-ru.html +++ b/frontend/help-ru.html @@ -407,7 +407,7 @@

6.1 Файловый менеджер

Дерево файловой системы отображается слева; выбор файла открывает панель деталей справа. Элементы сгруппированы: DF выше EF, сортировка по FID или символьному имени (пиллы и кнопка «Проверить все файлы» закреплены над прокручиваемым деревом; выбор сохраняется в localStorage). При выборе файла над содержимым также показываются FID, тип файла, размер / структура записей и декодированный FCI — в рамке с символьным именем файла. Если FCI ссылается на свои правила доступа через запись EF.ARR (атрибут безопасности 8B), правила указанной записи показываются с отступом под этой строкой: они берутся из копий EF.ARR карты — копии MF (2F06), копий DF.TELECOM/DF.GSM (6F06) и копии ADF.USIM (6F06): читаются один раз за сессию при equip, обновляются при сбросе/equip и после записи EF.ARR; снимок разрешает те же ссылки из собственной захваченной копии. Побеждает копия собственного DF файла, с подъёмом до MF; ссылка, для которой в этой цепочке копии нет, остаётся неразрешённой, если только кандидат не единственный.