v1.9.21: SCP80 docs as parent section, GP+JavaCard AID labels, UX fixes
Docs: - SCP80 tab is now a parent section (3) with subsections 3.1/3.2/3.3 - Renumbered sections: Response parser→4, Card reader→5, Server→6, Version compat→7 - Applied to help.html, help-ru.html, README.md, README_RUS.md C-APDU/RAM form labels (GP + JavaCard terminology): - AID → Application / Instance AID - ELF AID → Load File AID / Package AID - Module AID → Executable Module AID / Applet Class AID SCP80/RAM explorer labels (GP + JavaCard terminology): - ISD → ISD (Issuer Security Domain) - Applications → Applications / Applet Instances - Executable Load Files → Executable Load Files (ELFs) / Packages - AID → Application/Instance AID or Load File AID/Package AID (context-dependent) - Module AIDs → Executable Module AIDs / Applet Class AIDs UX fixes: - Delete All button now matches Delete button style (red) - Explorer results cleared when switching away from Explore Card operation - KIc/KID dropdowns (index + algorithm) now update when selecting saved card - Added LANG_RU translations for new labels
This commit is contained in:
+181
-146
@@ -31,15 +31,19 @@ npm run build
|
||||
|
||||
## Интерфейс
|
||||
|
||||
Пять вкладок, каждая с формой и кнопкой «Generate APDU».
|
||||
Четыре вкладки: **C-APDU**, **SCP80**, **Response parser**, **Card reader**. Вкладки C-APDU и SCP80 имеют подвкладки.
|
||||
|
||||
---
|
||||
|
||||
## Вкладка SIM RFM
|
||||
## Вкладка C-APDU
|
||||
|
||||
Построение команд APDU (C-APDU). Пять подвкладок для разных поколений карт и наборов команд.
|
||||
|
||||
### SIM RFM
|
||||
|
||||
CLA = `A0` (GSM 11.11 / ISO 7816-4).
|
||||
|
||||
### Команды
|
||||
#### Команды
|
||||
|
||||
| Команда | INS | Описание |
|
||||
|---|---|---|
|
||||
@@ -54,7 +58,7 @@ CLA = `A0` (GSM 11.11 / ISO 7816-4).
|
||||
| VERIFY PIN | 20 | Проверка PIN1 или PIN2 |
|
||||
| CHANGE PIN | 24 | Смена PIN1 или PIN2 |
|
||||
|
||||
### Методы SELECT
|
||||
#### Методы SELECT
|
||||
|
||||
| Метод | P1 | P2 | Ввод |
|
||||
|---|---|---|---|
|
||||
@@ -63,46 +67,38 @@ CLA = `A0` (GSM 11.11 / ISO 7816-4).
|
||||
| By DF name / AID | 04 | 00 | AID |
|
||||
| ADF RFM chain | 00 | 00 | FID через запятую |
|
||||
|
||||
### Опции
|
||||
#### Опции
|
||||
|
||||
- **Start with SELECT** — добавить SELECT перед командой.
|
||||
- **Selection mode (P2)** — для record-команд: Absolute (04), Next (06), Previous (02).
|
||||
- **Record size** — дополнить/обрезать данные до указанного размера.
|
||||
- **Allow P1/P2 editing** — ручное редактирование P1/P2.
|
||||
|
||||
### Боковая панель конвертации
|
||||
|
||||
Поддерживает IMSI, MSISDN, ICCID, SPN, PLMN, Nibble swap.
|
||||
|
||||
### Ссылки
|
||||
#### Ссылки
|
||||
|
||||
- ISO/IEC 7816-4: Organization, security and commands for interchange
|
||||
- ETSI TS 102 226: Remote APDU structure for UICC based applications
|
||||
- GSM 11.11: SIM-ME Interface
|
||||
|
||||
---
|
||||
|
||||
## Вкладка USIM RFM
|
||||
### USIM RFM
|
||||
|
||||
CLA = `00` (ETSI TS 102 221). Те же команды, что и SIM, но SELECT использует P1=09, P2=0C.
|
||||
|
||||
### Ссылки
|
||||
#### Ссылки
|
||||
|
||||
- ETSI TS 102 221: UICC-Terminal Interface
|
||||
- ETSI TS 102 226: Remote APDU structure
|
||||
|
||||
---
|
||||
|
||||
## Вкладка Expanded Script
|
||||
### Expanded Script
|
||||
|
||||
Построение Expanded Remote Application data format по ETSI TS 102 226 §5.2.1.
|
||||
|
||||
### Формат
|
||||
#### Формат
|
||||
|
||||
- **Definite (AA)**: `AA` + длина + Command TLV
|
||||
- **Indefinite (AE)**: `AE` + `80` + Command TLV + `00 00`
|
||||
|
||||
### Command TLV
|
||||
#### Command TLV
|
||||
|
||||
| Тип | Тег | Описание |
|
||||
|---|---|---|
|
||||
@@ -111,60 +107,23 @@ CLA = `00` (ETSI TS 102 221). Те же команды, что и SIM, но SELE
|
||||
| Error Action | 82 | Proactive-команда при ошибке |
|
||||
| Script Chaining | 83 | Данные для многопакетных скриптов |
|
||||
|
||||
### Сборщик Immediate Action
|
||||
#### Сборщик Immediate Action
|
||||
|
||||
- **Action indicator**: `81` / `82`
|
||||
- **Proactive command**: REFRESH, DISPLAY TEXT, PLAY TONE
|
||||
- **Custom hex**: ручной ввод
|
||||
|
||||
### Ссылки
|
||||
#### Ссылки
|
||||
|
||||
- ETSI TS 102 226 §5.2.1
|
||||
- ETSI TS 102 223: Card Application Toolkit
|
||||
- ETSI TS 101 220: BER-TLV tag assignments
|
||||
|
||||
---
|
||||
|
||||
## Вкладка RAM
|
||||
### RAM/GP
|
||||
|
||||
CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление содержимым карты через SCP80.
|
||||
|
||||
Все операции RAM отправляются как защищённые пакеты SCP80 (ETSI TS 102 225) через SMS-PP-DOWNLOAD ENVELOPE. Карта должна поддерживать SCP03 (AES или 3DES) для безопасной транспортировки.
|
||||
|
||||
### Выбор карты (Card Preset)
|
||||
|
||||
Выберите сохранённую конфигурацию карты из выпадающего списка **Card preset**. Каждый пресет хранит:
|
||||
|
||||
| Поле | Описание |
|
||||
|---|---|
|
||||
| SPI1 / SPI2 | Уровень безопасности и настройки PoR |
|
||||
| Ключ KIc / KID | Hex ключи шифрования и MAC |
|
||||
| Индекс KIc / KID | Номер версии ключа |
|
||||
| TAR | Toolkit Application Reference (3 байта) |
|
||||
| Счётчик (CNTR) | 10-значный hex счётчик повторов, автоматически увеличивается после каждой успешной отправки SCP80 |
|
||||
|
||||
Пресеты карт управляются во вкладке **SCP80 → Cards** (см. ниже). Если пресет не выбран, RAM-вкладка предупреждает и отказывается выполнять.
|
||||
|
||||
### Операции
|
||||
|
||||
В RAM-подвкладке доступны две операции через выпадающий список **Operation**:
|
||||
|
||||
| Операция | Описание |
|
||||
|---|---|
|
||||
| **Explore Card (all GP data)** | Запрос GET STATUS для ISD, приложений, ELF и модулей ELF, а также GET DATA FF21 для информации о памяти. Результаты отображаются в обзоре с кнопками **Delete** для каждого элемента. |
|
||||
| **Install Package (.cap file)** | Отправка `.cap` файла на карту через сервер: INSTALL\[for load\] → LOAD ×N → INSTALL\[for install (+make selectable)\]. |
|
||||
|
||||
### Обзор карты (Explorer View)
|
||||
|
||||
После выполнения "Explore Card" отображается:
|
||||
|
||||
- **ISD** — AID, жизненный цикл, привилегии (без удаления; ISD нельзя удалить)
|
||||
- **Приложения** — AID, жизненный цикл, привилегии, связанный ELF/SD. Каждое имеет кнопку **Delete** (GP `DELETE` по AID).
|
||||
- **Executable Load Files** — AID, жизненный цикл, версии, AID модулей. Каждый имеет **Delete** (только ELF) и **Delete All** (каскадное: ELF + модули + установленные приложения, P2=0x80).
|
||||
|
||||
Удаление подтверждается через диалог браузера перед отправкой команды GP `DELETE` через SCP80. Обзор автоматически обновляется после успешного удаления.
|
||||
|
||||
### Справочник GP-команд
|
||||
#### Справочник GP-команд
|
||||
|
||||
| Команда | INS | P1 | Описание |
|
||||
|---|---|---|---|
|
||||
@@ -182,7 +141,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| EXTERNAL AUTHENTICATE | 82 | 00 | Аутентификация SCP |
|
||||
| INTERNAL AUTHENTICATE | 88 | 00 | Challenge-response |
|
||||
|
||||
### Привилегии (INSTALL)
|
||||
#### Привилегии (INSTALL [for install])
|
||||
|
||||
Три байта привилегий по GP Spec Tables 11-7, 11-8, 11-9.
|
||||
|
||||
@@ -213,7 +172,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
|---|---|
|
||||
| b8 | Receipt Generation |
|
||||
|
||||
### Параметры SIM/UICC Toolkit
|
||||
#### Параметры SIM/UICC Toolkit
|
||||
|
||||
- **Tag `CA`** (SIM Toolkit): Priority, Timers, Text Length, Menu Entries, Positions, Channels, MSL, TAR, Access Domain
|
||||
- **Tag `80`** (UICC Toolkit, внутри `EA`): те же поля без Access Domain
|
||||
@@ -228,7 +187,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 16 | RC/DS/CC + MAC + Cipher |
|
||||
| 19 | RC/DS/CC + MAC + Cipher + DS |
|
||||
|
||||
### GET STATUS P1
|
||||
#### GET STATUS P1
|
||||
|
||||
| Значение | Описание |
|
||||
|---|---|
|
||||
@@ -237,7 +196,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 20 | Executable Load Files |
|
||||
| 10 | ELF и модули |
|
||||
|
||||
### GET STATUS P2
|
||||
#### GET STATUS P2
|
||||
|
||||
| Значение | Описание |
|
||||
|---|---|
|
||||
@@ -246,7 +205,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 00 | Первые/все, старый формат (deprecated) |
|
||||
| 02 | Следующие, старый формат (deprecated) |
|
||||
|
||||
### GET DATA теги
|
||||
#### GET DATA теги
|
||||
|
||||
| Тег | Объект данных |
|
||||
|---|---|
|
||||
@@ -264,14 +223,14 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 7F21 | Certificate (SD public key) |
|
||||
| 5031 | Certificate info (EF.OD) |
|
||||
|
||||
### DELETE P1
|
||||
#### DELETE P1
|
||||
|
||||
| Значение | Описание |
|
||||
|---|---|
|
||||
| 00 | Только AID |
|
||||
| 80 | AID и связанные объекты |
|
||||
|
||||
### STORE DATA P1
|
||||
#### STORE DATA P1
|
||||
|
||||
| Значение | Описание |
|
||||
|---|---|
|
||||
@@ -280,24 +239,64 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 80 | Последний блок, с шифрованием |
|
||||
| C0 | Ещё блоки, с шифрованием |
|
||||
|
||||
### SET STATUS
|
||||
#### SET STATUS
|
||||
|
||||
**P1:** 80 = ISD, 40 = Приложение или SSD, 60 = SD и его приложения
|
||||
|
||||
**P2:** 00 = Разблокировать, 80 = Заблокировать (LOCKED)
|
||||
|
||||
### Ссылки
|
||||
#### Ссылки
|
||||
|
||||
- GlobalPlatform Card Specification v2.3.1
|
||||
- ETSI TS 102 226 §8.2.1.3.2: Параметры SIM/UICC Toolkit
|
||||
|
||||
### Конвертация (боковые панели SIM/USIM)
|
||||
|
||||
#### IMSI → EF.IMSI
|
||||
|
||||
15-значный IMSI → 9 байт EF.IMSI.
|
||||
|
||||
#### MSISDN → BCD
|
||||
|
||||
Удаление `+`, добавление `f`, обмен полубайтов.
|
||||
|
||||
#### ICCID → hex
|
||||
|
||||
Обмен полубайтов строки ICCID.
|
||||
|
||||
#### Provider Name → SPN
|
||||
|
||||
По 3GPP TS 31.102 §4.2.5. Три варианта кодирования:
|
||||
1. GSM 7-bit packed
|
||||
2. UCS2 non-BMP
|
||||
3. UCS2 BMP non-GSM7
|
||||
|
||||
#### PLMN → EF_PLMNsel / PLMNwAcT
|
||||
|
||||
3-байтное BCD-кодирование + опциональный Access Technology.
|
||||
|
||||
#### Nibble swap
|
||||
|
||||
Обмен полубайтов hex-строки.
|
||||
|
||||
#### Ссылки
|
||||
|
||||
- 3GPP TS 31.102
|
||||
- 3GPP TS 23.038
|
||||
- ETSI TS 102 225
|
||||
- pySim: enc_imsi()
|
||||
|
||||
---
|
||||
|
||||
## Вкладка Secured Packet
|
||||
## Вкладка SCP80
|
||||
|
||||
Сборка защищённых пакетов по ETSI TS 102 225.
|
||||
Вкладка **SCP80** группирует SCP80-виды, переключаемые тремя пиллами: **Secured Packet**, **Cards** и **RAM**. Сборка защищённых пакетов по ETSI TS 102 225.
|
||||
|
||||
### Структура пакета
|
||||
### Secured Packet
|
||||
|
||||
Сборка защищённых пакетов SCP80 по ETSI TS 102 225.
|
||||
|
||||
#### Структура пакета
|
||||
|
||||
| Поле | Размер | Описание |
|
||||
|---|---|---|
|
||||
@@ -314,7 +313,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| RC/CC/DS | 8 | Контрольная сумма / MAC |
|
||||
| Secured Data | переменная | APDU (с шифрованием при необходимости) |
|
||||
|
||||
### SPI1 (Уровень безопасности)
|
||||
#### SPI1 (Уровень безопасности)
|
||||
|
||||
Битовое поле SPI1 (TS 102 225 §5.1.1): `b8–b6` — паддинг, `b5–b4` — счётчик, `b3` — шифрование, `b2–b1` — RC/CC/DS.
|
||||
|
||||
@@ -334,7 +333,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
> **AES требует `b5 b4 = 10` (higher) или `11` (+1)** согласно TS 102 225 §5.1.2 и §5.1.3.1.
|
||||
> Значения `00/01/02/06` (без счётчика) допустимы только для 3DES.
|
||||
|
||||
### SPI2 (PoR)
|
||||
#### SPI2 (PoR)
|
||||
|
||||
| Значение | Режим |
|
||||
|---|---|
|
||||
@@ -347,7 +346,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
| 02 | PoR on error, no security |
|
||||
| 06 | PoR on error, RC |
|
||||
|
||||
### Крипто
|
||||
#### Крипто
|
||||
|
||||
- **3DES-CBC** шифрование, ключи 8/16/24 байт — устарело с Rel-18, но поддерживается для обратной совместимости
|
||||
- **AES-CBC** шифрование (нулевой ICV, дополнение нулями до 16), ключи 16/24/32 байта (TS 102 225 §5.1.2, KIc `x2`)
|
||||
@@ -355,26 +354,7 @@ CLA = `80` (GlobalPlatform v2.3.1). Удалённое управление со
|
||||
- **AES-CMAC** (NIST SP 800-38B, усечённый до 8 октетов) для AES (TS 102 225 §5.1.3.1, KID `x2`)
|
||||
- Padding byte: `00` (по умолчанию) или `FF`
|
||||
|
||||
### Ссылки
|
||||
|
||||
- ETSI TS 102 225 V18.1.0
|
||||
- ETSI TS 102 226
|
||||
- ISO 9797-1
|
||||
- NIST SP 800-38B (CMAC)
|
||||
|
||||
### Подвкладка Cards
|
||||
|
||||
Пилл **Cards** во вкладке SCP80 управляет сохранёнными конфигурациями карт (пресеты). Каждый пресет хранит криптографические ключи, настройки SPI, TAR и счётчик повторов для SCP80-операций.
|
||||
|
||||
**Добавить карту:** заполните имя, SPI1/SPI2, ключи KIc/KID и их индексы, TAR, нажмите **Add**. Карта появится в списке и станет доступна в выпаданом списке **Card preset** на RAM-вкладке.
|
||||
|
||||
**Редактировать карту:** выберите карту в списке, измените поля, нажмите **Save**.
|
||||
|
||||
**Удалить карту:** выберите карту, нажмите **Delete**. Удаляет пресет из `localStorage`.
|
||||
|
||||
**Счётчик:** 10-значный hex-счётчик (CNTR) автоматически увеличивается после каждой успешной отправки SCP80 (ручные отправки Secured Packet и RAM-операции). Обновлённый счётчик автоматически сохраняется обратно в пресет.
|
||||
|
||||
### PoR (Proof of Reception)
|
||||
#### PoR (Proof of Reception)
|
||||
|
||||
PoR подтверждает, что карта получила и выполнила защищённый пакет. Два режима:
|
||||
|
||||
@@ -385,43 +365,127 @@ PoR подтверждает, что карта получила и выполн
|
||||
|
||||
Delivery PoR (SPI2 `01`) проще — карта возвращает PoR напрямую в ответе ENVELOPE. Submit PoR (SPI2 `21`) используется, когда карта не может ответить inline (ограничено пространство ответа ENVELOPE).
|
||||
|
||||
#### Ссылки
|
||||
|
||||
- ETSI TS 102 225 V18.1.0
|
||||
- ETSI TS 102 226
|
||||
- ISO 9797-1
|
||||
- NIST SP 800-38B (CMAC)
|
||||
|
||||
### Cards
|
||||
|
||||
Пилл **Cards** управляет сохранёнными конфигурациями карт (пресеты). Каждый пресет хранит криптографические ключи, настройки TAR и счётчик повторов для SCP80-операций.
|
||||
|
||||
| Поле | Описание |
|
||||
|---|---|
|
||||
| SPI1 / SPI2 | Уровень безопасности и настройки PoR |
|
||||
| Ключ KIc / KID | Hex ключи шифрования и MAC |
|
||||
| Индекс KIc / KID | Номер версии ключа |
|
||||
| TAR | Toolkit Application Reference (3 байта) |
|
||||
| Счётчик (CNTR) | 10-значный hex счётчик повторов, автоматически увеличивается после каждой успешной отправки SCP80 |
|
||||
|
||||
**Добавить карту:** заполните имя, SPI1/SPI2, ключи KIc/KID и их индексы, TAR, нажмите **Add**. Карта появится в списке и станет доступна в выпаданом списке **Card preset** на RAM-вкладке.
|
||||
|
||||
**Редактировать карту:** выберите карту в списке, измените поля, нажмите **Save**.
|
||||
|
||||
**Удалить карту:** выберите карту, нажмите **Delete**. Удаляет пресет из `localStorage`.
|
||||
|
||||
**Счётчик:** 10-значный hex-счётчик (CNTR) автоматически увеличивается после каждой успешной отправки SCP80 (ручные отправки Secured Packet и RAM-операции). Обновлённый счётчик автоматически сохраняется обратно в пресет.
|
||||
|
||||
### RAM
|
||||
|
||||
Все операции RAM отправляются как защищённые пакеты SCP80 (ETSI TS 102 225) через SMS-PP-DOWNLOAD ENVELOPE. Карта должна поддерживать SCP03 (AES или 3DES) для безопасной транспортировки.
|
||||
|
||||
Выберите сохранённую конфигурацию карты из выпадающего списка **Card preset**. Если пресет не выбран, RAM-вкладка предупреждает и отказывается выполнять.
|
||||
|
||||
В RAM-подвкладке доступны две операции через выпадающий список **Operation**:
|
||||
|
||||
| Операция | Описание |
|
||||
|---|---|
|
||||
| **Explore Card (all GP data)** | Запрос GET STATUS для ISD, приложений, ELF и модулей ELF, а также GET DATA FF21 для информации о памяти. Результаты отображаются в обзоре с кнопками **Delete** для каждого элемента. |
|
||||
| **Install Package (.cap file)** | Отправка `.cap` файла на карту через сервер: INSTALL\[for load\] → LOAD ×N → INSTALL\[for install (+make selectable)\]. |
|
||||
|
||||
#### Обзор карты (Explorer View)
|
||||
|
||||
После выполнения "Explore Card" отображается:
|
||||
|
||||
- **ISD** — AID, жизненный цикл, привилегии (без удаления; ISD нельзя удалить)
|
||||
- **Приложения** — AID, жизненный цикл, привилегии, связанный ELF/SD. Каждое имеет кнопку **Delete** (GP `DELETE` по AID).
|
||||
- **Executable Load Files** — AID, жизненный цикл, версии, AID модулей. Каждый имеет **Delete** (только ELF) и **Delete All** (каскадное: ELF + модули + установленные приложения, P2=0x80).
|
||||
|
||||
Удаление подтверждается через диалог браузера перед отправкой команды GP `DELETE` через SCP80. Обзор автоматически обновляется после успешного удаления.
|
||||
|
||||
---
|
||||
|
||||
## Конвертация (боковые панели SIM/USIM)
|
||||
## Вкладка Response parser
|
||||
|
||||
### IMSI → EF.IMSI
|
||||
Декодирование ответа команды: выберите отправленную команду, введите SW (например, `9000`) и данные ответа в hex, затем нажмите **Decode**.
|
||||
|
||||
15-значный IMSI → 9 байт EF.IMSI.
|
||||
- **Команда** — группа SIM/USIM (SELECT, STATUS, READ/UPDATE, операции с PIN, CAT-команды TERMINAL PROFILE/ENVELOPE/FETCH/TERMINAL RESPONSE, MANAGE CHANNEL, ...) или группа RAM/GP (INSTALL, LOAD, DELETE, GET/STORE DATA, аутентификация, команды SCP).
|
||||
- **Декодирование SW** — статусные слова по картам generic, UICC (TS 102 221) и GlobalPlatform с автоопределением контекста.
|
||||
- **Декодирование привилегий** — байты привилегий из ответов GET DATA / INSTALL в читаемые флаги.
|
||||
- **Данные ответа** — hex с интерпретацией по команде (например, шаблоны FCP из SELECT).
|
||||
|
||||
### MSISDN → BCD
|
||||
---
|
||||
|
||||
Удаление `+`, добавление `f`, обмен полубайтов.
|
||||
## Card Reader (интеграция с pySim)
|
||||
|
||||
### ICCID → hex
|
||||
Подключение к встроенному [`pysim-otaman-server`](pysim_otaman_server/) для работы с картой.
|
||||
|
||||
Обмен полубайтов строки ICCID.
|
||||
> **Ограничение браузера:** если PWA раздаётся с публичного HTTPS-хоста, для доступа к локальному серверу (`http://127.0.0.1:8080`) нужны два условия: сервер должен отправлять `Access-Control-Allow-Private-Network: true` (pysim-otaman-server ≥ 1.6.1 делает это автоматически), и браузеру должно быть разрешено обращаться к локальной сети — в Chrome/Edge/Vivaldi: Настройки сайта → Доступ к локальной сети → разрешить сайт (или подтвердить запрос). Без разрешения браузера запрос к `127.0.0.1` блокируется ещё до отправки preflight.
|
||||
|
||||
### Provider Name → SPN
|
||||
### Файловый менеджер
|
||||
|
||||
По 3GPP TS 31.102 §4.2.5. Три варианта кодирования:
|
||||
1. GSM 7-bit packed
|
||||
2. UCS2 non-BMP
|
||||
3. UCS2 BMP non-GSM7
|
||||
Дерево файлов UICC. Отображаются имена, FID и AID (для ADF). Клик для чтения содержимого.
|
||||
|
||||
### PLMN → EF_PLMNsel / PLMNwAcT
|
||||
- **Read** — чтение файла (автоопределение transparent/record)
|
||||
- **Edit** — режим редактирования, измените hex-данные и нажмите **Save** для записи
|
||||
- **Raw / Decoded** — переключение между hex-дампом и декодированным JSON
|
||||
|
||||
3-байтное BCD-кодирование + опциональный Access Technology.
|
||||
### Пользовательские файлы
|
||||
|
||||
### Nibble swap
|
||||
Файлы, отсутствующие в модели pysim, можно добавить вручную:
|
||||
|
||||
Обмен полубайтов hex-строки.
|
||||
1. Перейдите на вкладку **Custom files**
|
||||
2. Введите путь (например, `3F00/6F46`) и псевдоним (например, `EF.SPN`)
|
||||
3. Нажмите **Add** — файл появится в дереве курсивом (непроверенный)
|
||||
4. Кликните для проверки существования — при успехе работает как обычный файл
|
||||
|
||||
### Ссылки
|
||||
Пользовательские файлы сохраняются в `localStorage`. Экспорт/импорт в JSON для обмена.
|
||||
|
||||
- 3GPP TS 31.102
|
||||
- 3GPP TS 23.038
|
||||
- ETSI TS 102 225
|
||||
- pySim: enc_imsi()
|
||||
### Proactive UICC
|
||||
|
||||
Подраздел **Proactive UICC** во вкладке Card Reader обеспечивает взаимодействие с CAT-сессией в реальном времени:
|
||||
|
||||
**Subscribed Events** — список событий SET UP EVENT LIST с кнопками **Send**. Клик открывает форму для конкретного типа события:
|
||||
|
||||
- **События без данных** (User Activity, Idle Screen и др.) — однократное уведомление
|
||||
- **Location Status** — выпадающий список: Normal / Limited / No service
|
||||
- **Access Technology Change** — 13 типов RAT
|
||||
- **Network Rejection** — полная адаптивная форма: тип регистрации (LU / GPRS / EPS / 5GS), поля локации (MCC, MNC, LAC, RAC, TAC), доступные технологии, 53-позиционный выпадающий список причин отказа (EMM, GMM, 5GMM, LU)
|
||||
|
||||
**Proactive Command Log** — хронологический список проактивных команд. Каждая строка показывает время, код типа, имя и декодированный квалификатор.
|
||||
|
||||
**PLI Data Dictionary** — редактируемые hex-значения для всех 22 квалификаторов PROVIDE LOCAL INFORMATION (TS 102 223 + TS 131 111). 10 квалификаторов имеют встроенные формы декодирования/кодирования:
|
||||
|
||||
| Код | Декодированные поля |
|
||||
|------|--------------|
|
||||
| 00 | MCC, MNC, LAC/TAC |
|
||||
| 01 | IMEI (15 цифр) |
|
||||
| 03 | Дата, время, TZ |
|
||||
| 04 | Язык (2-символьный код) |
|
||||
| 05 | ME Status, Timing Advance |
|
||||
| 06 | Access Technology (выпадающий список) |
|
||||
| 08 | IMEISV (16 цифр) |
|
||||
| 09 | Search Mode (Auto/Manual) |
|
||||
| 0A | Battery charge (%) |
|
||||
| 0E | Multiple Access Technologies (список через запятую) |
|
||||
|
||||
Значения сохраняются на сервере до перезапуска. Apply → hex обновляется; Save → POST на сервер.
|
||||
|
||||
### Подсказки команд
|
||||
|
||||
Введите имя команды в **pySim command line**. Подсказки по использованию появляются через 300 мс. Автодополнение команд — над полем ввода.
|
||||
|
||||
---
|
||||
|
||||
@@ -452,35 +516,6 @@ PWA проверяет версию сервера при подключении
|
||||
|
||||
---
|
||||
|
||||
## Card Reader (интеграция с pySim)
|
||||
|
||||
Подключение к встроенному [`pysim-otaman-server`](pysim_otaman_server/) для работы с картой.
|
||||
|
||||
> **Ограничение браузера:** если PWA раздаётся с публичного HTTPS-хоста, для доступа к локальному серверу (`http://127.0.0.1:8080`) нужны два условия: сервер должен отправлять `Access-Control-Allow-Private-Network: true` (pysim-otaman-server ≥ 1.6.1 делает это автоматически), и браузеру должно быть разрешено обращаться к локальной сети — в Chrome/Edge/Vivaldi: Настройки сайта → Доступ к локальной сети → разрешить сайт (или подтвердить запрос). Без разрешения браузера запрос к `127.0.0.1` блокируется ещё до отправки preflight.
|
||||
|
||||
### Файловый менеджер
|
||||
|
||||
Дерево файлов UICC. Отображаются имена, FID и AID (для ADF). Клик для чтения содержимого.
|
||||
|
||||
- **Read** — чтение файла (автоопределение transparent/record)
|
||||
- **Edit** — режим редактирования, измените hex-данные и нажмите **Save** для записи
|
||||
- **Raw / Decoded** — переключение между hex-дампом и декодированным JSON
|
||||
|
||||
### Пользовательские файлы
|
||||
|
||||
Файлы, отсутствующие в модели pysim, можно добавить вручную:
|
||||
|
||||
1. Перейдите на вкладку **Custom files**
|
||||
2. Введите путь (например, `3F00/6F46`) и псевдоним (например, `EF.SPN`)
|
||||
3. Нажмите **Add** — файл появится в дереве курсивом (непроверенный)
|
||||
4. Кликните для проверки существования — при успехе работает как обычный файл
|
||||
|
||||
Пользовательские файлы сохраняются в `localStorage`. Экспорт/импорт в JSON для обмена.
|
||||
|
||||
### Подсказки команд
|
||||
|
||||
Введите имя команды в **pySim command line**. Подсказки по использованию появляются через 300 мс. Автодополнение команд — над полем ввода.
|
||||
|
||||
## Сервер (pysim-otaman-server)
|
||||
|
||||
Встроенный Python-сервер оборачивает [pySim](https://osmocom.org/projects/pysim/wiki) и раздаёт как PWA (из `frontend/`), так и JSON API по `/api/*`.
|
||||
@@ -531,4 +566,4 @@ pysim-otaman-server --http-port 8080
|
||||
|
||||
### Справочник API
|
||||
|
||||
Полный справочник endpoints: [docs/api.md](docs/api.md).
|
||||
Полный справочник endpoints: [docs/api.md](docs/api.md).
|
||||
|
||||
Reference in New Issue
Block a user