pysim-4-1.1.17 eUICC ISD-R commands

1.1.17 eUICC ISD-R 命令

这些命令用于执行针对 GSMA 消费者 eSIM 的 eUICC 的各种操作。它们实现了所谓的 ES10a、ES10b 和 ES10c 接口。基本上,它们执行了通常由 UE 中的 LPAd 完成的任务。

要使用这些命令,您需要按照 GSMA SGP.22 文档中指定的步骤进行操作:

  • 打开一个新的逻辑通道(并开始使用它)
  • 选择 ISD-R 应用程序

1.1.18 cmd2 可设置参数

cmd2 拥有可设置参数的概念,这些参数类似于操作系统级 shell 中的环境变量:它们可以被读取和设置,并且会在某种程度上影响行为。

  • conserve_write
    如果启用,pySim 在被要求写入卡时,总是会先读取相应的文件/记录,并验证待写入的值是否与卡上当前的值不同。如果相同,则跳过写入操作。只有当新值与卡上当前值不同时,才会执行写入操作。
    如果禁用,pySim 将总是写入,不管当前/新值如何。
  • json_pretty_print
    此参数决定生成的 JSON 输出是否(默认情况下)应该进行美化打印(多行输出,缩进级别为 4 个空格)。
    此参数的默认值为 'true'。
  • debug
    如果启用,在出现异常时将显示完整的 Python 回溯信息。
  • apdu_trace
    布尔变量,用于决定是否打印命令 + 响应 APDU 的十六进制转储。
  • numeric_path
    布尔变量,用于决定路径(例如,在提示符中)是否以数字 FID 或字符串名称显示。

1.2 pySim-trace

pySim-trace 是一个用于高级解码 APDU 协议跟踪的工具,例如通过 Osmocom SIMtrace2 或 osmo-qcdiag 获得的跟踪。

pySim-trace 利用 pySim-shell 对 SIM 卡相关知识的现有了解,包括 SIM/USIM/ISIM/HPSIM 卡上各种文件的结构/编码,并将其应用于解码协议跟踪。这意味着它不仅能显示命令的名称(如 READ BINARY),还能理解当前选定的文件是什么,以及如何解码该文件的内容。

pySim-trace 还能理解传递给命令的参数以及如何解码它们,例如 USIM/ISIM/HPSIM 应用程序中的 AUTHENTICATE 命令。

1.2.1 演示

要了解 pySim-trace 的使用方式,您可以观看 2022 年 11 月 SIMtrace2 教程的相关部分,其录像是公开可访问的。

1.2.2 运行 pySim-trace

运行 pySim-trace 需要您指定待解码 APDUs 的来源。有几个支持的选项,每个都有自己的相应参数(如 PCAP 解码的文件名)。

详细命令行参考请参见下文。

一个典型的 pySim-trace 执行,用于实时解码 GSMTAP(SIM APDU)例如来自 SIMtrace2 或 osmo-qcdiag 的数据,看起来像这样:

复制代码

取消自动换行

复制

./pySim-trace.py gsmtap-udp

这将绑定到本地主机(127.0.0.1)的默认 UDP 端口 4729(GSMTAP),并解码在那里接收到的任何 APDUs。

1.2.4 约束

  • 为了正确跟踪文件系统树中的当前位置和其他状态,重要的是您正在解码的跟踪包括与 SIM 卡的所有通信,理想情况下从一开始(开机)。
  • pySim-trace 目前仅支持 ETSI UICC(USIM/ISIM/HPSIM),尚未支持传统的 GSM SIM 卡。这不是一个基本的技术限制,只是目前还没有人开发和测试这部分。非常欢迎贡献。

1.3 传统工具

传统工具是 pySim-shell 出现之前就存在的经典 pySim-prog 和 pySim-read 程序。

现在,强烈推荐使用 pySim-shell 而不是这些传统工具。

1.3.1 pySim-prog

pySim-prog 是 pySim 软件套件的第一个部分。它最初是作为一个工具,用于向非常简单的 SIM 卡写入 ICCID、IMSI、MSISDN 和 Ki,后来扩展到支持多种其他类型的卡。随着支持的功能数量变得无法仅用命令行参数来表达,于是创建了 pySim-shell。

基本用例仍然可以使用 pySim-prog。

可编程 SIM 卡

有两种模式是可能的:

  • 用户手动指定每个参数:
    这是使用 pySim-prog 的最常见方式。用户将通过命令行直接指定所有相关参数。一个典型的命令行可能如下所示:
复制代码

取消自动换行

复制

pySim-prog.py -p <pcsc_reader> --ki <ki_value> --opc <opc_value> --mcc <mcc_value> --mnc <mnc_value> --country <country_code> --imsi <imsi_value> --iccid <iccid_value> --pin-adm <adm_pin>

请注意,即使这个已经很长的命令行也只包含了最常见的卡参数。要获取所有可能参数的完整列表,请使用 pySim-prog 的 --help 选项。还需要注意的是,并非所有参数都为所有卡类型所支持。特别是非常简单的可编程 SIM 卡只支持非常基础的参数集,如 MCC、MNC、IMSI 和 Ki 值。

  • 从最小集生成参数:
    也可以将某些参数的生成留给 pySim-prog。当需要初始化大量卡片并使用随机生成的密钥材料时,这特别有帮助。
复制代码

取消自动换行

复制

pySim-prog.py -p <pcsc_reader> --mcc <mcc_value> --mnc <mnc_value> --secret <random_secret> --num <card_number> --pin-adm <adm_pin>

参数 --secret 指定一个随机种子,用于生成卡片特定的参数(IMSI)。种子应包含足够的随机性以避免冲突。建议安全地存储种子,以防需要重新生成卡片或稍后扩展当前批次的卡片。出于安全原因,密钥材料(也是卡片特定的)不会从随机种子派生。相反,在每次编程周期中都会生成一组新的 Ki 和 OPc。这意味着即使 --num 保持不变,也会生成新的密钥。

参数 --num 指定一个卡片特定的数字。这个数字将被管理到随机种子中,作为一组特定随机生成参数的标识符。

在上面的例子中,还指定了参数 --mcc--mnc,因为它们标识了卡片应该操作的 GSM 网络,绝对需要保持静态。pySim-prog 将使用这些参数生成一个有效的 IMSI,该 IMSI 以指定的 MCC/MNC 开头,并有一个随机的尾部。

指定卡类型:

pySim-prog 通常会自动检测卡类型。如果自动检测不起作用,可以指定参数 --type。支持以下卡类型:

  • Fairwaves-SIM
  • fakemagicsim
  • gialersim
  • grcardsim
  • magicsim
  • OpenCells-SIM
  • supersim
  • sysmoISIM-SJA2
  • sysmoISIM-SJA5
  • sysmosim-gr1
  • sysmoSIM-GR2
  • sysmoUSIM-SJS1
  • Wavemobile-SIM

指定卡读取器:

通常与 PCSC 读取器一起使用 pySim-prog。PCSC 读取器编号通过 --pcsc-device-p 选项指定。然而,也支持其他类型的读取器(如串行读取器和调制解调器)。有关更多信息,请使用 pySim-prog 的 --help 选项。

使用 CSV 文件进行卡编程

为了简化卡编程过程,pySim-prog 还允许从 CSV 文件中读取卡参数。当使用 CSV 文件作为输入时,用户不必为每张卡单独构造命令行。相反,所有与卡相关的参数都会自动从 CSV 文件中提取。

CSV 文件可以包含多行(数百甚至数千张卡)。pySim-prog 能够通过 ICCID(推荐使用,因为 ICCIDs 通常不会更改)或 IMSI 来识别行。

CSV 文件格式具有灵活的格式,包含强制性和可选列,这里适用与命令行参数相同的规则。列名与命令行选项相匹配。CSV 文件还可以包含 pySim-prog 不了解的列,如库存编号、昵称或与卡编程过程无关的参数。pySim-prog 将静默忽略所有未知列。

CSV 文件可以包含以下列:

  • 名称
  • iccid(通常用作键)
  • mcc
  • mnc
  • imsi(可以作为键,但不推荐)
  • smsp
  • ki
  • opc
  • acc
  • pin_adm, adm1 或 pin_adm_hex(必须存在)
  • msisdn
  • epdgid
  • epdgSelection
  • pcscf
  • ims_hdomain
  • impi
  • impu
  • opmode
  • fplmn

由于历史原因,并为了保持与多种不同 CSV 文件格式的兼容性,ADM pin 可以存储在三个不同的列中。只需要其中一个列可用。

  • adm1:此列包含以数字 ASCII 字符格式表示的 ADM pin。这是最常见的格式。
  • pin_adm:与 adm1 相同,只是列名不同。
  • pin_adm_hex:如果 ADM pin 由原始 HEX 字符组成,而不是数字 ASCII 字符,则可以使用此列以 HEX 字符串的形式提供 ADM pin。

以下是一个典型的最小示例:

复制代码

取消自动换行

复制

"imsi","iccid","acc","ki","opc","adm1"
"999700000053010","8988211000000530108","0001","51ACE8BD6313C230F0BFE1A458928DF0","E5A00E8DE427E21B206526B5D1B902DF","65942330"
"999700000053011","8988211000000530116","0002","746AAFD7F13CFED3AE626B770E53E860","38F7CE8322D2A7417E0BBD1D7B1190EC","13445792"
...

以下命令行将指示 pySim-prog 使用提供的 CSV 文件作为参数源,并使用在编程前从卡中读取的 ICCID 作为识别卡的键。要使用 IMSI 作为键,可以使用参数 --read-imsi 而不是 --read-iccid。然而,这个选项只推荐在非常特定的情况下使用。

复制代码

取消自动换行

复制

pySim-prog.py -p <pcsc_reader> --read-csv <path_to_csv_file> --source csv --read-iccid

也可以通过手动提供 ICCID(选项 --iccid)或 IMSI(选项 --imsi),然后用它作为键在 CSV 文件中找到匹配的行。

复制代码

取消自动换行

复制

pySim-prog.py -p <pcsc_reader> --read-csv <path_to_csv_file> --source csv --iccid <iccid_value>

写入 CSV 文件

pySim-prog 还能够生成包含它已生成或从其他来源(命令行、CSV 文件)接收的参数子集的 CSV 文件。生成的文件将不包含标题,并将包含以下列:

  • 名称
  • iccid
  • mcc
  • mnc
  • imsi
  • smsp
  • ki
  • opc

使用 CSV 写入功能的命令行示例如下:

复制代码

取消自动换行

复制

pySim-prog.py -p <pcsc_reader> --read-csv <path_to_input_csv_file> --read-iccid --source csv --write-csv <path_to_output_csv_file>

批量编程

如果需要编程较大的卡批次,可以使用 --batch 参数来以批处理模式运行 pySim-prog。

批处理模式将提示用户插入一张卡。一旦在读卡器中检测到卡,就会执行编程。然后用户可以再次移除卡,然后该过程重新开始。这允许快速且高效地进行卡编程,无需永久的命令行交互。

1.3.2 pySim-read

pySim-read 允许从 SIM 卡中读取一些最重要的数据项。这意味着它只会读取卡上的一些文件,并且只会读取普通用户(无需任何特殊认证)可访问的文件。

如今,建议使用 pySim-shell 的 export 命令来代替。它能够对卡上所有可找到的标准文件进行更全面的导出。要获取人类可读的解码而非原始的十六进制导出,您可以使用 export --json。

具体来说,pySim-read 将转储以下内容:

  • MF(主文件)
  • EF.ICCID(ICCID 入口文件)
  • DF.GSM(GSM 专用文件)
  • EF.IMSI(IMSI 入口文件)
  • EF.GID1(GID1 入口文件)
  • EF.GID2(GID2 入口文件)
  • EF.SMSP(短信服务提供商名称文件)
  • EF.SPN(服务提供商名称文件)
  • EF.PLMNsel(已选择的 PLMN 文件)

• EF.PLMNwAcT(已激活的 PLMN 文件)

• EF.OPLMNwAcT(已激活的其他 PLMN 文件)

• EF.HPLMNAcT(已激活的 HPLMN 文件)

• EF.ACC(访问条件文件)

• EF.MSISDN(移动台国际 ISDN 号码文件)

EF.AD(附加数据文件)

• EF.SST(服务表单文件)

• ADF.USIM(USIM 应用专用文件)

• EF.EHPLMN(等效 HPLMN 文件)

• EF.UST(USIM 工具集文件)

• EF.ePDGId(ePDG 标识符文件)

• EF.ePDGSelection(ePDG 选择文件)

• ADF.ISIM(ISIM 应用专用文件)

• EF.PCSCF(代理呼叫状态功能文件)

• EF.DOMAIN(域文件)

• EF.IMPI(IP 多媒体私有标识符文件)

• EF.IMPU(IP 多媒体公有标识符文件)

• EF.UICCIARI(UICC 应用资源标识符文件)

• EF.IST(ISIM 工具集文件)

串行读卡器

使用一个简单/超低成本的串行读卡器,它连接到一个(物理或USB/虚拟)RS232端口。这种读卡器只适用于遵循古老Phoenix或Smart Mouse设计的非常基础的读卡器,并不适用于所有RS232连接的智能卡读卡器。

  • -d, --device SIM卡访问的串行设备
    默认值:'/dev/ttyUSB0'
  • -b, --baud 用于SIM卡访问的波特率
    默认值:9600

PC/SC读卡器

使用PC/SC卡读卡器与SIM卡通信。PC/SC是应用程序访问智能卡读卡器的标准API,适用于多种操作系统,如Microsoft Windows、MacOS X和Linux。大多数智能卡读卡器供应商提供驱动程序,这些驱动程序提供PC/SC接口,甚至使用通用USB CCID驱动程序。您可以使用类似pcsc_scan -r的工具来获取系统上可用的读卡器列表。

  • --pcsc-shared 以共享访问模式打开PC/SC读卡器(默认:独占访问)
    默认值:False
  • -p, --pcsc-device 用于SIM卡访问的PC/SC读卡器编号
  • --pcsc-regex 用于SIM卡访问的匹配PC/SC读卡器的正则表达式

AT命令调制解调器读卡器

与连接到此计算机的移动电话或蜂窝调制解调器中的SIM卡通信,该调制解调器提供AT命令接口,包括用于通用SIM卡访问的AT+CSIM接口,如3GPP TS 27.007所指定。

  • --modem-device 用于通用SIM卡访问的调制解调器串行端口(3GPP TS 27.007)
  • --modem-baud 用于调制解调器端口的波特率
    默认值:115200

OsmocomBB读卡器

使用兼容OsmocomBB的手机访问插入手机SIM卡槽的SIM卡。这需要在手机内运行OsmocomBB固件(可以是内存加载)。它还要求您运行osmocon程序,该程序提供一个unix域套接字,该读卡器驱动程序可以附加到该套接字。

  • --osmocon 用于基于Calypso(例如Motorola C1XX)的读卡器的socket路径(通过OsmocomBB)
相关推荐
娅娅梨22 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
汤米粥28 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾31 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺37 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马剑威(威哥爱编程)1 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计
yyqzjw1 小时前
【qt】控件篇(Enable|geometry)
开发语言·qt
csdn_kike1 小时前
QT Unknown module(s) in QT 以及maintenance tool的更详细用法(qt6.6.0)
开发语言·qt