blob: 652e572319f0177ba3a54458195566695e8aab30 [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
26
27cmd2 basics
28-----------
29
30FIXME
31
32
33
34ISO7816 commands
35----------------
36
37This category of commands relates to commands that originate in the ISO 7861-4 specifications,
38most of them have a 1:1 resemblance in the specification.
39
40select
41~~~~~~
42
43The ``select`` command is used to select a file, either by its FID, AID or by its symbolic name.
44
45Try ``select`` with tab-completion to get a list of all current selectable items:
46
47::
48
49 pySIM-shell (MF)> select
50 .. 2fe2 a0000000871004 EF.ARR MF
51 2f00 3f00 ADF.ISIM EF.DIR
52 2f05 7f10 ADF.USIM EF.ICCID
53 2f06 7f20 DF.GSM EF.PL
54 2f08 a0000000871002 DF.TELECOM EF.UMPC
55
56Use ``select`` with a specific FID or name to select the new file.
57
58This will
59
60* output the [JSON decoded, if possible] select response
61* change the prompt to the newly selected file
62* enable any commands specific to the newly-selected file
63
64::
65
66 pySIM-shell (MF)> select ADF.USIM
67 {
68 "file_descriptor": {
69 "shareable": true,
70 "file_type": "df",
71 "structure": "no_info_given"
72 },
73 "df_name": "A0000000871002FFFFFFFF8907090000",
74 "proprietary_info": {
75 "uicc_characteristics": "71",
76 "available_memory": 101640
77 },
78 "life_cycle_status_int": "operational_activated",
79 "security_attrib_compact": "00",
80 "pin_status_template_do": "90017083010183018183010A83010B"
81 }
82 pySIM-shell (MF/ADF.USIM)>
83
84
85
86change_chv
87~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +020088.. argparse::
89 :module: pySim-shell
90 :func: Iso7816Commands.change_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +020091
92
93disable_chv
94~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +020095.. argparse::
96 :module: pySim-shell
97 :func: Iso7816Commands.disable_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +020098
Harald Weltebe9516f2021-04-03 11:30:10 +020099
100enable_chv
101~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200102.. argparse::
103 :module: pySim-shell
104 :func: Iso7816Commands.enable_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200105
106
107unblock_chv
108~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200109.. argparse::
110 :module: pySim-shell
111 :func: Iso7816Commands.unblock_chv_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200112
Harald Weltebe9516f2021-04-03 11:30:10 +0200113
114verify_chv
115~~~~~~~~~~
Harald Weltebe9516f2021-04-03 11:30:10 +0200116This command allows you to verify a CHV (PIN), which is how the specifications call
117it if you authenticate yourself with the said CHV/PIN.
118
Harald Welted36f6942021-04-04 14:37:55 +0200119.. argparse::
120 :module: pySim-shell
121 :func: Iso7816Commands.verify_chv_parser
122
Harald Weltebe9516f2021-04-03 11:30:10 +0200123
124
125pySim commands
126--------------
127
128Commands in this category are pySim specific; they do not have a 1:1 correspondence to ISO 7816
129or 3GPP commands. Mostly they will operate either only on local (in-memory) state, or execute
130a complex sequence of card-commands.
131
132desc
133~~~~
134
135Display human readable file description for the currently selected file.
136
137
138dir
139~~~
Harald Welted36f6942021-04-04 14:37:55 +0200140.. argparse::
141 :module: pySim-shell
142 :func: PySimCommands.dir_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200143
144
145export
146~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200147.. argparse::
148 :module: pySim-shell
149 :func: PySimCommands.export_parser
150
Harald Weltebe9516f2021-04-03 11:30:10 +0200151
152tree
153~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200154FIXME
155
Harald Weltebe9516f2021-04-03 11:30:10 +0200156
157verify_adm
158~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200159FIXME
Harald Weltebe9516f2021-04-03 11:30:10 +0200160
161
162Linear Fixed EF commands
163------------------------
164
165These commands become enabled only when your currently selected file is of *Linear Fixed EF* type.
166
167read_record
168~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200169.. argparse::
170 :module: pySim.filesystem
171 :func: LinFixedEF.ShellCommands.read_rec_parser
172
Harald Weltebe9516f2021-04-03 11:30:10 +0200173
174read_record_decoded
175~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200176.. argparse::
177 :module: pySim.filesystem
178 :func: LinFixedEF.ShellCommands.read_rec_dec_parser
179
Harald Weltebe9516f2021-04-03 11:30:10 +0200180
Harald Welte850b72a2021-04-07 09:33:03 +0200181read_records
182~~~~~~~~~~~~
183.. argparse::
184 :module: pySim.filesystem
185 :func: LinFixedEF.ShellCommands.read_recs_parser
186
187
188read_records_decoded
189~~~~~~~~~~~~~~~~~~~~
190.. argparse::
191 :module: pySim.filesystem
192 :func: LinFixedEF.ShellCommands.read_recs_dec_parser
193
194
Harald Weltebe9516f2021-04-03 11:30:10 +0200195update_record
196~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200197.. argparse::
198 :module: pySim.filesystem
199 :func: LinFixedEF.ShellCommands.upd_rec_parser
200
Harald Weltebe9516f2021-04-03 11:30:10 +0200201
202update_record_decoded
203~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200204.. argparse::
205 :module: pySim.filesystem
206 :func: LinFixedEF.ShellCommands.upd_rec_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200207
208
209
210Transparent EF commands
211-----------------------
212
213These commands become enabled only when your currently selected file is of *Transparent EF* type.
214
215
216read_binary
217~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200218.. argparse::
219 :module: pySim.filesystem
220 :func: TransparentEF.ShellCommands.read_bin_parser
221
Harald Weltebe9516f2021-04-03 11:30:10 +0200222
223read_binary_decoded
224~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200225.. argparse::
226 :module: pySim.filesystem
227 :func: TransparentEF.ShellCommands.read_bin_dec_parser
228
Harald Weltebe9516f2021-04-03 11:30:10 +0200229
230update_binary
231~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200232.. argparse::
233 :module: pySim.filesystem
234 :func: TransparentEF.ShellCommands.upd_bin_parser
235
Harald Weltebe9516f2021-04-03 11:30:10 +0200236
237update_binary_decoded
238~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200239.. argparse::
240 :module: pySim.filesystem
241 :func: TransparentEF.ShellCommands.upd_bin_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200242
Harald Welte0d4e98a2021-04-07 00:14:40 +0200243In normal operation, update_binary_decoded needs a JSON document representing the entire file contents as
244input. This can be inconvenient if you want to keep 99% of the content but just toggle one specific
245parameter. That's where the JSONpath support comes in handy: You can specify a JSONpath to an element
246inside the document as well as a new value for tat field:
247
248Th below example demonstrates this by modifying the ofm field within EF.AD:
249
250::
251
252 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
253 {
254 "ms_operation_mode": "normal",
255 "specific_facilities": {
256 "ofm": true
257 },
258 "len_of_mnc_in_imsi": 2
259 }
260 pySIM-shell (MF/ADF.USIM/EF.AD)> update_binary_decoded --json-path specific_facilities.ofm false
261 pySIM-shell (MF/ADF.USIM/EF.AD)> read_binary_decoded
262 {
263 "ms_operation_mode": "normal",
264 "specific_facilities": {
265 "ofm": false
266 },
267 "len_of_mnc_in_imsi": 2
268 }
269
Harald Weltebe9516f2021-04-03 11:30:10 +0200270
271
272cmd2 settable parameters
273------------------------
274
275``cmd2`` has the concept of *settable parameters* which act a bit like environment variables in an OS-level
276shell: They can be read and set, and they will influence the behavior somehow.
277
278conserve_write
279~~~~~~~~~~~~~~
280
281If enabled, pySim will (when asked to write to a card) always first read the respective file/record and
282verify if the to-be-written value differs from the current on-card value. If not, the write will be skipped.
283Writes will only be performed if the new value is different from the current on-card value.
284
285If disabled, pySim will always write irrespective of the current/new value.
286
Harald Welte1748b932021-04-06 21:12:25 +0200287json_pretty_print
288~~~~~~~~~~~~~~~~~
289
290This parameter determines if generated JSON output should (by default) be pretty-printed (multi-line
291output with indent level of 4 spaces) or not.
292
293The default value of this parameter is 'true'.
294
Harald Weltebe9516f2021-04-03 11:30:10 +0200295debug
296~~~~~
297
298If enabled, full python back-traces will be displayed in case of exceptions
299
300numeric_path
301~~~~~~~~~~~~
302
303Boolean variable that determines if path (e.g. in prompt) is displayed with numeric FIDs or string names.
304
305::
306
307 pySIM-shell (MF/EF.ICCID)> set numeric_path True
308 numeric_path - was: False
309 now: True
310 pySIM-shell (3f00/2fe2)> set numeric_path False
311 numeric_path - was: True
312 now: False
313 pySIM-shell (MF/EF.ICCID)> help set