blob: 5bc86ae3bc283ce169bd399bcef6b3013052d63e [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 Welte7743c202021-05-03 23:30:11 +0200188
189Display a tree of the card filesystem. It is important to note that this displays a tree
190of files that might potentially exist (based on the card profile). In order to determine if
191a given file really exists on a given card, you have to try to select that file.
Harald Welted36f6942021-04-04 14:37:55 +0200192
Harald Weltebe9516f2021-04-03 11:30:10 +0200193
194verify_adm
195~~~~~~~~~~
Harald Welte7743c202021-05-03 23:30:11 +0200196
197Verify the ADM (Administrator) PIN specified as argument. This is typically needed in order
198to get write/update permissions to most of the files on SIM cards.
199
200Currently only ADM1 is supported.
Harald Weltebe9516f2021-04-03 11:30:10 +0200201
202
Harald Weltedaf2b392021-05-03 23:17:29 +0200203reset
204~~~~~
205
206Perform card reset and display the card ATR.
207
208
Harald Weltebe9516f2021-04-03 11:30:10 +0200209Linear Fixed EF commands
210------------------------
211
212These commands become enabled only when your currently selected file is of *Linear Fixed EF* type.
213
214read_record
215~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200216.. argparse::
217 :module: pySim.filesystem
218 :func: LinFixedEF.ShellCommands.read_rec_parser
219
Harald Weltebe9516f2021-04-03 11:30:10 +0200220
221read_record_decoded
222~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200223.. argparse::
224 :module: pySim.filesystem
225 :func: LinFixedEF.ShellCommands.read_rec_dec_parser
226
Harald Weltebe9516f2021-04-03 11:30:10 +0200227
Harald Welte850b72a2021-04-07 09:33:03 +0200228read_records
229~~~~~~~~~~~~
230.. argparse::
231 :module: pySim.filesystem
232 :func: LinFixedEF.ShellCommands.read_recs_parser
233
234
235read_records_decoded
236~~~~~~~~~~~~~~~~~~~~
237.. argparse::
238 :module: pySim.filesystem
239 :func: LinFixedEF.ShellCommands.read_recs_dec_parser
240
241
Harald Weltebe9516f2021-04-03 11:30:10 +0200242update_record
243~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200244.. argparse::
245 :module: pySim.filesystem
246 :func: LinFixedEF.ShellCommands.upd_rec_parser
247
Harald Weltebe9516f2021-04-03 11:30:10 +0200248
249update_record_decoded
250~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200251.. argparse::
252 :module: pySim.filesystem
253 :func: LinFixedEF.ShellCommands.upd_rec_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200254
255
Harald Welte4145d3c2021-04-08 20:34:13 +0200256edit_record_decoded
257~~~~~~~~~~~~~~~~~~~
258.. argparse::
259 :module: pySim.filesystem
260 :func: LinFixedEF.ShellCommands.edit_rec_dec_parser
261
262This command will read the selected record, decode it to its JSON representation, save
263that JSON to a temporary file on your computer, and launch your configured text editor.
264
265You may then perform whatever modifications to the JSON representation, save + leave your
266text editor.
267
268Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
269back to the record on the SIM card.
270
271This allows for easy interactive modification of records.
272
273
Harald Weltebe9516f2021-04-03 11:30:10 +0200274
275Transparent EF commands
276-----------------------
277
278These commands become enabled only when your currently selected file is of *Transparent EF* type.
279
280
281read_binary
282~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200283.. argparse::
284 :module: pySim.filesystem
285 :func: TransparentEF.ShellCommands.read_bin_parser
286
Harald Weltebe9516f2021-04-03 11:30:10 +0200287
288read_binary_decoded
289~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200290.. argparse::
291 :module: pySim.filesystem
292 :func: TransparentEF.ShellCommands.read_bin_dec_parser
293
Harald Weltebe9516f2021-04-03 11:30:10 +0200294
295update_binary
296~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200297.. argparse::
298 :module: pySim.filesystem
299 :func: TransparentEF.ShellCommands.upd_bin_parser
300
Harald Weltebe9516f2021-04-03 11:30:10 +0200301
302update_binary_decoded
303~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200304.. argparse::
305 :module: pySim.filesystem
306 :func: TransparentEF.ShellCommands.upd_bin_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200307
Harald Welte0d4e98a2021-04-07 00:14:40 +0200308In normal operation, update_binary_decoded needs a JSON document representing the entire file contents as
309input. This can be inconvenient if you want to keep 99% of the content but just toggle one specific
310parameter. That's where the JSONpath support comes in handy: You can specify a JSONpath to an element
311inside the document as well as a new value for tat field:
312
313Th below example demonstrates this by modifying the ofm field within EF.AD:
314
315::
316
317 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
318 {
319 "ms_operation_mode": "normal",
320 "specific_facilities": {
321 "ofm": true
322 },
323 "len_of_mnc_in_imsi": 2
324 }
325 pySIM-shell (MF/ADF.USIM/EF.AD)> update_binary_decoded --json-path specific_facilities.ofm false
326 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
327 {
328 "ms_operation_mode": "normal",
329 "specific_facilities": {
330 "ofm": false
331 },
332 "len_of_mnc_in_imsi": 2
333 }
334
Harald Weltebe9516f2021-04-03 11:30:10 +0200335
Harald Welte4145d3c2021-04-08 20:34:13 +0200336edit_binary_decoded
337~~~~~~~~~~~~~~~~~~~
338This command will read the selected binary EF, decode it to its JSON representation, save
339that JSON to a temporary file on your computer, and launch your configured text editor.
340
341You may then perform whatever modifications to the JSON representation, save + leave your
342text editor.
343
344Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
345to the SIM card.
346
347This allows for easy interactive modification of file contents.
348
Harald Weltebe9516f2021-04-03 11:30:10 +0200349
Harald Welte917d98c2021-04-21 11:51:25 +0200350
351BER-TLV EF commands
352-------------------
353
354BER-TLV EFs are files that contain BER-TLV structured data. Every file can contain any number
355of variable-length IEs (DOs). The tag within a BER-TLV EF must be unique within the file.
356
357The commands below become enabled only when your currently selected file is of *BER-TLV EF* type.
358
359retrieve_tags
360~~~~~~~~~~~~~
361
362Retrieve a list of all tags present in the currently selected file.
363
364
365retrieve_data
366~~~~~~~~~~~~~
367.. argparse::
368 :module: pySim.filesystem
369 :func: BerTlvEF.ShellCommands.retrieve_data_parser
370
371
372set_data
373~~~~~~~~
374.. argparse::
375 :module: pySim.filesystem
376 :func: BerTlvEF.ShellCommands.set_data_parser
377
378
379del_data
380~~~~~~~~
381.. argparse::
382 :module: pySim.filesystem
383 :func: BerTlvEF.ShellCommands.del_data_parser
384
385
386
Harald Welte15fae982021-04-10 10:22:27 +0200387USIM commands
388-------------
389
390authenticate
391~~~~~~~~~~~~
392.. argparse::
393 :module: pySim.ts_31_102
394 :func: ADF_USIM.AddlShellCommands.authenticate_parser
395
396
397
Harald Weltebe9516f2021-04-03 11:30:10 +0200398cmd2 settable parameters
399------------------------
400
401``cmd2`` has the concept of *settable parameters* which act a bit like environment variables in an OS-level
402shell: They can be read and set, and they will influence the behavior somehow.
403
404conserve_write
405~~~~~~~~~~~~~~
406
407If enabled, pySim will (when asked to write to a card) always first read the respective file/record and
408verify if the to-be-written value differs from the current on-card value. If not, the write will be skipped.
409Writes will only be performed if the new value is different from the current on-card value.
410
411If disabled, pySim will always write irrespective of the current/new value.
412
Harald Welte1748b932021-04-06 21:12:25 +0200413json_pretty_print
414~~~~~~~~~~~~~~~~~
415
416This parameter determines if generated JSON output should (by default) be pretty-printed (multi-line
417output with indent level of 4 spaces) or not.
418
419The default value of this parameter is 'true'.
420
Harald Weltebe9516f2021-04-03 11:30:10 +0200421debug
422~~~~~
423
424If enabled, full python back-traces will be displayed in case of exceptions
425
Harald Welte7829d8a2021-04-10 11:28:53 +0200426apdu_trace
427~~~~~~~~~~
428
429Boolean variable that determines if a hex-dump of the command + response APDU shall be printed.
430
Harald Weltebe9516f2021-04-03 11:30:10 +0200431numeric_path
432~~~~~~~~~~~~
433
434Boolean variable that determines if path (e.g. in prompt) is displayed with numeric FIDs or string names.
435
436::
437
438 pySIM-shell (MF/EF.ICCID)> set numeric_path True
439 numeric_path - was: False
440 now: True
441 pySIM-shell (3f00/2fe2)> set numeric_path False
442 numeric_path - was: True
443 now: False
444 pySIM-shell (MF/EF.ICCID)> help set