From 2dcaa1022135e43a49edd72d4e28000099cce66e Mon Sep 17 00:00:00 2001 From: Christina Quast Date: Fri, 6 Mar 2015 18:14:43 +0100 Subject: [PATCH] add kevins iccid, imsi, .. read commands --- usb_application/ccid.py | 102 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 6 deletions(-) diff --git a/usb_application/ccid.py b/usb_application/ccid.py index 48178ae5..583d49c6 100755 --- a/usb_application/ccid.py +++ b/usb_application/ccid.py @@ -1,9 +1,20 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python import usb.core import usb.util import sys +from pySim.commands import SimCardCommands +from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid +from pySim.transport.pcsc import PcscSimLink + + +import hashlib +import os +import random +import re + + class find_class(object): def __init__(self, class_): self._class = class_ @@ -24,16 +35,95 @@ class find_class(object): return False + +def pySim_read(): + sl = PcscSimLink(0) + + # Create command layer + scc = SimCardCommands(transport=sl) + + # Wait for SIM card + sl.wait_for_card() + + # Program the card + print("Reading ...") + + # EF.ICCID + (res, sw) = scc.read_binary(['3f00', '2fe2']) + if sw == '9000': + print("ICCID: %s" % (dec_iccid(res),)) + else: + print("ICCID: Can't read, response code = %s" % (sw,)) + + # EF.IMSI + (res, sw) = scc.read_binary(['3f00', '7f20', '6f07']) + if sw == '9000': + print("IMSI: %s" % (dec_imsi(res),)) + else: + print("IMSI: Can't read, response code = %s" % (sw,)) + + # EF.SMSP + (res, sw) = scc.read_record(['3f00', '7f10', '6f42'], 1) + if sw == '9000': + print("SMSP: %s" % (res,)) + else: + print("SMSP: Can't read, response code = %s" % (sw,)) + + # EF.HPLMN +# (res, sw) = scc.read_binary(['3f00', '7f20', '6f30']) +# if sw == '9000': +# print("HPLMN: %s" % (res)) +# print("HPLMN: %s" % (dec_hplmn(res),)) +# else: +# print("HPLMN: Can't read, response code = %s" % (sw,)) + # FIXME + + # EF.ACC + (res, sw) = scc.read_binary(['3f00', '7f20', '6f78']) + if sw == '9000': + print("ACC: %s" % (res,)) + else: + print("ACC: Can't read, response code = %s" % (sw,)) + + # EF.MSISDN + try: + # print(scc.record_size(['3f00', '7f10', '6f40'])) + (res, sw) = scc.read_record(['3f00', '7f10', '6f40'], 1) + if sw == '9000': + if res[1] != 'f': + print("MSISDN: %s" % (res,)) + else: + print("MSISDN: Not available") + else: + print("MSISDN: Can't read, response code = %s" % (sw,)) + except: + prin#t("MSISDN: Can't read. Probably not existing file") + + # Done for this card and maybe for everything ? + print("Done !\n") + +cmd1 = {0x00, 0x10, 0x00, 0x00} +cmd2 = {0x00, 0x20, 0x00, 0x00, 0x02} +cmd_poweron = {0x62, 0x62, 0x00, 0x00} +cmd_poweroff = {0x63, 0x63, 0x00, 0x00} +cmd_get_slot_stat = {0x65, 0x65, 0x00, 0x00} +cmd_get_param = {0x00, 0x6C, 0x00, 0x00} + # main code def main(): devs = usb.core.find(find_all=1, custom_match=find_class(0xb)) # 0xb = Smartcard for dev in devs: dev.set_configuration(2) - dev.reset() - dev.write(0x1, {0x63, 0x63}) # PC_TO_RDR_ICCPOWEROFF - ret = dev.read(0x82, 64) - print(ret) - #dev.write(0x1, {0x62, 0x62}) # PC_TO_RDR_ICCPOWERON + + pySim_read() + +# dev.write(0x1, cmd_poweroff) +# dev.write(0x1, cmd_poweron) +# dev.write(0x1, cmd2) +# dev.write(0x1, cmd_get_slot_stat) +# ret = dev.read(0x82, 64) + print(ret) + #dev.write(0x1, {0x62, 0x62}) # PC_TO_RDR_ICCPOWERON return # (epi, epo) = find_eps(dev)