From 88f67f5e134b1e3dd69ae54cf3472ee16e782167 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, 11 Sep 2026 21:51:42 +0300 Subject: [PATCH] profiler: add EF.ACC/EPSNSC/START-HFN/ARR to the ignore-contents list - EF.ACC 6F78, EF.EPSNSC 6FE4, EF.START-HFN 6F5B (FIDs per UICC_FILES.md / TS 31.102 & TS 51.011), EF.ARR 2F06 (TS 102 221 13.4; the ADF.USIM copy 6F06 is covered by the name fallback) - entries may carry 'checked: false'; EF.ARR is unchecked by default - tests extended (FID sanity + default-checked state), docs updated. SW cache v76 -> v77. --- frontend/help-ru.html | 2 +- frontend/help.html | 2 +- frontend/index.html | 6 +++++- frontend/sw.js | 2 +- frontend/tests/profiler.test.js | 16 ++++++++++++++-- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/frontend/help-ru.html b/frontend/help-ru.html index a586d46..a9f9f12 100644 --- a/frontend/help-ru.html +++ b/frontend/help-ru.html @@ -383,7 +383,7 @@

Проверить карту выполняет каждое правило на подключённой карте и показывает строку прогресса и отчёт прохождения. Рядом с путём файла указывается, что именно проверялось (например, тип файла и размер, содержимое или полный FCI); если часть проверок прошла, а часть нет — каждый аспект помечается (тип файла ✓, размер ✗, содержимое ✓), а расхождения расписываются ниже. Несовпавшие сырые данные (FCI, содержимое, данные записей) показываются как поля только для чтения с моноширинным шрифтом — ожидаемое над фактическим, в одной и той же колонке — для удобного сравнения; для расхождений FCI дополнительно показывается декодированное сравнение по параметрам (размер файла, дескриптор/структура, жизненный цикл, FID, SFI, проприетарные параметры…). Декодированный просмотр FCI также отображается рядом с полем FCI hex при редактировании правила. Если данные FCI повреждены, показывается всё, что удалось декодировать до места ошибки, вместе с явным сообщением об ошибке декодирования. Для record-файлов при расхождении содержимого добавляется пометка совпадающие записи: 1-5, 7-10 со списком записей, которые совпали.

Опции сканирования «Профиль с карты»

-

Диалог сканирования запрашивает имя профиля и предлагает селектор «Проверка FCP/FCI» (те же три режима, по умолчанию Тип файла + размер (FCP)), применяемый ко всем создаваемым правилам, а также список «Игнорировать содержимое файлов» (все отмечены по умолчанию) часто перезаписываемых файлов, содержимое которых пропускается: EF.LOCI, EF.PSLOCI, EF.EPSLOCI, EF.5GS3GPPLOCI, EF.Keys, EF.KeysPS, EF.SMS, EF.Kc, EF.KcGPRS, EF.LOCIGPRS, EF.CBMID, EF.SMSS. Ещё две отмеченные по умолчанию опции «Сравнивать первые 4 байта для» EF.IMSI и EF.ICCID захватывают содержимое этих файлов как маску только первых 4 байт (снимите для точного сравнения). Строка прогресса показывает N / всего файлов с текущим путём файла во время сканирования; при сканировании опции скрываются, а кнопки блокируются. Правила создаются только для файлов, которые реально существуют на карте (возвращён FCP-шаблон); отсутствующие файлы пропускаются. Пользовательские файлы из подвкладки «Пользовательские файлы» включаются с той же проверкой существования.

+

Диалог сканирования запрашивает имя профиля и предлагает селектор «Проверка FCP/FCI» (те же три режима, по умолчанию Тип файла + размер (FCP)), применяемый ко всем создаваемым правилам, а также список «Игнорировать содержимое файлов» (все отмечены по умолчанию, кроме EF.ARR) часто перезаписываемых файлов, содержимое которых пропускается: EF.LOCI, EF.PSLOCI, EF.EPSLOCI, EF.5GS3GPPLOCI, EF.Keys, EF.KeysPS, EF.SMS, EF.Kc, EF.KcGPRS, EF.LOCIGPRS, EF.CBMID, EF.SMSS, EF.ACC, EF.EPSNSC, EF.START-HFN, EF.ARR. Ещё две отмеченные по умолчанию опции «Сравнивать первые 4 байта для» EF.IMSI и EF.ICCID захватывают содержимое этих файлов как маску только первых 4 байт (снимите для точного сравнения). Строка прогресса показывает N / всего файлов с текущим путём файла во время сканирования; при сканировании опции скрываются, а кнопки блокируются. Правила создаются только для файлов, которые реально существуют на карте (возвращён FCP-шаблон); отсутствующие файлы пропускаются. Пользовательские файлы из подвкладки «Пользовательские файлы» включаются с той же проверкой существования.

5.7 Сценарии использования

diff --git a/frontend/help.html b/frontend/help.html index 33e42c8..8128d50 100644 --- a/frontend/help.html +++ b/frontend/help.html @@ -383,7 +383,7 @@

Check card runs every rule against the equipped card and shows a live progress line plus a pass/fail report. Each row states exactly what was verified next to the file path (e.g. filetype and size, contents or exact FCI); when some checks pass and others fail, each aspect is marked (filetype ✓, size ✗, contents ✓) with the mismatches detailed below. Mismatched raw data (FCI, contents, record data) is shown as read-only monospace fields — expected above actual, aligned in the same column — for easy comparison; FCI mismatches additionally show a decoded per-parameter comparison (file size, file descriptor/structure, life cycle, FID, SFI, proprietary parameters…). A decoded FCI preview is also shown beside the FCI hex field while editing a rule. If the FCI data is corrupt, whatever was decoded before the faulty part is shown together with an explicit decode-failure note. For record files with a contents mismatch, a matching records: 1-5, 7-10 note lists the records that did match.

“Profile from card” scan options

-

The scan dialog asks for a profile name and offers a “FCP/FCI check” selector (the same three modes above, default Filetype + size) applied to every generated rule, plus an “Ignore contents of files” checklist (all checked by default) of frequently-overwritten files whose contents are skipped: EF.LOCI, EF.PSLOCI, EF.EPSLOCI, EF.5GS3GPPLOCI, EF.Keys, EF.KeysPS, EF.SMS, EF.Kc, EF.KcGPRS, EF.LOCIGPRS, EF.CBMID, EF.SMSS. Two further checked-by-default options “Match first 4 bytes for” EF.IMSI and EF.ICCID capture those files’ contents as a mask of only the first 4 bytes (uncheck for exact matching). A progress line shows N / total files with the current file path while scanning; during the scan the options are hidden and the buttons are locked. Rules are created only for files that actually exist on the card (a FCP template is returned); missing files are skipped. Custom files from the Custom files sub-tab are included under the same existence check.

+

The scan dialog asks for a profile name and offers a “FCP/FCI check” selector (the same three modes above, default Filetype + size) applied to every generated rule, plus an “Ignore contents of files” checklist (all checked by default except EF.ARR) of frequently-overwritten files whose contents are skipped: EF.LOCI, EF.PSLOCI, EF.EPSLOCI, EF.5GS3GPPLOCI, EF.Keys, EF.KeysPS, EF.SMS, EF.Kc, EF.KcGPRS, EF.LOCIGPRS, EF.CBMID, EF.SMSS, EF.ACC, EF.EPSNSC, EF.START-HFN, EF.ARR. Two further checked-by-default options “Match first 4 bytes for” EF.IMSI and EF.ICCID capture those files’ contents as a mask of only the first 4 bytes (uncheck for exact matching). A progress line shows N / total files with the current file path while scanning; during the scan the options are hidden and the buttons are locked. Rules are created only for files that actually exist on the card (a FCP template is returned); missing files are skipped. Custom files from the Custom files sub-tab are included under the same existence check.

5.7 Usage scenarios

diff --git a/frontend/index.html b/frontend/index.html index 4c374a0..edb357a 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -6960,6 +6960,10 @@ const PROFILER_IGNORE_FILES = [ { fid: '6F53', name: 'EF.LOCIGPRS' }, { fid: '6F48', name: 'EF.CBMID' }, { fid: '6F43', name: 'EF.SMSS' }, + { fid: '6F78', name: 'EF.ACC' }, + { fid: '6FE4', name: 'EF.EPSNSC' }, + { fid: '6F5B', name: 'EF.START-HFN' }, + { fid: '2F06', name: 'EF.ARR', checked: false }, ]; // Files where contents are captured as a mask matching only the first 4 bytes @@ -7104,7 +7108,7 @@ function profilerFromCard() { let html = ''; for (const f of PROFILER_IGNORE_FILES) { html += ''; } ignore.innerHTML = html; diff --git a/frontend/sw.js b/frontend/sw.js index a2d90d8..cfeab80 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -1,4 +1,4 @@ -const CACHE = 'otaman-v76'; +const CACHE = 'otaman-v77'; const URLS = [ 'index.html', 'help.html', diff --git a/frontend/tests/profiler.test.js b/frontend/tests/profiler.test.js index d76cf84..289f9b2 100644 --- a/frontend/tests/profiler.test.js +++ b/frontend/tests/profiler.test.js @@ -116,17 +116,29 @@ test('profile validation', () => { function parseIgnoreFiles() { const raw = html.match(/const PROFILER_IGNORE_FILES = \[([\s\S]*?)\n\];/)[1]; - return [...raw.matchAll(/\{ fid: '([^']*)', name: '([^']*)' \}/g)].map(m => ({ fid: m[1], name: m[2] })); + return [...raw.matchAll(/\{ fid: '([^']*)', name: '([^']*)'(?:, checked: (true|false))? \}/g)] + .map(m => ({ fid: m[1], name: m[2], checked: m[3] !== 'false' })); } test('ignore list FIDs are well-formed and KcGPRS uses the TS 51.011 FID (6F52)', () => { const files = parseIgnoreFiles(); - assert.ok(files.length >= 12); + assert.ok(files.length >= 16); for (const f of files) { assert.match(f.fid, /^[0-9A-F]{4}$/, f.name + ' has a malformed FID'); assert.ok(f.name.startsWith('EF.'), f.fid + ' has a malformed name'); } assert.strictEqual(files.find(f => f.name === 'EF.KcGPRS').fid, '6F52'); + assert.strictEqual(files.find(f => f.name === 'EF.ACC').fid, '6F78'); + assert.strictEqual(files.find(f => f.name === 'EF.EPSNSC').fid, '6FE4'); + assert.strictEqual(files.find(f => f.name === 'EF.START-HFN').fid, '6F5B'); + assert.strictEqual(files.find(f => f.name === 'EF.ARR').fid, '2F06'); +}); + +test('ignore list checks every file by default except EF.ARR', () => { + const files = parseIgnoreFiles(); + for (const f of files) { + assert.strictEqual(f.checked, f.name !== 'EF.ARR', f.name + ' default-checked mismatch'); + } }); test('ignore list has no duplicate FIDs or names', () => {