Форк PySim. То что хотелось добавить

Форк PySim. То что хотелось добавить

Семён сохраняет полезное_)

Много лет я пользовался pysim. За годы накопилось несколько даже попутных проектов для работы с файлами из pysim и надстроек к нему. Например - https://gitflic.ru/project/sdivcom/sim_translate
Но нашлись наконец-то силушки(на деле просто критическая масса проблем привысила все рамки).

За основу взят код из апстрима pysim и проект пока назван просто форк.

Форк - это osmocom/pysim плюс утилита pySim-translate.py. Она отвечает на два вопроса: что записано на карте и почему карта не работает. Всё, что умеет pySim, работает в форке так же: форк добавляет новое, а не меняет существующее.

Основа

Форк включает upstream по состоянию на 23 сентября 2026 года (коммит 3c437d4), последнее слияние сделано 27 сентября 2026 года.

Проект доступен здесь - https://gitflic.ru/project/sdivcom/pysim_fork

Что добавлено

Утилита pySim-translate.py

pySim показывает содержимое карты в терминах спецификаций: файлы, байты, поля структур. pySim-translate.py собирает из этого сводку, которую читает человек: идентификаторы, сети, службы, данные абонента - и диагностику с объяснением найденных проблем. Вывод на русском или английском языке (--lang ru|en). Та же сводка доступна внутри pySim-shell командой summary.

Чего в pySim нет вообще

Большая часть сводки собрана из декодеров pySim. Но кое-что форк делает сам:

  • Диагностика. pySim разбирает файлы по одному и не сопоставляет их между собой. Форк проверяет, что сходится: IMSI с домашней сетью, службы с файлами, готовность к 5G и VoLTE, статус регистрации, контрольные суммы ICCID и EID.
  • Паспорт чипа (CPLC) - изготовитель микросхемы, ОС, даты производства и персонализации (GET DATA 9F7F).
  • OTA-сообщения в EF.SMS. pySim показывает защищённый пакет SMS-PP как испорченный текст; форк распознаёт его и выводит адресата (TAR) и параметры защиты.
  • Правила ARA-M - кому правило даёт права оператора на Android, к какому приложению карты открывает доступ.
  • Названия операторов по встроенной таблице MCC/MNC (3094 записи).
  • Удалённые, но не затёртые сообщения и данные абонента одним списком.
  • Чтение pcap и pcapng без tshark. Для файлов записи pySim-trace.py требует pyshark и wireshark; форк читает их сам.

Ошибки pySim, которые форк обходит

По ходу работы нашлись четыре ошибки в самом pySim. Форк не правит upstream, а обходит их в своём коде:

  • после ответа 63Cx на VERIFY без данных pySim шлёт лишний GET RESPONSE - счётчик попыток PIN теряется (зацикливание, которое это вызывало, upstream уже устранил);
  • смещение READ BINARY вычисляется через «и» вместо «или» и всегда равно нулю - pySim-trace.py не видит чтения файла по частям;
  • encode_cmd добавляет длину пакета OTA только к зашифрованному пакету;
  • SmsCommandPacket без контроля целостности пропускает байт KID, и TAR читается со сдвигом.

Тесты upstream в форке сохранены и запускаются вместе с тестами форка.

Что осталось прежним

  • pySim-shell, pySim-prog, pySim-read, pySim-trace и остальные утилиты работают как в upstream.
  • Дамп из pySim-shell (fsdump) читается без изменений. Дамп, который снимает сам форк, — тот же формат с дополнительными полями (CPLC, счётчики PIN, апплеты, правила ARA-M).



Report Page