【问题标题】:How to access a SIM card programmatically?如何以编程方式访问 SIM 卡?
【发布时间】:2011-02-17 01:16:53
【问题描述】:

任何旧的 GSM 兼容 SIM 卡(3G USIM 的奖励)。

我想我需要一些硬件?谁能推荐一些便宜的,更专业的?

我认为会有完整的 API 文档与硬件,所以也许这应该标记为“无编程相关”?对不起,如果是这样。

任何好的 URL 或书籍(我熟悉 3GPP 标准)。

我不是(黑帽)黑客,别担心,只是对 SIM 卡秘书、数据医生恢复等不满意,所以想自己编写代码,但可能会将其商业化,或者提供 SIM 卡编程服务(从损坏的卡中恢复数据等)作为副业。


更新:虽然我主要对阅读我的 SMS 以进行备份感兴趣,但如果有人知道便宜的 SIM 卡写入器(这样我就可以备份全部或部分 SIM 并稍后恢复),这可能是一种奖励。

【问题讨论】:

  • 您是否正在寻找一种使用读卡器读取 SIM 卡的方法?
  • 是的,我是。可以推荐吗?

标签: gsm sim-card


【解决方案1】:

您可以使用任何 PC/SC 智能卡读卡器(和其他人指出的写入器)以及可以为您读取和解析数据的程序来做到这一点。

  • 通过 APDU 命令(在 ISO-7816 中定义)与卡通话
  • SIM (2G) 和 USIM (3G) 卡使用的命令集不同,因此您必须牢记这一点
  • SIM 卡文件系统的结构和格式在 GSM 11.11(用于 2G)和 ETSI TS 131.102(用于 3G)中定义 - 所有这些文档都是公开的且免费提供
  • SMS 保存在一个名为 EF SMS 的文件中,其名称为 0x6F3C,其结构在 GSM 11.11 的 10.5.3 节中定义

直接回答您的问题:

  • 这里是buy a SIM reader,点击“照片”查看设备图片和软件截图
  • SIM Manager 是一款可以满足您所有需求的程序(包括读取短信、恢复短信,它甚至可以尝试恢复已删除的短信 - 如果它们仍然在卡上)
  • SIM card SDK 也可用。它是一个 DLL,您可以在程序中加载和应用。这个东西为你做了所有的辛苦工作,你所需要的只是在它上面创建一个 GUI

我是创建 SIM Manager 和上述 SDK 的团队中的一员。

【讨论】:

  • 我浏览了 ETSI 网站。有很多规范和标准。 SIM 卡和 USIM 卡编程入门必须使用哪一个?你上面提到的规格现在不是已经过时了吗? (请注明不同SIM卡的规格)谢谢。
  • 这些标准可能会有新的修订,但基础已经存在,无论添加什么新功能都将扩展这些标准,而不是取代它们。您应该以此为起点,然后您将更好地了解其他地方。
  • GSM、ETSI、3GPP?我必须参考哪一个? (U)SIM 卡还有其他规范/标准吗?能否请您将此规范与他们所针对的概念相匹配?
  • 你到底想用这张卡做什么?操作文件内容?如果是 - 那么这就是您需要的:GSM 11.11(用于 2G)和 ETSI TS 131.102(用于 3G)。
  • 我不知道组织层次结构是什么。至于您的问题 - 这些标准解释了 SIM 卡文件系统上每种文件类型的数据结构的格式。一旦您熟悉了这一点,您将能够以标准方式操作文件内容,以便手机可以充分解析它。为了进行实际的读写操作,您需要熟悉 APDU 命令(在 ISO7816 中定义)。
【解决方案2】:

您肯定需要一个智能卡读卡器,据我所知,几乎任何人都会这样做,因为它们都必须支持标准功能。它们也恰好很便宜。我的是 OmniKey(不确定是什么型号,因为我现在没有)。

假设您在 Windows 下进行开发,Windows API 具有可以访问智能卡的功能。 Here 是 CodeProject 上的一篇文章,它作为一组 C# 类的一部分更详细地讨论了这一点,这些类使您可以访问大量此类内容,而不必纠结于具体细节。我认为这家伙的示例应用程序专门用于 SIM 卡,所以这可能会有所帮助。

【讨论】:

  • +1 听起来很棒。我没有意识到 Windows 有一个 API。我会检查并回复你。再次感谢。
  • 没问题。 :) 顺便说一句,智能卡读卡器 == 智能卡写卡器。我使用我的 OmniKey“阅读器”将数据写入 SLE4442 内存智能卡,这有点不同,因为它不像 SIM 卡那样简单,但原理是一样的。
【解决方案3】:

有很多产品和硬件可以读写 SIM 卡,看看这个论坛的http://forum.gsmhosting.com/vbb/f500/,你会发现很多关于 SIM 卡、手机的信息。自 1999 年以来最大的资源之一! 对于硬件程序员,您可以像 JDM 或 ICprog 一样构建自己的。查看 kiscan.net 获取一些信息。

【讨论】:

  • +1 谢谢,乍一看还不错。我会检查并回复你。唉,我是严格意义上的软件,完全没有硬件知识。
【解决方案4】:

您可以使用 simLAB 工具来读取和编辑几乎任何 SIM 文件。 它适用于每个 PC/SC 智能卡读卡器。该工具还允许您备份 SIM 文件系统。

看看https://github.com/kamwar/simLAB

【讨论】:

    【解决方案5】:
    1. pySim

      在下面的示例中,我们将卡的 IMSI 更改为 901700000003080(选项-i),我们正在指定一组新的-n NAME (运营商名称)、-t TYPE(卡类型)、-c CC(国家代码)、-x MCC (移动国家代码)、-y MNC(移动网络代码)和 -s ID (集成电路卡 ID)值。

      $ ./pySim-prog.py -p 0 -n OpenBSC -t sysmosim-gr1 -i 901700000003080 -c 001 -x 001 -y 02 -s 1791198229180000075
      

    只需用新的元数据填充新的 SIM 卡就足够了吗?它的工作方式是否与原来的相同? pyusb

    以下是完整的选项列表:

    $ ./pySim-prog.py -help
      Usage: pySim-prog.py [options]  Options:   
      -h, --help            show this help message and exit
      -d DEV, --device=DEV  Serial Device for SIM access [default: /dev/ttyUSB0]
      -b BAUD, --baud=BAUD  Baudrate used for SIM access [default: 9600]
      -p PCSC, --pcsc-device=PCSC
                            Which PC/SC reader number for SIM access
      -t TYPE, --type=TYPE  Card type (user -t list to view) [default: auto]
      -a PIN_ADM, --pin-adm=PIN_ADM
                            ADM PIN used for provisioning (overwrites default)
      -e, --erase           Erase beforehand [default: False]   
      -S SOURCE, --source=SOURCE
                            Data Source[default: cmdline]
      -n NAME, --name=NAME  Operator name [default: Magic]
      -c CC, --country=CC   Country code [default: 1]
      -x MCC, --mcc=MCC     Mobile Country Code [default: 901]
      -y MNC, --mnc=MNC     Mobile Network Code [default: 55]
      -m SMSC, --smsc=SMSC  SMSP [default: '00 + country code + 5555']
      -M SMSP, --smsp=SMSP  Raw SMSP content in hex [default: auto from SMSC]
      -s ID, --iccid=ID     Integrated Circuit Card ID
      -i IMSI, --imsi=IMSI  International Mobile Subscriber Identity
      -k KI, --ki=KI        Ki (default is to randomize)
      -o OPC, --opc=OPC     OPC (default is to randomize)
      --op=OP               Set OP to derive OPC from OP and KI
      --acc=ACC             Set ACC bits (Access Control Code). not all card types are supported
      -z STR, --secret=STR  Secret used for ICCID/IMSI autogen
      -j NUM, --num=NUM     Card # used for ICCID/IMSI autogen
      --batch               Enable batch mode [default: False]
      --batch-state=FILE    Optional batch state file
      --read-csv=FILE       Read parameters from CSV file rather than command line
      --write-csv=FILE      Append generated parameters in CSV file
      --write-hlr=FILE      Append generated parameters to OpenBSC HLR sqlite3
      --dry-run             Perform a 'dry run', don't actually program the card
    

    源代码可用。

    1. SIM 卡也只是一张智能卡。您可以使用pyscardpyusb 对其进行操作。我发现 this Q&A 很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2022-08-03
      • 2012-02-20
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多