The zip is just an archive: it extracts and runs on any OS, and the release's Source code assets are offered as zip as well as tar.gz, so users pick the format they prefer. The section is now "Zip (no installer)" (RU "Zip (без установки)") and says the archive works on any OS; the Windows/Linux start commands stay as instructions, not as the section's rationale. The source-archive note names both formats, and the release-notes template follows.
39 KiB
SIMtrace Analyser
English | Русский
Анализатор APDU-трассировок в формате GSMTAP-SIM — захватывает обмен с
SIM/UICC из UDP-потока GSMTAP (или импортирует файлы PCAP/PCAPNG),
декодирует его и отдаёт устанавливаемое веб-приложение для просмотра.
В репозиторий также включён simtrace2-pysniff — замена simtrace2-sniff
на Python, которая захватывает трафик с оборудования Osmocom SIMtrace2
и может передавать GSMTAP этому анализатору.
📢 Новости и обновления проекта: atroshin.ru | Telegram-канал
Требования
Обязательно
- Python 3.9+ — для захвата GSMTAP, импорта PCAP и просмотра достаточно стандартной библиотеки.
Только для захвата с оборудования Osmocom SIMtrace2 (--capture direct и
встроенная утилита simtrace2-pysniff):
- PyUSB —
pip install pyusb - libusb — системная библиотека, обычно уже есть в Linux; в Windows нужно заменить драйвер SIMtrace2 (см. Доступ к USB-устройству)
- Оборудование SIMtrace2 с прошивкой в режиме trace (VID
1d50, PID60e3, USB classff, subclass01); сборка и прошивка trace-прошивки описаны в проекте SIMtrace2.
Для --capture gsmtap (источник GSMTAP может быть даже на другой машине),
--capture disabled и импорта PCAP анализатору ничего из этого не нужно.
Быстрый старт
Три способа запустить анализатор; все они отдают один и тот же веб-интерфейс на http://127.0.0.1:8081/.
1. Wheel (pip)
Wheel содержит интерфейс внутри пакета, поэтому сервер отдаёт его сам:
pip install ./simtrace_analyser-2.7.13-py3-none-any.whl
simtrace-analyser-server --capture gsmtap
Если системный Python управляется извне (PEP 668 — обычное дело в Arch и
Fedora), сначала создайте виртуальное окружение:
python3 -m venv .venv && . .venv/bin/activate.
Все артефакты лежат на странице
последнего релиза.
pip может скачать wheel напрямую (подставьте версию со страницы), а GitHub
CLI — выбрать последнюю:
pip install https://github.com/anttro/simtrace-analyser/releases/download/v2.7.13/simtrace_analyser-2.7.13-py3-none-any.whl
# или:
gh release download --pattern '*.whl'
pip install ./simtrace_analyser-*.whl
2. Zip (без установки)
Скачайте simtrace-analyser-2.7.13.zip со страницы релиза и распакуйте в любое
место: это рабочее дерево (пакеты Python, интерфейс, скрипты запуска и документация —
без тестов и git). Архив подходит для любой ОС. Затем запустите.
Windows:
start.bat
Linux/macOS:
./start.sh
Python 3 должен быть в PATH; pip install pyusb нужен только для прямого
захвата с SIMtrace2. Скрипты принимают параметры сервера
(start.bat --capture direct, ./start.sh --capture direct --port 8080).
(Архивы Source code (zip / tar.gz) из релиза — это полное дерево вместе с
тестами; они работают так же, как клон ниже.)
3. Клон репозитория (для разработки)
git clone https://github.com/anttro/simtrace-analyser.git
cd simtrace-analyser
./start.sh # Linux/macOS; в Windows: start.bat
Скрипты запуска добавляют каталог в PYTHONPATH и запускают
python -m simtrace_analyser, поэтому для просмотра и захвата GSMTAP ничего
устанавливать не нужно; их параметры — это параметры сервера
(./start.sh --capture direct --port 8080). Для прямого захвата с
оборудования нужен PyUSB (pip install pyusb). Чтобы получить консольные
команды (simtrace-analyser-server, simtrace2-pysniff), установите пакет:
pip install -e .
simtrace-analyser-server --capture gsmtap
Первый запуск
Откройте http://127.0.0.1:8081/ в браузере. Ctrl+C останавливает
сервер.
--capture gsmtap(по умолчанию) — слушать GSMTAP-SIM на UDP 4729, например отsimtrace2-pysniffилиsigrok_iso7816_stream;--capture direct— читать оборудование SIMtrace2 напрямую (нужен PyUSB; в Windows также нужна замена драйвера, см. Доступ к USB-устройству);--capture disabled— только просмотр сохранённых захватов.
Полное руководство по работе (параметры сервера, экраны интерфейса, утилита захвата) находится в разделе Использование.
Использование
Анализирующий сервер + интерфейс (simtrace-analyser-server)
Сохраняет захваченный APDU-трафик в SQLite и отдаёт его по HTTP вместе
со встроенным фронтендом SIMtrace Analyser (frontend/ в исходном клоне, при
установке — внутри пакета) на том же origin.
Три режима захвата:
# Слушать GSMTAP от simtrace2-pysniff (или оригинального simtrace2-sniff):
simtrace-analyser-server --capture gsmtap
# Захват напрямую с оборудования SIMtrace2 (внешний инструмент не нужен):
simtrace-analyser-server --capture direct
# Просмотр/анализ существующих записей без бэкенда захвата:
simtrace-analyser-server --capture disabled
При запуске из клона или рабочего zip те же режимы доступны через скрипты запуска.
Linux/macOS:
./start.sh --capture gsmtap
./start.sh --capture direct
./start.sh --capture disabled
Windows:
start.bat --capture gsmtap
start.bat --capture direct
start.bat --capture disabled
Параметры передаются как есть (./start.sh --capture direct --port 8080).
Сервер пишет в stderr информацию о жизненном цикле захвата (каждая строка
с локальным временем): Capture started при старте, периодический
heartbeat Capture alive: session=N messages=M bytes=B dropped=D skipped=S
и Capture stopped (либо ERROR: capture thread stopped on error …,
если поток захвата неожиданно умер). Неверно сформированные или не-SIM
датаграммы GSMTAP отбрасываются и считаются (dropped), а не молча
убивают захват; tpdu-пакет, вовсе не похожий на APDU (короче заголовка,
недопустимый CLA FF или зарезервированный ISO класс 001x),
пропускается и считается (skipped) — посимвольный или миссемплированный
поток больше не засоряет декодирование. Интервал heartbeat по умолчанию
60 с, настраивается через --log-interval SECONDS.
GSMTAP-листенер также принимает декодер sigrok-iso7816-stream
(https://github.com/anttro/sigrok_iso7816_stream) — пассивный SIM-сниффер
на базе FX2-логического анализатора, выдающий тот же формат GSMTAP-SIM
на UDP 4729. Его стандартные подтипы PPS-запроса/ответа (0x02/0x03)
декодируются как PPS, а пользовательские подтипы для событий линий RST/VCC
(0x10/0x11, добавлены для совместимости с тем проектом) — как временные
маркеры RESET ASSERTED / RST de-asserted — ATR follows и VCC ON/OFF;
сброс или пропадание питания корректно сбрасывает отслеживание выбранного
файла. Когда событие
RST несёт измеренную частоту CLK (декодер v1.9.0+, опциональное расширение
полезной нагрузки), следующий ATR получает частоту CLK, скорость передачи
данных и ETU, вычисленные из его TA1 Fi/Di
(data_rate = clk_hz × D / F); измерение потребляется ATR, поэтому
следующий ATR без сброса не получит устаревшую скорость (поздно пришедшее
измерение восстанавливается для «своего» ATR). GSMTAP-пакеты с флагом
десинхронизации GSMTAP_FLAG_BAD_FCS (устанавливается тем декодером при
нарушении кадрирования) отображаются в таймлайне как
помеченная/десинхронизированная запись, чтобы такие артефакты было легко
заметить при разборе, а не молча искажали декодирование.
Импорт текстового экспорта COMPRION
Кнопка Import COMPRION trace принимает экспорт ISO Protocol Layer (табулированный текст) из COMPRION Device Manager — байтовое представление протокола (ATR, PPS, APDU с кодами возврата). Экспорт ISO Application Layer не содержит необработанных байтов ответов и не нужен; при его выборе выводится указание на файл Protocol Layer (та же проверка выполняется в интерфейсе до загрузки и на сервере — для вызовов API).
Обмены перекодируются в такие же «проводные» TPDU, какие несёт захват
GSMTAP (обмен case 4 превращается в команду, статусное слово 61 xx и GET
RESPONSE с данными ответа и итоговым SW), поэтому связывание
команда/ответ, декодирование FCP и файлов и фильтры работают так же, как
для живого захвата.
Точные метки времени: диалог импорта запрашивает экспорт ISO Protocol
Layer (обязательный) и, при наличии, соответствующий экспорт ISO
Application Layer — два отдельных поля выбора, имена выбранных файлов
видны, а ошибка остаётся в диалоге до исправления или отмены. С обоими
файлами метки времени Application Layer по обменам становятся таймлайном
трассы: окно сессии и интервалы между APDU точные; без него таймлайн —
оценка, описанная ниже. Перед импортом проверяется, что файлы относятся к
одной сессии (Session Name, при отсутствии — Working directory; метки
времени экспорта у слоёв различаются и не сравниваются) и что число обменов
совпадает (экспорты должны покрывать один и тот же набор обменов) — при
несовпадении импорт отклоняется, а не смешивает сессии. У ATR и обмена PPS
блоков в Application Layer нет, поэтому они получают метку времени
предыдущего обмена.
Только Protocol Layer: столбец Delay измеряет лишь активность
карты/линии — паузы хоста между сериями APDU в него не входят — поэтому
таймлайн сохраняет порядок сообщений и короткие интервалы, но заметно
короче реальной сессии. Его единица измерения задаётся предполагаемой
тактовой частотой 3,8 МГц (CLK_HZ в simtrace_analyser/comprion.py) —
это масштаб, а не измерение: в экспорте нет CLK, и импорт намеренно его не
выдумывает (ATR показывает F/D из файла, без аннотации скорости/ETU, в
отличие от захвата сниффером sigrok-iso7816-stream). Окно настенных часов
сессии берётся из метки времени Session Name в файле, если она там есть.
Обмены длиннее 255 байт (APDU с расширенной длиной) невозможно представить в хранимом «проводном» виде — они пропускаются с пометкой в отчёте импорта.
Просмотр файлов (сопровождение состояния файлов)
В верхней панели вкладки «Трассировка» появился выбор вида (Map / Stats /
Files) — он выровнен по правому краю над боковой панелью и имеет её
ширину, поэтому виден всё время, пока панель прокручивается (выпадающий
список, три подписи-вкладки уже не помещались). Вид
Files — это таймлайн файловых операций по всей трассе: строки Read и
Update показывают те же имена файлов, что и вид Map (изменение со стороны
карты выглядит как чтение со ссылкой Изменено на карте!, открывающей
подробности), а щелчок по строке переходит прямо к APDU в трассе и оставляет
его выделенным, пока не выбран другой (список APDU сохраняет позицию читателя:
новые сообщения прижимают вид к низу, только пока читатель уже внизу,
поэтому переход не срывается живым опросом и не снимает выделение). У строк с записанным изменением
(изменение со стороны карты либо запись, изменившая или впервые показавшая
байты) есть кнопка Show diff («Изменения»): окно показывает полный путь файла (MF/EF_ICCID (2FE2),
ADF/EF_IMSI (6F07), DF_TELECOM/DF_PHONEBOOK/4FA1, AID …/4F09 — вся
цепочка DF из пути выбора в трассе, каждый DF назван по словарю
спецификаций, а AID — по меткам из EF.DIR, если они есть) и затронутую
единицу — файл
целиком или изменившуюся запись — до и после изменения в виде hex-вида
(до 16 байт в строке: короткий файл/запись заканчивает строку, а не
дополняется --, и столбец смещений появляется, только когда представление
занимает больше одной строки), причём изменённые
байты подсвечены одним цветом, а впервые наблюдаемые — другим; ниже —
счётчики изменённых/новых байт, ссылка на APDU и легенда цветов под
представлениями, перечисляющая только реально показанные пометки.
У файлов телефонной книги FID назначает карта, поэтому словарь их не
знает: если в трассе есть записи EF_PBR, они разбираются
(TS 31.102 §4.4.2.1 — группы типов A8/A9/AA и примитивные теги C0…CC
с FID и, для трёхбайтового объекта, SFI), и Files называет файлы по
объявлению самой карты — например
DF_TELECOM/DF_PHONEBOOK/EF_PBC (4FA1) — а объявленные SFI пополняют карту
SFI→FID этого DF (правило «SFI = 5 младших бит FID» из TS 102 221 §11.1.1.4.8
для остальных файлов остаётся).
Изображения отдаёт GET /api/sessions/<id>/files/image?key=…&change=…; они
восстанавливаются из текущего образа отменой более поздних изменений
(filetrack.FileTracker.change_images) — поэтому ничего не дублируется по
событиям. Каждое изменение значения записывается, так что значения точны;
байт, который был лишь впервые показан после выбранного изменения, может
отображаться известным в обоих видах.
Данные даёт simtrace_analyser/filetrack.py (GET /api/sessions/<id>/files) —
однопроходный анализатор сессии, который ведёт по ключу (DF, FID) и через
сбросы карты: счётчики доступа (select/read/update, только успешные
операции), разреженный образ наблюдаемого содержимого и журнал изменений.
Изменения со стороны устройства — это операции UPDATE из трассы; изменения со
стороны карты выводятся, когда чтение возвращает байты, отличающиеся от уже
известных образу (никогда не виденные байты просто заполняют образ — это
наблюдение, а не изменение). Файлы, доступные по SFI, попадают в ту же
запись, что и доступ по пути/FID: соответствия SFI ↔ FID берутся из
нормативных таблиц (анекс H.1 TS 102 221 и анексы H.1–H.12 TS 31.102;
строки SFI ISIM — из TS 31.103) и из каждого
показанного FCP с DO 88, включая правило спецификации «SFI = 5 младших бит
FID» при отсутствии DO; SFI, использованный до того, как связь выучена,
остаётся предварительным и сливается с разрешённой записью. Контекст DF
следует TS 102 221 §8.4/Table 8.2 (выбор EF оставляет текущим его родительский
DF, включая выбор по пути); приложения, выбранные по неизвестному AID,
получают в качестве идентичности DF сам AID и имя из EF.DIR, если он
показан в трассе. Ограничения: образ замораживается после 64 КБ
наблюдаемых байт на файл (image_truncated), журнал изменений хранит
последние 1000 событий на файл (changes_total продолжает считать).
Счётчики API отдаёт, но в этом виде пока не показываются.
Имена файлов привязаны к DF: simtrace_analyser/ef_tables.py содержит
полные таблицы файлов и SFI по каждому DF, извлечённые из закреплённых
спецификаций (TS 102 221, TS 31.102 включая анексы SFI H.1–H.12, TS 31.103,
TS 51.011), поэтому FID, повторно используемый в разных DF, разрешается в имя
своего контекста — 4F09 это EF_SUPI_NAI в DF_5GS, но EF_PROSE_GC в DF_ProSe;
6F07 — EF_IMSI в USIM/SIM, но EF_IST в ISIM; 6F4E — EF_EXT4 в DF_TELECOM,
но EF_EXT5 в ADF USIM, — а плоская таблица служит запасным вариантом, когда DF
неизвестен. tests/extract_spec_tables.py пересобирает закреплённый фикстур
(tests/data/spec_files.json), --check повторно сверяет таблицы с PDF.
Параметры сервера:
--host ADDR адрес привязки HTTP (по умолчанию: 127.0.0.1)
--port PORT порт HTTP-сервера (по умолчанию: 8081)
--db FILE путь к базе SQLite (по умолчанию: ~/.simtrace-analyser/sessions.db)
--capture MODE gsmtap | direct | disabled (по умолчанию: gsmtap)
--gsmtap-port PORT UDP-порт листенера GSMTAP (по умолчанию: 4729)
--gsmtap-bind ADDR UDP-адрес привязки листенера GSMTAP (по умолчанию: 127.0.0.1;
используйте 0.0.0.0, чтобы принимать из Docker-сети или с другого хоста)
--web-dir PATH каталог статических файлов интерфейса (по умолчанию:
фронтенд внутри установленного пакета или
<repo>/frontend при запуске из исходников)
Затем откройте http://127.0.0.1:8081/ в браузере. Используйте
--web-dir PATH, чтобы отдавать другой каталог интерфейса (по умолчанию:
фронтенд внутри пакета или <repo>/frontend при запуске из исходников).
Размещённый интерфейс (лендинг)
Автономная копия интерфейса размещена на https://simtrace.atroshin.ru.
Это только интерфейс: укажите в нём (Settings → Server URL) адрес
локально запущенного simtrace-analyser-server.
Ограничение браузера: это единственная схема, где интерфейс и API находятся на разных origin, поэтому браузер применяет правила CORS и Private Network Access. Доступ к локальному серверу (
http://127.0.0.1:8081) требует двух вещей: сервер должен отправлятьAccess-Control-Allow-Private-Network: true(этот сервер отправляет), и браузер должен иметь разрешение на доступ к локальной сети — в Chrome/Edge/Vivaldi: Настройки сайта → Доступ к локальной сети → разрешить сайту (или принять запрос разрешения). Без разрешения браузера запрос к127.0.0.1блокируется ещё до отправки preflight.
Утилита захвата (simtrace2-pysniff)
Захватывает трафик оборудования SIMtrace2 и выводит его в stdout, GSMTAP
(Wireshark) или PCAP-файлы. Это встроенная замена оригинального
инструмента Osmocom simtrace2-sniff.
Скрипт запуска ./sniff-start.sh выполняет предварительную проверку прав
доступа к USB (при неудаче печатает инструкцию по установке udev-правила)
и затем запускает модуль Python. В Windows используйте sniff-start.bat
с теми же параметрами (проверка прав не требуется).
./sniff-start.sh
./sniff-start.sh --format timestamp
./sniff-start.sh --gsmtap 127.0.0.1:4729
./sniff-start.sh --pcap trace.pcap --format atr-time
Параметры также можно задавать через переменные окружения:
FORMAT=timestamp GSMTAP=127.0.0.1 ./sniff-start.sh
Кроссплатформенный запуск модуля:
python -m simtrace2_pysniff
python -m simtrace2_pysniff --format timestamp --gsmtap 127.0.0.1:4729
python -m simtrace2_pysniff --pcap trace.pcap
Если пакет установлен через pip install -e ., используйте консольный
скрипт напрямую:
simtrace2-pysniff --format atr-time
Параметры CLI утилиты
python -m simtrace2_pysniff [OPTIONS]
--format, -f FORMAT Формат вывода (по умолчанию: hex)
hex — обычный hex-дамп
timestamp — строки TPDU с префиксом [ЧЧ:ММ:СС.мс]
atr-time — строки TPDU с префиксом [СССС.мс] от последнего ATR
--gsmtap HOST[:PORT] Отправлять ATR/TPDU как GSMTAP по UDP (порт по умолчанию 4729)
--pcap FILE Записывать перехваченные данные в PCAP для Wireshark
--output, -o FILE Записывать hex-дамп в файл
--no-stdout Не выводить hex-дамп в stdout
--vendor HEX USB vendor ID (по умолчанию: 0x1d50)
--product HEX USB product ID (по умолчанию: автоопределение)
Параметры восстановления:
--no-reconnect Выходить при отключении USB вместо переподключения
--reconnect-delay-min SEC Минимальная задержка переподключения (по умолчанию: 1.0)
--reconnect-delay-max SEC Максимальная задержка переподключения (по умолчанию: 30.0)
--backoff-factor N Множитель экспоненциальной задержки (по умолчанию: 1.5)
--inactivity-timeout SEC Переподключаться после N секунд тишины (по умолчанию: выключено)
Форматы вывода
hex(по умолчанию): обычный hex-дамп —ATR: 3b 9e ...,TPDU: a0 a4 00 00 02 3f 00timestamp: строки TPDU с локальным временем —[14:32:05.123] TPDU: a0 a4 00 00 02 3f 00atr-time: строки TPDU с секундами от последнего ATR —[0001.234] TPDU: a0 a4 00 00 02 3f 00
Сообщения, не являющиеся TPDU (ATR, PPS, изменения состояния карты, Fi/Di), выводятся одинаково во всех форматах.
- GSMTAP: сообщения ATR и APDU по UDP (порт 4729) в Wireshark
- PCAP: сообщения ATR/TPDU как пакеты Ethernet/IP/UDP/GSMTAP, открываются в Wireshark
Фоновый режим / демон
SIGHUP автоматически игнорируется, когда stdin не является терминалом (т.е. при запуске в фоне или через канал). Сессии в терминале на переднем плане по-прежнему обрабатывают SIGHUP обычным образом.
Для постоянной работы в фоне с выводом в файлы:
nohup ./sniff-start.sh --output /tmp/sniff.log &> /tmp/sniff-err.log &
# или
FORMAT=timestamp nohup python -m simtrace2_pysniff --output /tmp/sniff.log &> /tmp/sniff-err.log &
Использование как библиотеки
from simtrace2_pysniff import SniffSession
session = SniffSession(inactivity_timeout=30.0)
for msg in session.iter_messages():
print(f"{msg.type}: {msg.data.hex()}")
Восстановление
Утилита по умолчанию переживает сбросы оборудования, отключения кабеля
и зависания прошивки — она переподключается с экспоненциальной задержкой
(1с → 30с). Используйте --inactivity-timeout, чтобы также переподключаться
при «тихих» зависаниях прошивки.
Доступ к USB-устройству
Нужен для захвата с оборудования SIMtrace2 (утилита и режим
--capture direct сервера); для источников GSMTAP и PCAP не требуется.
Linux
Для доступа к устройству SIMtrace2 без root нужно udev-правило.
sudo cp 70-simtrace2-pysniff.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
Затем переподключите USB-кабель SIMtrace2. Правило использует
TAG+="uaccess" (ACL systemd-logind) — членство в группе и права на
запись для всех не нужны.
Windows
В Windows нет libusb-совместимого драйвера для SIMtrace2. Используйте Zadig, чтобы заменить драйвер по умолчанию:
- Скачайте и запустите Zadig
- Подключите устройство SIMtrace2
- Выберите его в выпадающем списке (VID
1D50, PID60E3— "Osmocom SIMtrace 2") - Выберите WinUSB (или libusbK) как драйвер замены
- Нажмите Replace Driver (однократная операция)
После этого python -m simtrace2_pysniff работает так же, как в Linux.
Скрипты запуска для Windows соответствуют shell-версиям и передают все
параметры: start.bat --capture direct запускает сервер анализатора, а
sniff-start.bat — утилиту захвата. Оба вызывают команду python, поэтому
Python 3 должен быть в PATH (проверьте python --version в новом окне
команды).
Компоненты
- Анализирующий сервер + интерфейс (
simtrace-analyser-server) — сохраняет захваченный трафик в SQLite, декодирует его и отдаёт интерфейс (frontend/) вместе с HTTP API на одном origin. Три режима захвата: GSMTAP-листенер, захват напрямую с оборудования SIMtrace2 или отключённый захват (только просмотр существующих записей). - Утилита захвата (
simtrace2-pysniff) — захватывает трафик оборудования SIMtrace2 и выводит его в stdout, GSMTAP (Wireshark) или PCAP-файлы. Это один из нескольких источников GSMTAP, которые принимает анализатор (см. также sigrok_iso7816_stream). - Интерфейс (
frontend/) — окно трассировки с декодированными APDU, SIM Toolkit, SMS и SCP80 OTA; сессии, импорт PCAP и трасс COMPRION, интерфейс EN/RU.
Возможности
Декодер APDU (на стороне сервера, отображается в интерфейсе):
- Полное декодирование 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 - SIM Toolkit — SAT (GSM 11.14), CAT (TS 102 223) и USAT (TS 31.111): proactive-команды с декодированными квалификаторами, TERMINAL RESPONSE, ENVELOPE (Menu Selection, Call Control, SMS-PP download…); учитываются известные несоответствия старых карт, нераспознанные TLV сохраняются
- TERMINAL CAPABILITY (TS 102 221 §11.1.19) — питание терминала (класс напряжения, максимальный ток, тактовая частота), расширенные логические каналы, дополнительные интерфейсы (UICC-CLF) и возможности eUICC (SGP.22/SGP.32)
- SMS TPDU — SMS-DELIVER/SUBMIT, метки времени SCTS, информационные элементы UDH
- SCP80 OTA secured packets — биты SPI (шифрование, требование/режим PoR, RC/CC/DS, счётчик), алгоритм KIc/KID + набор ключей, TAR, CNTR/PCNTR; декодирование Response Packet (PoR) по GET RESPONSE; опциональная расшифровка на клиенте зашифрованных пакетов — вставьте 3DES/AES-ключ карты в панели деталей, чтобы увидеть настоящие CNTR и защищённые данные приложения (ключ остаётся в браузере, только в памяти; зашифрованные в эфире CNTR/PCNTR/RC — это шифротекст, и они так и помечены); защищённое сообщение приложения декодируется как поток C-APDU (SELECT, UPDATE BINARY, …) с полной разбивкой CLA/INS/P1/P2/Lc/Le — сразу для открытого текста или после расшифровки для зашифрованных пакетов
- Разбор 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)
Интерфейс SIMtrace Analyser (frontend/):
- Окно трассировки с режимами «Карта»/«Список» — proactive, TERMINAL RESPONSE, ENVELOPE и AUTH-команды выделяются в режиме карты
- Сессии с прямыми ссылками (
#session=N), импорт PCAP (.pcap/.pcapng/.cap), импорт трасс COMPRION (текстовый экспорт «ISO Protocol Layer» из Device Manager), поиск и фильтр команд с множественным выбором — любые команды и/или готовые пресеты («Проактивные сессии»: FETCH, TERMINAL PROFILE и все команды с ответом SW 91xx; «Файловые операции»: SELECT, READ/UPDATE BINARY и READ/UPDATE RECORD, вместе с GET RESPONSE, несущим данные выбранной команды) - PWA (progressive web app): устанавливается на рабочий стол или домашний экран и работает офлайн; тёмная тема, интерфейс на английском/русском
Связанные проекты
- simtrace2 — вышестоящий проект оборудования/прошивки SIMtrace2, с которого утилита захвата снимает трафик.
- sigrok_iso7816_stream — пассивный ISO 7816 сниффер на базе FX2LP, выдающий такой же поток GSMTAP-SIM на UDP 4729 (принимается GSMTAP-листенером этого проекта).
Лицензия
MIT — см. LICENSE. Декодеры и реализация DES/3DES в интерфейсе написаны самостоятельно по спецификациям ISO 7816, ETSI и 3GPP; сторонний код в проект не включён. PyUSB (BSD-3-Clause) — зависимость для прямого захвата с оборудования.
