blob: 2edebbf341d533c602e5bcb8ab20324f41f700aa [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
181update_record
182~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200183.. argparse::
184 :module: pySim.filesystem
185 :func: LinFixedEF.ShellCommands.upd_rec_parser
186
Harald Weltebe9516f2021-04-03 11:30:10 +0200187
188update_record_decoded
189~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200190.. argparse::
191 :module: pySim.filesystem
192 :func: LinFixedEF.ShellCommands.upd_rec_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200193
194
195
196Transparent EF commands
197-----------------------
198
199These commands become enabled only when your currently selected file is of *Transparent EF* type.
200
201
202read_binary
203~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200204.. argparse::
205 :module: pySim.filesystem
206 :func: TransparentEF.ShellCommands.read_bin_parser
207
Harald Weltebe9516f2021-04-03 11:30:10 +0200208
209read_binary_decoded
210~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200211.. argparse::
212 :module: pySim.filesystem
213 :func: TransparentEF.ShellCommands.read_bin_dec_parser
214
Harald Weltebe9516f2021-04-03 11:30:10 +0200215
216update_binary
217~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200218.. argparse::
219 :module: pySim.filesystem
220 :func: TransparentEF.ShellCommands.upd_bin_parser
221
Harald Weltebe9516f2021-04-03 11:30:10 +0200222
223update_binary_decoded
224~~~~~~~~~~~~~~~~~~~~~
Harald Welted36f6942021-04-04 14:37:55 +0200225.. argparse::
226 :module: pySim.filesystem
227 :func: TransparentEF.ShellCommands.upd_bin_dec_parser
Harald Weltebe9516f2021-04-03 11:30:10 +0200228
229
230
231cmd2 settable parameters
232------------------------
233
234``cmd2`` has the concept of *settable parameters* which act a bit like environment variables in an OS-level
235shell: They can be read and set, and they will influence the behavior somehow.
236
237conserve_write
238~~~~~~~~~~~~~~
239
240If enabled, pySim will (when asked to write to a card) always first read the respective file/record and
241verify if the to-be-written value differs from the current on-card value. If not, the write will be skipped.
242Writes will only be performed if the new value is different from the current on-card value.
243
244If disabled, pySim will always write irrespective of the current/new value.
245
Harald Welte1748b932021-04-06 21:12:25 +0200246json_pretty_print
247~~~~~~~~~~~~~~~~~
248
249This parameter determines if generated JSON output should (by default) be pretty-printed (multi-line
250output with indent level of 4 spaces) or not.
251
252The default value of this parameter is 'true'.
253
Harald Weltebe9516f2021-04-03 11:30:10 +0200254debug
255~~~~~
256
257If enabled, full python back-traces will be displayed in case of exceptions
258
259numeric_path
260~~~~~~~~~~~~
261
262Boolean variable that determines if path (e.g. in prompt) is displayed with numeric FIDs or string names.
263
264::
265
266 pySIM-shell (MF/EF.ICCID)> set numeric_path True
267 numeric_path - was: False
268 now: True
269 pySIM-shell (3f00/2fe2)> set numeric_path False
270 numeric_path - was: True
271 now: False
272 pySIM-shell (MF/EF.ICCID)> help set