From 6e4494195cb737cdc596a533b204f758b11485ca 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: Wed, 14 Oct 2026 00:21:45 +0300 Subject: [PATCH] v3.25.8 review: the FCI extras coverage for templates The custom-FCI check's `fciExtra: 'fail'` coverage counted only the exact keys, so a listed template (A5) did not accept its decoded children (A5/80) and a listed child did not accept its parent - both were reported as unexpected. An object is now covered by its own key, by a listed parent or by a listed child (an unlisted sibling still fails); the seeded flow lists every object and was unaffected. Tests: the coverage cases (a listed A5 accepts A5/80 + A5/81, a listed A5/80 accepts A5 but not the A5/81 sibling) - the fixture's A5 length corrected in the process. Help EN/RU + both AGENTS. 893 frontend + 880 Python; sw cache simple-v433. --- frontend/help-ru.html | 2 +- frontend/help.html | 2 +- frontend/index.html | 8 +++++++- frontend/sw.js | 2 +- frontend/tests/profiler.test.js | 10 ++++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/frontend/help-ru.html b/frontend/help-ru.html index f82729b..3097ef1 100644 --- a/frontend/help-ru.html +++ b/frontend/help-ru.html @@ -468,7 +468,7 @@
Правила выполняются последовательно. Редактор показывает символьное имя файла pySim (если известно) рядом с путём правила; Добавить правило добавляет правило, Сохранить сохраняет изменения. Правило файловой системы задаётся:
MF (например, MF/7F10/6F3A) или с AID ADF (например, A0000000871002/6F07).'62' — выявляет изменения FID/AID, жизненного цикла, атрибутов безопасности и проприетарных параметров) или По объектам данных — список ожиданий по объектам: каждая строка задаёт объект данных (стандартные теги с именами, включая вложенные A5/xx/C6/xx, либо произвольный тег), режим — значение (без ? совпадение по префиксу, ? маскирует полубайт: 8B + 2F06 принимает любую запись EF.ARR с таким FID, 2F06?? — 3-байтовую форму), присутствует (объект обязан быть) или отсутствует (его быть не должно) — и для значений hex для сравнения. Проверяются только перечисленные объекты; Лишние объекты данных: игнорировать/не допускать дополнительно запрещает всё неперечисленное (без учёта порядка, в отличие от побайтового режима). Профили, созданные с этим режимом с карты или из снимка, заполняются объектами записанного FCI; правило с записанным FCI и пустым списком можно заполнить из него (заполнить из записанного FCI).'62' — выявляет изменения FID/AID, жизненного цикла, атрибутов безопасности и проприетарных параметров) или По объектам данных — список ожиданий по объектам: каждая строка задаёт объект данных (стандартные теги с именами, включая вложенные A5/xx/C6/xx, либо произвольный тег), режим — значение (без ? совпадение по префиксу, ? маскирует полубайт: 8B + 2F06 принимает любую запись EF.ARR с таким FID, 2F06?? — 3-байтовую форму), присутствует (объект обязан быть) или отсутствует (его быть не должно) — и для значений hex для сравнения. Проверяются только перечисленные объекты; Лишние объекты данных: игнорировать/не допускать дополнительно запрещает всё неперечисленное (без учёта порядка, в отличие от побайтового режима); указание шаблона принимает его дочерние объекты, а указание дочернего объекта — родителя, неперечисленный же соседний объект по-прежнему не проходит. Профили, созданные с этим режимом с карты или из снимка, заполняются объектами записанного FCI; правило с записанным FCI и пустым списком можно заполнить из него (заполнить из записанного FCI).EF.ARR указывает ссылка атрибута безопасности ('8B') в FCI: правила указанной записи разрешаются из EF.ARR карты (или снимка) и сравниваются как множество с захваченными строками. Захватываются автоматически при создании профиля с карты или из снимка для каждого файла, чей FCI содержит ссылку (собственное содержимое EF.ARR по умолчанию пропускается — значимая проверка это правила); в редакторе захваченные правила показываются структурированными строками — операция в виде флажков битов (или командной формы RESIZE FILE / INCREASE), а каждое условие безопасности — селектором (always, never или ссылка на ключ с её использованием), с предпросмотром канонической декодированной строки, которую сравнивает проверка; «+ правило» создаёт новое (READ always), а шаблонные формы вне этого набора остаются нередактируемыми строками с возможностью удаления. Селектор «Сопоставление» выбирает сравнение: «Точное» (по умолчанию) требует полного совпадения правил карты с перечисленными строками; «Содержит» требует, чтобы каждое перечисленное правило было разрешено картой, — сравнение по операциям (каждый бит AM / командная запись, поэтому другое объединение битов в байте AM при той же политике тоже совпадёт), а не перечисленное правило не проверяется. Переключатель «Нет/Проверять» отключает проверку, не теряя правила; блок сворачивается в заголовок со счётчиком правил, а «Нет» скрывает его полностью. Файл, чей FCI потерял ссылку, не проходит проверку; ссылка, которую не удалось разрешить (нет кэша EF.ARR, запись вне диапазона), помечается как непроверяемая. При Полном FCI необязательный флажок «Игнорировать ссылку на EF.ARR в точном FCI» сравнивает FCI без значения '8B': другой номер записи больше не приводит к несовпадению, а все остальные DO по-прежнему сравниваются побайтово (смысл ссылки проверяет эта проверка).? — шаблон на один полубайт (маска без ? — совпадение префикса, например 0891 для MCC/MNC из IMSI). Для record-файлов хранится список по записям.Rules run sequentially. The editor shows the symbolic pySim name (when known) next to each rule’s path; use Add rule to append one and Save to keep the changes. A filesystem rule is defined by:
MF (e.g. MF/7F10/6F3A) or an ADF AID (e.g. A0000000871002/6F07).'62' — catching FID/AID, life-cycle status, security-attribute and proprietary-parameter changes), or Custom (per data object) — a list of per-object expectations: each row names a data object (the standard tags with their names, the nested A5/xx/C6/xx children included, or a free tag), the mode — value (no ? matches as a prefix, ? masks a nibble: 8B + 2F06 accepts any EF.ARR record of that FID, 2F06?? the 3-byte form), present (the object must exist) or absent (it must not) — and, for values, the hex to compare. Only the listed objects are checked; Extra data objects: ignore/fail additionally forbids anything unlisted (order-insensitive, unlike the byte-exact mode). Profiles created from a card or a snapshot with this mode are seeded with the captured FCI’s objects; a rule with a captured FCI and an empty list can be filled from it (load from the captured FCI).'62' — catching FID/AID, life-cycle status, security-attribute and proprietary-parameter changes), or Custom (per data object) — a list of per-object expectations: each row names a data object (the standard tags with their names, the nested A5/xx/C6/xx children included, or a free tag), the mode — value (no ? matches as a prefix, ? masks a nibble: 8B + 2F06 accepts any EF.ARR record of that FID, 2F06?? the 3-byte form), present (the object must exist) or absent (it must not) — and, for values, the hex to compare. Only the listed objects are checked; Extra data objects: ignore/fail additionally forbids anything unlisted (order-insensitive, unlike the byte-exact mode); listing a template accepts its children and listing a child accepts its parent, while an unlisted sibling still fails. Profiles created from a card or a snapshot with this mode are seeded with the captured FCI’s objects; a rule with a captured FCI and an empty list can be filled from it (load from the captured FCI).EF.ARR record the FCI’s security-attribute reference ('8B') points at: the referenced record’s rules are resolved from the card’s (or the snapshot’s) EF.ARR and compared as a set with the captured lines. Captured automatically when a profile is created from a card or a snapshot for every file whose FCI carries a reference (EF.ARR’s own contents are skipped by default — the rules are the meaningful check); the editor shows the captured rules as structured rows — the operation as bit checkboxes (or the RESIZE FILE / INCREASE command form) and each security condition as a select (always, never, or a key reference with its usage), with a preview line of the canonical decoded string the check compares; + rule builds a new one (READ always), and the template forms outside this subset stay raw and removable. The Match selector picks the comparison: Exact (default) requires the card’s rules to equal the listed lines; Contains requires every listed rule to be granted by the card, matched per operation (each AM bit / command entry, so a different AM grouping of the same policy still matches), and a rule not listed is not checked. The None/Check toggle disables the check without losing the rules; the block collapses to a header with the rule count and None hides it entirely. A file whose FCI lost the reference fails; a reference that cannot be resolved (no cached EF.ARR, record out of range) is reported as unverifiable. With Exact FCI, the optional Ignore the EF.ARR reference in the exact FCI checkbox compares the FCI without the '8B' value: a different record number no longer fails while every other DO is still compared byte-for-byte (the reference’s meaning is verified by this check).? is a per-nibble wildcard (a mask with no ? is a prefix match, e.g. 0891 for the IMSI MCC/MNC). Record files store a per-record list.