Extended logical channels: CLA 0-19, ATR card capabilities, MANAGE CHANNEL (v2.6.0)
- CLA decode (TS 102 221 §10.1.1/§10.3): standard channels 0-3 from b2-b1
and the extended channels 4-19 from b4-b1. The old further-format rule
read only b2-b1 (channel 8 read as 6, 19 as 7) and the ETSI '11x0 xxxx'
coding (0xC0-0xEF) was not handled at all; the class ranges now follow the
specs (0x80-0x8F UICC, 0xA0-0xAF SIM, 0xC0-0xEF ETSI extended, 0x20-0x3F
reserved, 0xFF invalid) and SM/chain are decoded per family — the SM
extraction and the chaining bit (b5, not b6) were off by one bit
- per-channel state: database._decode_rows/_replay_context use the shared
cla_channel() helper — before, CLA & 0x03 with no +4, so a channel-5
SELECT clobbered channel 1's selection and a channel-8 one channel 0's
(the local traces already open channels: 29 MANAGE CHANNEL opens, 1-2)
- COMPRION T=0 import: the synthesized GET RESPONSE keeps the channel —
a plain CLA for 0-3 (as real terminals do) and 01x0 for 4-19
- ATR historical bytes: the UICC's COMPACT-TLV objects (TS 102 221 §6.3.1)
with card service data, the card capabilities (ISO 7816-4 §8.1.1.2.7
Table 88: assignment methods and max logical channels — the workspace
cards announce 4 and "8 or more") and the status indicator ('00' trailing
bytes / the '8Y' TLV); a truncated ATR no longer raises
- MANAGE CHANNEL success replies decode the assigned channel byte
- capture/import: a 'tpdu' packet that is not APDU-shaped (shorter than the
header, CLA FF, ISO-reserved class) is skipped and counted, so a
character-level or mis-sampled stream no longer pollutes the decode
(the local DB's outlier sessions are exactly that)
- tests: CLA table vectors, per-channel state isolation on channels 8/12,
COMPRION GR channels, filetrack extended channels, ATR compact-TLV and
card-capability cases, the capture skip counter, the PWA rows; 527 Python
+ 47 Node tests
- README/README_RUS document the extended channels, card capabilities and
the skip counter; PWA_VERSION/pyproject/version.py 2.6.0, SW v72
This commit is contained in:
1 parent
cbeeed3608
commit
64433f9739
18 files changed
+683
-88
No files matched your search
+18
-8
@@ -31,9 +31,11 @@ SIM/UICC из UDP-потока GSMTAP (или импортирует файлы
|
||||
|
||||
**Декодер APDU** (на стороне сервера, отображается в PWA):
|
||||
|
||||
- Полное декодирование APDU — CLA по ISO 7816-4 / ETSI (логический канал,
|
||||
secure messaging, chaining команд), имена INS из таблицы спецификаций,
|
||||
учёт SFI в P1/P2 для READ/UPDATE BINARY и команд с записями
|
||||
- Полное декодирование APDU — CLA по ISO 7816-4 / ETSI с **логическим
|
||||
каналом 0-19** (стандартные каналы из b2-b1, расширенные 4-19 из b4-b1
|
||||
по TS 102 221 §10.3), secure messaging и chaining команд, имена INS из
|
||||
таблицы спецификаций, учёт SFI в P1/P2 для READ/UPDATE BINARY и команд
|
||||
с записями; ответ MANAGE CHANNEL показывает назначенный картой канал
|
||||
- Статусные слова — полный набор ISO 7816-4 плюс специфичные для UICC
|
||||
значения: `91XX` (ожидается proactive-команда), `62F1/F2/F3`,
|
||||
`63F1/F2` (больше данных), `9300` (SAT busy), `9850`, `9862–64`
|
||||
@@ -57,8 +59,13 @@ SIM/UICC из UDP-потока GSMTAP (или импортирует файлы
|
||||
сообщение приложения декодируется как поток **C-APDU** (SELECT,
|
||||
UPDATE BINARY, …) с полной разбивкой CLA/INS/P1/P2/Lc/Le — сразу для
|
||||
открытого текста или после расшифровки для зашифрованных пакетов
|
||||
- Разбор ATR (пересчёт тактовой частоты, Fi/Di, битовая маска T)
|
||||
и FCP/FCI TLV
|
||||
- Разбор ATR (пересчёт тактовой частоты, Fi/Di, битовая маска T,
|
||||
безопасен для усечённых ATR) и FCP/FCI TLV; исторические байты
|
||||
разбираются как COMPACT-TLV объекты UICC (TS 102 221 §6.3.1) — card
|
||||
service data, **card capabilities** (ISO 7816-4 §8.1.1.2.7 таблица 88:
|
||||
способы назначения и заявленное максимальное число логических каналов,
|
||||
`8 or more` у карт с расширенными каналами) и завершающий индикатор
|
||||
состояния (LCS/SW)
|
||||
|
||||
**PWA SIMtrace Analyser** ([`frontend/`](frontend/)):
|
||||
|
||||
@@ -122,12 +129,15 @@ simtrace-analyser-server --capture disabled
|
||||
|
||||
Сервер пишет в stderr информацию о жизненном цикле захвата (каждая строка
|
||||
с локальным временем): `Capture started` при старте, периодический
|
||||
heartbeat `Capture alive: session=N messages=M bytes=B dropped=D`
|
||||
heartbeat `Capture alive: session=N messages=M bytes=B dropped=D skipped=S`
|
||||
и `Capture stopped` (либо `ERROR: capture thread stopped on error …`,
|
||||
если поток захвата неожиданно умер). Неверно сформированные или не-SIM
|
||||
датаграммы GSMTAP отбрасываются и считаются (`dropped`), а не молча
|
||||
убивают захват. Интервал heartbeat по умолчанию 60 с, настраивается
|
||||
через `--log-interval SECONDS`.
|
||||
убивают захват; `tpdu`-пакет, вовсе не похожий на APDU (короче заголовка,
|
||||
недопустимый CLA `FF` или зарезервированный ISO класс `001x`),
|
||||
пропускается и считается (`skipped`) — посимвольный или миссемплированный
|
||||
поток больше не засоряет декодирование. Интервал heartbeat по умолчанию
|
||||
60 с, настраивается через `--log-interval SECONDS`.
|
||||
|
||||
GSMTAP-листенер также принимает декодер **sigrok-iso7816-stream**
|
||||
(https://github.com/anttro/sigrok_iso7816_stream) — пассивный SIM-сниффер
|
||||
|
||||
Reference in new issue
Block a user