laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/28965 )
Change subject: pySim-shell: Use pySim.cat definitions to print decoded proactive cmds ......................................................................
pySim-shell: Use pySim.cat definitions to print decoded proactive cmds
Register a ProactiveHandler with pySim.transport and call the decoder from pySim.cat to print a decoded version:
Example usage (exact data only works on my specific card due to the encrpyted payload):
pySIM-shell (MF/ADF.USIM)> envelope_sms 400881214365877ff6227052000000000302700000201506393535b000118dd46f4ad6b015922f62292350d60af4af191adcbbc35cf4 FETCH: d0378103011300820281838b2c410008812143658700f621027100001c12b000119660ebdb81be189b5e4389e9e7ab2bc0954f963ad869ed7c SendShortMessage(CommandDetails({'command_number': 1, 'type_of_command': 19, 'command_qualifier': 0}),DeviceIdentities({'source_dev_id': 'uicc', 'dest_dev_id': 'network'}),SMS_TPDU({'tpdu': '410008812143658700f621027100001c12b000119660ebdb81be189b5e4389e9e7ab2bc0954f963ad869ed7c'})) SW: 9000, data: d0378103011300820281838b2c410008812143658700f621027100001c12b000119660ebdb81be189b5e4389e9e7ab2bc0954f963ad869ed7c
Change-Id: Ia4cdf06a44f46184d0da318bdf67077bc8ac9a1a --- M pySim-shell.py 1 file changed, 17 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/65/28965/1
diff --git a/pySim-shell.py b/pySim-shell.py index ce6efb8..41f6685 100755 --- a/pySim-shell.py +++ b/pySim-shell.py @@ -2,7 +2,7 @@
# Interactive shell for working with SIM / UICC / USIM / ISIM cards # -# (C) 2021 by Harald Welte laforge@osmocom.org +# (C) 2021-2022 by Harald Welte laforge@osmocom.org # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,12 +32,14 @@ from pathlib import Path from io import StringIO
+from pprint import pprint as pp + from pySim.exceptions import * from pySim.commands import SimCardCommands -from pySim.transport import init_reader, ApduTracer, argparse_add_reader_args +from pySim.transport import init_reader, ApduTracer, argparse_add_reader_args, ProactiveHandler from pySim.cards import card_detect, SimCard from pySim.utils import h2b, swap_nibbles, rpad, b2h, JsonEncoder, bertlv_parse_one, sw_match -from pySim.utils import sanitize_pin_adm, tabulate_str_list, boxed_heading_str +from pySim.utils import sanitize_pin_adm, tabulate_str_list, boxed_heading_str, Hexstr from pySim.card_handler import CardHandler, CardHandlerAuto
from pySim.filesystem import RuntimeState, CardDF, CardADF, CardModel @@ -49,6 +51,7 @@ from pySim.ara_m import CardApplicationARAM from pySim.global_platform import CardApplicationISD from pySim.gsm_r import DF_EIRENE +from pySim.cat import ProactiveCommand
# we need to import this module so that the SysmocomSJA2 sub-class of # CardModel is created, which will add the ATR-based matching and @@ -902,6 +905,16 @@ self._cmd.poutput( 'Negotiated Duration: %u secs, Token: %s, SW: %s' % (duration, token, sw))
+class Proact(ProactiveHandler): + def receive_fetch(self, payload: Hexstr): + # parse the proactive command + pcmd = ProactiveCommand() + parsed = pcmd.from_tlv(h2b(payload)) + # print its parsed representation + print(parsed) + # TODO: implement the basics, such as SMS Sending, ... + +
option_parser = argparse.ArgumentParser(prog='pySim-shell', description='interactive SIM card shell', formatter_class=argparse.ArgumentDefaultsHelpFormatter) @@ -942,7 +955,7 @@ card_key_provider_register(CardKeyProviderCsv(csv_default))
# Init card reader driver - sl = init_reader(opts) + sl = init_reader(opts, proactive_handler = Proact()) if sl is None: exit(1)