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

时间:2010-05-08 00:02:45

标签: gsm sim-card

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

我认为我需要一些硬件?任何人都可以为爱好者推荐便宜的东西,还有更专业的东西?

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

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

我不是(黑帽子)黑客,不要担心,只是不喜欢SIM卡秘书,数据医生恢复等等,所以我想编写自己的代码,但可能会把它变成商业广告,或者提供SIM卡编程服务(从损坏的卡中恢复数据等)作为副业。


更新:虽然我主要感兴趣的是阅读我的短信进行备份,如果有人知道一个便宜的SIM卡编写器(这样我可以备份全部或部分SIM卡并在以后恢复),这可能是一个奖励。 / p>

5 个答案:

答案 0 :(得分:20)

您可以使用任何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管理器和上述SDK的团队成员之一。

答案 1 :(得分:4)

你肯定需要一个智能卡读卡器,而且从我能够找到的内容中,几乎任何人都会这样做,因为它们都必须支持标准功能。它们也恰好相当便宜。我是一个OmniKey(不知道是什么型号因为我现在没有它)。

假设您在Windows下进行开发,Windows API具有可以访问智能卡的功能。 Here是一篇关于CodeProject的文章,它更详细地讨论了这一点,作为一组C#类的一部分,这些类可以让你访问一堆这样的东西,而不必纠缠于一起。我认为这个人的示例应用程序专门用于SIM卡,所以这可能会有所帮助。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

  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
    
  2. 用新的元数据填充新的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很有帮助。