SIM: several fixes
This commit is contained in:
parent
0cbabc39b1
commit
a98b05beb0
|
@ -344,7 +344,7 @@ I prefer the mini SIM and use an adapter card for larger phones.
|
||||||
<p>
|
<p>
|
||||||
The original ATTINY85 (1) is shown upside down.
|
The original ATTINY85 (1) is shown upside down.
|
||||||
Bend the legs straight and shorten them, so they still fit into a programmer's socket. (2)
|
Bend the legs straight and shorten them, so they still fit into a programmer's socket. (2)
|
||||||
The use P400 sand paper to sand off the bottom of the case until you reach copper plate. (3)
|
Use P400 sand paper to sand off the bottom of the chip's case, until you reach the copper plate. (3)
|
||||||
Make a hole into the PBC and solder the chip upside down into that hole.
|
Make a hole into the PBC and solder the chip upside down into that hole.
|
||||||
Pin 1 is marked on the PCB.
|
Pin 1 is marked on the PCB.
|
||||||
</p>
|
</p>
|
||||||
|
@ -416,7 +416,7 @@ You may want to use a PIN to select the card whenever you turn on the phone.
|
||||||
Use the phone to enable a PIN that does not start with "000".
|
Use the phone to enable a PIN that does not start with "000".
|
||||||
When you restart your phone, you may enter that PIN, to select the first card.
|
When you restart your phone, you may enter that PIN, to select the first card.
|
||||||
Alternatively you may enter the PIN 0000 or 0001, to select the first card, no matter what the PIN was.
|
Alternatively you may enter the PIN 0000 or 0001, to select the first card, no matter what the PIN was.
|
||||||
Or you may enter the PIN 0002 .. 0008, to select second to eight card.
|
Or you may enter the PIN 0002 .. 0008, to select second to eighth card.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -425,7 +425,7 @@ In order to do that, you need to set a PIN, so the phone will ask for a PIN when
|
||||||
Choose any PIN you like, but not a PIN stat starts with 000.
|
Choose any PIN you like, but not a PIN stat starts with 000.
|
||||||
Turn on the phone and you will be asked for a PIN.
|
Turn on the phone and you will be asked for a PIN.
|
||||||
Enter the PIN 9991 to alter the first subscriber data.
|
Enter the PIN 9991 to alter the first subscriber data.
|
||||||
Enter the PIN 9992 .. 9998 to alter second to eigtht subscriber data.
|
Enter the PIN 9992 .. 9998 to alter second to eighth subscriber data.
|
||||||
The subscriber data is shown in the telephone directory and can be altered by changing the numbers in that directory.
|
The subscriber data is shown in the telephone directory and can be altered by changing the numbers in that directory.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -458,10 +458,10 @@ To program one of the following service cards, change the subscriber data to the
|
||||||
<table class="sim">
|
<table class="sim">
|
||||||
<tr><th>Type</th><th>FUTLN =<br>Subscriber</th><th>Sicherungs-<br>code</th><th>Karten-<br>kennung</th><th>Sonderheiten-<br>schlüssel</th><th>Wartungs-<br>schlüssel</th></tr>
|
<tr><th>Type</th><th>FUTLN =<br>Subscriber</th><th>Sicherungs-<br>code</th><th>Karten-<br>kennung</th><th>Sonderheiten-<br>schlüssel</th><th>Wartungs-<br>schlüssel</th></tr>
|
||||||
<tr><td>Siemens C5<br>service mode</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1000</td></tr>
|
<tr><td>Siemens C5<br>service mode</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1000</td></tr>
|
||||||
<tr><td>Phillips Miniporty<br>service mode</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1000</td></tr>
|
<tr><td>Philips Miniporty<br>service mode</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1000</td></tr>
|
||||||
<tr><td>Phillips Miniporty<br>cell monitor</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1728 or<br>2729</td></tr>
|
<tr><td>Philips Miniporty<br>cell monitor</td><td>-</td><td>-</td><td>-</td><td>900</td><td>1728 or<br>2729</td></tr>
|
||||||
<tr><td>Phillips Porty<br>service mode</td><td>0</td><td>0</td><td>0</td><td>2304</td><td>-</td></tr>
|
<tr><td>Philips Porty<br>service mode</td><td>0</td><td>0</td><td>0</td><td>2304</td><td>-</td></tr>
|
||||||
<tr><td>Phillips Porty<br>cell monitor</td><td>-</td><td>-</td><td>-</td><td>898</td><td>-</td></tr>
|
<tr><td>Philips Porty<br>cell monitor</td><td>-</td><td>-</td><td>-</td><td>898</td><td>-</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "../libdebug/debug.h"
|
#include "../libdebug/debug.h"
|
||||||
#include "../liboptions/options.h"
|
#include "../liboptions/options.h"
|
||||||
|
@ -101,7 +102,7 @@ void print_help(const char *arg0)
|
||||||
printf(" -A --authenticate 0x...\n");
|
printf(" -A --authenticate 0x...\n");
|
||||||
printf(" Give 64 Bit value for authentication response. (default = all bits 1)\n");
|
printf(" Give 64 Bit value for authentication response. (default = all bits 1)\n");
|
||||||
printf("\nCommands are:\n");
|
printf("\nCommands are:\n");
|
||||||
printf(" sniff - To passively sniff ATR and message\n");
|
printf(" sniff - To passively sniff SIM card communication\n");
|
||||||
printf(" sim - To simulate a SIM card\n");
|
printf(" sim - To simulate a SIM card\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +226,7 @@ size_t eeprom_length(void)
|
||||||
|
|
||||||
int main_loop(serial_t *serial, int sniffer)
|
int main_loop(serial_t *serial, int sniffer)
|
||||||
{
|
{
|
||||||
int rc, cts, last_cts = 0;
|
int rc, cts = 0, last_cts = 0;
|
||||||
uint8_t byte;
|
uint8_t byte;
|
||||||
int skip_bytes = 0;
|
int skip_bytes = 0;
|
||||||
int work = 0;
|
int work = 0;
|
||||||
|
@ -333,7 +334,7 @@ int main(int argc, char *argv[])
|
||||||
debuglevel = DEBUG_INFO;
|
debuglevel = DEBUG_INFO;
|
||||||
|
|
||||||
add_options();
|
add_options();
|
||||||
rc = options_config_file("~/.osmocom/analog/simsim.conf", handle_options);
|
rc = options_config_file("~/.osmocom/analog/sim.conf", handle_options);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -423,7 +424,7 @@ int main(int argc, char *argv[])
|
||||||
} else if (!strcmp(argv[argi], "sim")) {
|
} else if (!strcmp(argv[argi], "sim")) {
|
||||||
sniffer = 0;
|
sniffer = 0;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unknown command '%s', use '-h' for help!\n", argv[argi]);
|
print_help(argv[0]);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,6 +442,13 @@ int main(int argc, char *argv[])
|
||||||
print_image();
|
print_image();
|
||||||
decode_ebdt(ebdt_data, temp[0], temp[1], temp[2], temp[3], temp[4]);
|
decode_ebdt(ebdt_data, temp[0], temp[1], temp[2], temp[3], temp[4]);
|
||||||
printf("FUTLN=%s, Sicherungscode=%s, Kartekennung=%s, Sonderheitenschluessel=%s, Wartungsschluessel=%s\n", temp[0], temp[1], temp[2], temp[3], temp[4]);
|
printf("FUTLN=%s, Sicherungscode=%s, Kartekennung=%s, Sonderheitenschluessel=%s, Wartungsschluessel=%s\n", temp[0], temp[1], temp[2], temp[3], temp[4]);
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
temp[0][i] = eeprom_read(EEPROM_PIN_DATA + i);
|
||||||
|
temp[0][(eeprom_read(EEPROM_FLAGS) >> EEPROM_FLAG_PIN_LEN) & 0xf] = '\0';
|
||||||
|
uint64_t auth_value = 0;
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
auth_value |= eeprom_read(EEPROM_AUTH_DATA + i) << (8 * (7 - i));
|
||||||
|
printf("PIN=%s, auth response=0x%016" PRIx64 "\n", temp[0], auth_value);
|
||||||
printf("Telephone directory has %d entries.\n", directory_size() - 1);
|
printf("Telephone directory has %d entries.\n", directory_size() - 1);
|
||||||
for (i = 0; i < directory_size() - 1; i++) {
|
for (i = 0; i < directory_size() - 1; i++) {
|
||||||
uint8_t data[24];
|
uint8_t data[24];
|
||||||
|
|
|
@ -472,21 +472,21 @@ static void sl_appl(sim_sim_t *sim, uint8_t *data, int length)
|
||||||
|
|
||||||
PDEBUG(DSIM7, DEBUG_INFO, " SL-APPL app %d\n", app);
|
PDEBUG(DSIM7, DEBUG_INFO, " SL-APPL app %d\n", app);
|
||||||
|
|
||||||
/* if PIN is required */
|
/* check and set application */
|
||||||
if (sim->pin_required) {
|
|
||||||
return_pin_not_ok(sim);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check application */
|
|
||||||
if (app != APP_NETZ_C && app != APP_RUFN_GEBZ) {
|
if (app != APP_NETZ_C && app != APP_RUFN_GEBZ) {
|
||||||
PDEBUG(DSIM7, DEBUG_NOTICE, "SL-APPL invalid app %d\n", sim->app);
|
PDEBUG(DSIM7, DEBUG_NOTICE, "SL-APPL invalid app %d\n", sim->app);
|
||||||
return_error(sim);
|
return_error(sim);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
sim->app = app;
|
||||||
|
|
||||||
|
/* if PIN is required, we request it, but we've already selected the app */
|
||||||
|
if (sim->pin_required) {
|
||||||
|
return_pin_not_ok(sim);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* respond */
|
/* respond */
|
||||||
sim->app = app;
|
|
||||||
data = alloc_msg(sim, 0);
|
data = alloc_msg(sim, 0);
|
||||||
tx_sdu(sim, 0, data, 0);
|
tx_sdu(sim, 0, data, 0);
|
||||||
}
|
}
|
||||||
|
@ -913,7 +913,7 @@ static void aut_1(sim_sim_t *sim)
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
PDEBUG(DSIM7, DEBUG_INFO, " RD-EBDT\n");
|
PDEBUG(DSIM7, DEBUG_INFO, " AUTH-1\n");
|
||||||
|
|
||||||
/* respond */
|
/* respond */
|
||||||
data = alloc_msg(sim, 1);
|
data = alloc_msg(sim, 1);
|
||||||
|
@ -1337,7 +1337,10 @@ int sim_init_eeprom(void)
|
||||||
eeprom_write(EEPROM_FLAGS, (strlen(PIN_DEFAULT) << EEPROM_FLAG_PIN_LEN) | (MAX_PIN_TRY << EEPROM_FLAG_PIN_TRY));
|
eeprom_write(EEPROM_FLAGS, (strlen(PIN_DEFAULT) << EEPROM_FLAG_PIN_LEN) | (MAX_PIN_TRY << EEPROM_FLAG_PIN_TRY));
|
||||||
for (i = 0; i < (int)strlen(PIN_DEFAULT); i++)
|
for (i = 0; i < (int)strlen(PIN_DEFAULT); i++)
|
||||||
eeprom_write(EEPROM_PIN_DATA + i, PIN_DEFAULT[i]);
|
eeprom_write(EEPROM_PIN_DATA + i, PIN_DEFAULT[i]);
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
eeprom_write(EEPROM_AUTH_DATA + i, AUTH_DEFAULT >> ((7 - i) * 8));
|
||||||
|
|
||||||
|
/* now write magic characters to identify virgin or initialized EEPROM */
|
||||||
eeprom_write(EEPROM_MAGIC + 0, 'C');
|
eeprom_write(EEPROM_MAGIC + 0, 'C');
|
||||||
eeprom_write(EEPROM_MAGIC + 1, '0' + EEPROM_VERSION);
|
eeprom_write(EEPROM_MAGIC + 1, '0' + EEPROM_VERSION);
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#define SONDER_DEFAULT "0"
|
#define SONDER_DEFAULT "0"
|
||||||
#define WARTUNG_DEFAULT "65535"
|
#define WARTUNG_DEFAULT "65535"
|
||||||
#define PIN_DEFAULT "0000"
|
#define PIN_DEFAULT "0000"
|
||||||
#define AUTH_DEFAULT "0xffffffffffffffff"
|
#define AUTH_DEFAULT ((uint64_t)0x000000000badefee)
|
||||||
|
|
||||||
enum l1_state {
|
enum l1_state {
|
||||||
L1_STATE_RESET = 0, /* reset is held */
|
L1_STATE_RESET = 0, /* reset is held */
|
||||||
|
|
Loading…
Reference in New Issue