blob: 08fd37626665896ebf787e01adb5caf624d0bcd6 [file] [log] [blame]
Harald Welte94e87352021-04-02 13:38:00 +02001pySim-shell
2===========
Harald Weltebe9516f2021-04-03 11:30:10 +02003
4pySim-shell is an interactive command line shell for all kind of interactions with SIM cards.
5
6The interactive shell provides command for
7
8* navigating the on-card filesystem hierarchy
9* authenticating with PINs such as ADM1
10* CHV/PIN management (VERIFY, ENABLE, DISABLE, UNBLOCK)
11* decoding of SELECT response (file control parameters)
12* reading and writing of files and records in raw, hex-encoded binary format
13* for some files where related support has been developed:
14
15 * decoded reading (display file data in JSON format)
16 * decoded writing (encode from JSON to binary format, then write)
17
18By means of using the python ``cmd2`` module, various useful features improve usability:
19
20* history of commands (persistent across restarts)
21* output re-direction to files on your computer
22* output piping through external tools like 'grep'
23* tab completion of commands and SELECT-able files/directories
24* interactive help for all commands
25
Harald Weltef2e761c2021-04-11 11:56:44 +020026Running pySim-shell
27-------------------
28
29pySim-shell has a variety of command line arguments to control
30
31* which transport to use (how to use a reader to talk to the SIM card)
32* whether to automatically verify an ADM pin (and in which format)
33* whether to execute a start-up script
34
35.. argparse::
36 :module: pySim-shell
37 :func: option_parser
38
39
Harald Weltebe9516f2021-04-03 11:30:10 +020040
41cmd2 basics
42-----------
43
44FIXME
45
46
47
48ISO7816 commands
49----------------
50
51This category of commands relates to commands that originate in the ISO 7861-4 specifications,
52most of them have a 1:1 resemblance in the specification.
53
54select
55~~~~~~
56
57The ``select`` command is used to select a file, either by its FID, AID or by its symbolic name.
58
59Try ``select`` with tab-completion to get a list of all current selectable items:
60
61::
62
63 pySIM-shell (MF)> select
64 .. 2fe2 a0000000871004 EF.ARR MF
65 2f00 3f00 ADF.ISIM EF.DIR
66 2f05 7f10 ADF.USIM EF.ICCID
67 2f06 7f20 DF.GSM EF.PL
68 2f08 a0000000871002 DF.TELECOM EF.UMPC
69
70Use ``select`` with a specific FID or name to select the new file.
71
72This will
73
74* output the [JSON decoded, if possible] select response
75* change the prompt to the newly selected file
76* enable any commands specific to the newly-selected file
77
78::
79
80 pySIM-shell (MF)> select ADF.USIM
81 {
82 "file_descriptor": {
83 "shareable": true,
84 "file_type": "df",
85 "structure": "no_info_given"
86 },
87 "df_name": "A0000000871002FFFFFFFF8907090000",
88 "proprietary_info": {
89 "uicc_characteristics": "71",
90 "available_memory": 101640
91 },
92 "life_cycle_status_int": "operational_activated",
93 "security_attrib_compact": "00",
94 "pin_status_template_do": "90017083010183018183010A83010B"
95 }
96 pySIM-shell (MF/ADF.USIM)>
97
98
99
100change_chv
101~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200102.. argparse::
103 :module: pySim-shell
104 :func: Iso7816Commands.change_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200105
106
107disable_chv
108~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200109.. argparse::
110 :module: pySim-shell
111 :func: Iso7816Commands.disable_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200112
Harald Weltebe9516f2021-04-03 11:30:10 +0200113
114enable_chv
115~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200116.. argparse::
117 :module: pySim-shell
118 :func: Iso7816Commands.enable_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200119
120
121unblock_chv
122~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200123.. argparse::
124 :module: pySim-shell
125 :func: Iso7816Commands.unblock_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200126
Harald Weltebe9516f2021-04-03 11:30:10 +0200127
128verify_chv
129~~~~~~~~~~
Harald Weltebe9516f2021-04-03 11:30:10 +0200130This command allows you to verify a CHV (PIN), which is how the specifications call
131it if you authenticate yourself with the said CHV/PIN.
132
Harald Welted36f6942021-04-04 14:37:55 +0200133.. argparse::
134 :module: pySim-shell
135 :func: Iso7816Commands.verify_chv_parser
136
Harald Weltea4631612021-04-10 18:17:55 +0200137deactivate_file
138~~~~~~~~~~~~~~~
139Deactivate the currently selected file. This used to be called INVALIDATE in TS 11.11.
140
141
142activate_file
143~~~~~~~~~~~~~
144Activate the currently selected file. This used to be called REHABILITATE in TS 11.11.
Harald Weltebe9516f2021-04-03 11:30:10 +0200145
Harald Welte703f9332021-04-10 18:39:32 +0200146open_channel
147~~~~~~~~~~~~
148.. argparse::
149 :module: pySim-shell
150 :func: Iso7816Commands.open_chan_parser
151
152close_channel
153~~~~~~~~~~~~~
154.. argparse::
155 :module: pySim-shell
156 :func: Iso7816Commands.close_chan_parser
157
Harald Weltebe9516f2021-04-03 11:30:10 +0200158
159pySim commands
160--------------
161
162Commands in this category are pySim specific; they do not have a 1:1 correspondence to ISO 7816
163or 3GPP commands. Mostly they will operate either only on local (in-memory) state, or execute
164a complex sequence of card-commands.
165
166desc
167~~~~
168
169Display human readable file description for the currently selected file.
170
171
172dir
173~~~
Harald Welted36f6942021-04-04 14:37:55 +0200174.. argparse::
175 :module: pySim-shell
176 :func: PySimCommands.dir_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200177
178
179export
180~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200181.. argparse::
182 :module: pySim-shell
183 :func: PySimCommands.export_parser
184
Harald Weltebe9516f2021-04-03 11:30:10 +0200185
186tree
187~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200188FIXME
189
Harald Weltebe9516f2021-04-03 11:30:10 +0200190
191verify_adm
192~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200193FIXME
Harald Weltebe9516f2021-04-03 11:30:10 +0200194
195
Harald Weltedaf2b392021-05-03 23:17:29 +0200196reset
197~~~~~
198
199Perform card reset and display the card ATR.
200
201
Harald Weltebe9516f2021-04-03 11:30:10 +0200202Linear Fixed EF commands
203------------------------
204
205These commands become enabled only when your currently selected file is of *Linear Fixed EF* type.
206
207read_record
208~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200209.. argparse::
210 :module: pySim.filesystem
211 :func: LinFixedEF.ShellCommands.read_rec_parser
212
Harald Weltebe9516f2021-04-03 11:30:10 +0200213
214read_record_decoded
215~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200216.. argparse::
217 :module: pySim.filesystem
218 :func: LinFixedEF.ShellCommands.read_rec_dec_parser
219
Harald Weltebe9516f2021-04-03 11:30:10 +0200220
Harald Welte850b72a2021-04-07 09:33:03 +0200221read_records
222~~~~~~~~~~~~
223.. argparse::
224 :module: pySim.filesystem
225 :func: LinFixedEF.ShellCommands.read_recs_parser
226
227
228read_records_decoded
229~~~~~~~~~~~~~~~~~~~~
230.. argparse::
231 :module: pySim.filesystem
232 :func: LinFixedEF.ShellCommands.read_recs_dec_parser
233
234
Harald Weltebe9516f2021-04-03 11:30:10 +0200235update_record
236~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200237.. argparse::
238 :module: pySim.filesystem
239 :func: LinFixedEF.ShellCommands.upd_rec_parser
240
Harald Weltebe9516f2021-04-03 11:30:10 +0200241
242update_record_decoded
243~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200244.. argparse::
245 :module: pySim.filesystem
246 :func: LinFixedEF.ShellCommands.upd_rec_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200247
248
Harald Welte4145d3c2021-04-08 20:34:13 +0200249edit_record_decoded
250~~~~~~~~~~~~~~~~~~~
251.. argparse::
252 :module: pySim.filesystem
253 :func: LinFixedEF.ShellCommands.edit_rec_dec_parser
254
255This command will read the selected record, decode it to its JSON representation, save
256that JSON to a temporary file on your computer, and launch your configured text editor.
257
258You may then perform whatever modifications to the JSON representation, save + leave your
259text editor.
260
261Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
262back to the record on the SIM card.
263
264This allows for easy interactive modification of records.
265
266
Harald Weltebe9516f2021-04-03 11:30:10 +0200267
268Transparent EF commands
269-----------------------
270
271These commands become enabled only when your currently selected file is of *Transparent EF* type.
272
273
274read_binary
275~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200276.. argparse::
277 :module: pySim.filesystem
278 :func: TransparentEF.ShellCommands.read_bin_parser
279
Harald Weltebe9516f2021-04-03 11:30:10 +0200280
281read_binary_decoded
282~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200283.. argparse::
284 :module: pySim.filesystem
285 :func: TransparentEF.ShellCommands.read_bin_dec_parser
286
Harald Weltebe9516f2021-04-03 11:30:10 +0200287
288update_binary
289~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200290.. argparse::
291 :module: pySim.filesystem
292 :func: TransparentEF.ShellCommands.upd_bin_parser
293
Harald Weltebe9516f2021-04-03 11:30:10 +0200294
295update_binary_decoded
296~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200297.. argparse::
298 :module: pySim.filesystem
299 :func: TransparentEF.ShellCommands.upd_bin_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200300
Harald Welte0d4e98a2021-04-07 00:14:40 +0200301In normal operation, update_binary_decoded needs a JSON document representing the entire file contents as
302input. This can be inconvenient if you want to keep 99% of the content but just toggle one specific
303parameter. That's where the JSONpath support comes in handy: You can specify a JSONpath to an element
304inside the document as well as a new value for tat field:
305
306Th below example demonstrates this by modifying the ofm field within EF.AD:
307
308::
309
310 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
311 {
312 "ms_operation_mode": "normal",
313 "specific_facilities": {
314 "ofm": true
315 },
316 "len_of_mnc_in_imsi": 2
317 }
318 pySIM-shell (MF/ADF.USIM/EF.AD)> update_binary_decoded --json-path specific_facilities.ofm false
319 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
320 {
321 "ms_operation_mode": "normal",
322 "specific_facilities": {
323 "ofm": false
324 },
325 "len_of_mnc_in_imsi": 2
326 }
327
Harald Weltebe9516f2021-04-03 11:30:10 +0200328
Harald Welte4145d3c2021-04-08 20:34:13 +0200329edit_binary_decoded
330~~~~~~~~~~~~~~~~~~~
331This command will read the selected binary EF, decode it to its JSON representation, save
332that JSON to a temporary file on your computer, and launch your configured text editor.
333
334You may then perform whatever modifications to the JSON representation, save + leave your
335text editor.
336
337Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
338to the SIM card.
339
340This allows for easy interactive modification of file contents.
341
Harald Weltebe9516f2021-04-03 11:30:10 +0200342
Harald Welte917d98c2021-04-21 11:51:25 +0200343
344BER-TLV EF commands
345-------------------
346
347BER-TLV EFs are files that contain BER-TLV structured data. Every file can contain any number
348of variable-length IEs (DOs). The tag within a BER-TLV EF must be unique within the file.
349
350The commands below become enabled only when your currently selected file is of *BER-TLV EF* type.
351
352retrieve_tags
353~~~~~~~~~~~~~
354
355Retrieve a list of all tags present in the currently selected file.
356
357
358retrieve_data
359~~~~~~~~~~~~~
360.. argparse::
361 :module: pySim.filesystem
362 :func: BerTlvEF.ShellCommands.retrieve_data_parser
363
364
365set_data
366~~~~~~~~
367.. argparse::
368 :module: pySim.filesystem
369 :func: BerTlvEF.ShellCommands.set_data_parser
370
371
372del_data
373~~~~~~~~
374.. argparse::
375 :module: pySim.filesystem
376 :func: BerTlvEF.ShellCommands.del_data_parser
377
378
379
Harald Welte15fae982021-04-10 10:22:27 +0200380USIM commands
381-------------
382
383authenticate
384~~~~~~~~~~~~
385.. argparse::
386 :module: pySim.ts_31_102
387 :func: ADF_USIM.AddlShellCommands.authenticate_parser
388
389
390
Harald Weltebe9516f2021-04-03 11:30:10 +0200391cmd2 settable parameters
392------------------------
393
394``cmd2`` has the concept of *settable parameters* which act a bit like environment variables in an OS-level
395shell: They can be read and set, and they will influence the behavior somehow.
396
397conserve_write
398~~~~~~~~~~~~~~
399
400If enabled, pySim will (when asked to write to a card) always first read the respective file/record and
401verify if the to-be-written value differs from the current on-card value. If not, the write will be skipped.
402Writes will only be performed if the new value is different from the current on-card value.
403
404If disabled, pySim will always write irrespective of the current/new value.
405
Harald Welte1748b932021-04-06 21:12:25 +0200406json_pretty_print
407~~~~~~~~~~~~~~~~~
408
409This parameter determines if generated JSON output should (by default) be pretty-printed (multi-line
410output with indent level of 4 spaces) or not.
411
412The default value of this parameter is 'true'.
413
Harald Weltebe9516f2021-04-03 11:30:10 +0200414debug
415~~~~~
416
417If enabled, full python back-traces will be displayed in case of exceptions
418
Harald Welte7829d8a2021-04-10 11:28:53 +0200419apdu_trace
420~~~~~~~~~~
421
422Boolean variable that determines if a hex-dump of the command + response APDU shall be printed.
423
Harald Weltebe9516f2021-04-03 11:30:10 +0200424numeric_path
425~~~~~~~~~~~~
426
427Boolean variable that determines if path (e.g. in prompt) is displayed with numeric FIDs or string names.
428
429::
430
431 pySIM-shell (MF/EF.ICCID)> set numeric_path True
432 numeric_path - was: False
433 now: True
434 pySIM-shell (3f00/2fe2)> set numeric_path False
435 numeric_path - was: True
436 now: False
437 pySIM-shell (MF/EF.ICCID)> help set