如何以编程方式访问SIM卡?

问题描述 投票:0回答:5

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

我想我需要一些硬件?谁能推荐一些适合业余爱好者的便宜的东西和更专业的东西?

我认为会有完整的 API 文档和硬件,所以也许这应该被标记为“与编程无关”?抱歉,如果是的话。

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

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


更新:虽然我主要感兴趣的是阅读我的短信进行备份,但如果有人知道便宜的 SIM 卡写入器(这样我就可以备份全部或部分 SIM 并稍后恢复),这可能会是一个额外的好处

gsm sim-card
5个回答
25
投票

您可以使用任何 PC/SC 智能卡读卡器(和写入器,正如其他人指出的那样)以及可以为您读取和解析数据的程序来完成此操作。

  • 与卡对话是通过 APDU 命令(在 ISO-7816 中定义)完成
  • SIM(2G)和USIM(3G)卡使用的命令集是不同的,所以你必须记住这一点
  • SIM 卡文件系统的结构和格式在 GSM 11.11(针对 2G)和 ETSI TS 131.102(针对 3G)中定义 - 所有这些文档都是公开的并且免费提供
  • 短信保存在名为 EF SMS 的文件中,其名称为 0x6F3C,其结构在 GSM 11.11(版本 8.14.0)
  • 的 10.5.3 节中定义

直接回答您的问题:

  • 在这里购买SIM卡读卡器,点击“照片”查看设备图片和软件截图
  • SIM Manager 这个程序可以执行您想要的所有操作(包括读取短信、恢复短信,它甚至可以尝试恢复已删除的短信 - 如果它们仍然物理地位于卡上)
  • SIM 卡 SDK 也可用。它是一个 DLL,您可以在程序中加载和应用它。这个东西为你完成了所有艰苦的工作,你所需要的只是在它上面创建一个 GUI

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


4
投票

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

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


2
投票

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


2
投票
  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 对其进行操作。我发现这个问答很有帮助。

1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.