removed some commands again

moved internal commands to only build in standalone mode
send NACK if DisablePrivacySlixLIso15693 fails
This commit is contained in:
g3gg0 2020-05-19 01:11:55 +02:00
parent 31e4c66f00
commit 3d411bee02
4 changed files with 37 additions and 157 deletions

View file

@ -1195,21 +1195,9 @@ void UsbPacketReceived(UsbCommand *c) {
DirectTag15693Command(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes); DirectTag15693Command(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes);
break; break;
case CMD_ISO_15693_SLIX_L_CHANGE_PASS:
ChangePassSlixLIso15693(c->arg[0], c->arg[1], c->arg[2]);
break;
case CMD_ISO_15693_SLIX_L_DISABLE_PRIVACY: case CMD_ISO_15693_SLIX_L_DISABLE_PRIVACY:
DisablePrivacySlixLIso15693(c->arg[0]); DisablePrivacySlixLIso15693(c->arg[0]);
break; break;
case CMD_ISO_15693_SLIX_L_LOCK_PASS:
LockPassSlixLIso15693(c->arg[0], c->arg[1]);
break;
case CMD_ISO_15693_BRUTE_FORCE:
BruteforceIso15693(c->arg[0], c->arg[1]);
break;
case CMD_ISO_15693_FIND_AFI: case CMD_ISO_15693_FIND_AFI:
BruteforceIso15693Afi(c->arg[0]); BruteforceIso15693Afi(c->arg[0]);

View file

@ -1821,6 +1821,42 @@ int ReadMemoryIso15693(uint32_t start_time, uint32_t *eof_time, uint8_t bank, ui
return SLIX_ERR_OK; return SLIX_ERR_OK;
} }
void DisablePrivacySlixLIso15693(uint32_t password) {
uint32_t start_time = 0;
uint32_t eof_time = 0;
Dbprintf(" [x] Set password");
LED_D_ON();
Iso15693InitReader();
StartCountSspClk();
switch(SetPassSlixLIso15693(start_time, &eof_time, 4, password)) {
case SLIX_ERR_NORESP:
Dbprintf(" [i] No tag found");
cmd_send(CMD_NACK, 0, 0, 0, NULL, ISO15693_MAX_RESPONSE_LENGTH);
LED_C_ON();
return;
case SLIX_ERR_INVPASS:
Dbprintf(" [E] Password was not accepted");
cmd_send(CMD_NACK, 1, 0, 0, NULL, ISO15693_MAX_RESPONSE_LENGTH);
LED_B_ON();
return;
}
Dbprintf(" [x] Success");
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
cmd_send(CMD_ACK,1,0,0,0,0);
LED_A_OFF();
LED_B_OFF();
LED_C_OFF();
LED_D_OFF();
}
#if defined(WITH_ISO15693_StandAlone)
void ChangePassSlixLIso15693(uint32_t pass_id, uint32_t old_password, uint32_t password) { void ChangePassSlixLIso15693(uint32_t pass_id, uint32_t old_password, uint32_t password) {
uint8_t uid[8]; uint8_t uid[8];
bool done = false; bool done = false;
@ -2209,38 +2245,6 @@ void LockPassSlixLIso15693(uint32_t pass_id, uint32_t password) {
LED_D_OFF(); LED_D_OFF();
} }
void DisablePrivacySlixLIso15693(uint32_t password) {
uint32_t start_time = 0;
uint32_t eof_time = 0;
Dbprintf(" [x] Set password");
LED_D_ON();
Iso15693InitReader();
StartCountSspClk();
switch(SetPassSlixLIso15693(start_time, &eof_time, 4, password)) {
case SLIX_ERR_NORESP:
Dbprintf(" [i] No tag found");
LED_C_ON();
return;
case SLIX_ERR_INVPASS:
Dbprintf(" [E] Password was not accepted");
LED_B_ON();
return;
}
Dbprintf(" [x] Success");
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
cmd_send(CMD_ACK,1,0,0,0,0);
LED_A_OFF();
LED_B_OFF();
LED_C_OFF();
LED_D_OFF();
}
void BruteforceIso15693(uint32_t start_cmd, uint32_t end_cmd) { void BruteforceIso15693(uint32_t start_cmd, uint32_t end_cmd) {
uint8_t cmd_buffer[64]; uint8_t cmd_buffer[64];
@ -2363,7 +2367,7 @@ void BruteforceIso15693(uint32_t start_cmd, uint32_t end_cmd) {
LED_C_OFF(); LED_C_OFF();
LED_D_OFF(); LED_D_OFF();
} }
#endif
// Initialize the proxmark as iso15k tag // Initialize the proxmark as iso15k tag
void Iso15693InitTag(void) { void Iso15693InitTag(void) {

View file

@ -306,112 +306,6 @@ static int CmdHF15Afi(const char *Cmd) {
return 0; return 0;
} }
static int CmdHF15SlixChangePass(const char *Cmd)
{
char cmdp = param_getchar(Cmd, 0);
uint8_t old_pass[4] = {0x00};
uint8_t new_pass[4] = {0x00};
uint8_t pass_id[1] = {0x00};
if (cmdp == 'h' || cmdp == 'H') {
PrintAndLog("Usage: hf 15 slix_change_pass <pass_id> <old_pass> <new_pass>");
PrintAndLog("");
PrintAndLog(" pass_id 04: privacy, 08: destroy, 10: EAS/AFI");
PrintAndLog("");
PrintAndLog(" example: hf 15 slix_change_pass 04 00000000 0F0F0F0F");
return 0;
}
if (param_gethex(Cmd, 0, pass_id, 2)) {
PrintAndLog("pass_id must have 2 HEX symbols");
return 0;
}
if (param_gethex(Cmd, 1, old_pass, 8)) {
PrintAndLog("pass must have 8 HEX symbols");
return 0;
}
if (param_gethex(Cmd, 2, new_pass, 8)) {
PrintAndLog("pass must have 8 HEX symbols");
return 0;
}
PrintAndLog("Setting new password %02X%02X%02X%02X for ID 0x%02X", new_pass[0], new_pass[1], new_pass[2], new_pass[3], *pass_id);
UsbCommand c = {CMD_ISO_15693_SLIX_L_CHANGE_PASS, {*pass_id, 0, 0}};
memcpy(&c.arg[1],old_pass,4);
memcpy(&c.arg[2],new_pass,4);
SendCommand(&c);
return 0;
}
static int CmdHF15SlixLockPass(const char *Cmd)
{
char cmdp = param_getchar(Cmd, 0);
uint8_t pass[4] = {0x00};
uint8_t pass_id[1] = {0x00};
if (cmdp == 'h' || cmdp == 'H') {
PrintAndLog("Usage: hf 15 slix_lock_pass <pass_id> <password>");
PrintAndLog("");
PrintAndLog(" pass_id 04: privacy, 08: destroy, 10: EAS/AFI");
PrintAndLog("");
PrintAndLog(" example: hf 15 slix_lock_pass 04 0F0F0F0F");
return 0;
}
if (param_gethex(Cmd, 0, pass_id, 2)) {
PrintAndLog("pass_id must have 2 HEX symbols");
return 0;
}
if (param_gethex(Cmd, 1, pass, 8)) {
PrintAndLog("pass must have 8 HEX symbols");
return 0;
}
PrintAndLog("Locking password %02X%02X%02X%02X for ID 0x%02X", pass[0], pass[1], pass[2], pass[3], *pass_id);
UsbCommand c = {CMD_ISO_15693_SLIX_L_LOCK_PASS, {*pass_id, 0, 0}};
memcpy(&c.arg[1],pass,4);
SendCommand(&c);
return 0;
}
static int CmdHF15Bruteforce(const char *Cmd)
{
char cmdp = param_getchar(Cmd, 0);
uint8_t start_cmd = 0x00;
uint8_t end_cmd = 0x00;
if (cmdp == 'h' || cmdp == 'H') {
PrintAndLog("Usage: hf 15 brute <start_cmd> <end_cmd>");
PrintAndLog("");
PrintAndLog(" example: hf 15 brute 40 A0");
return 0;
}
if (param_gethex(Cmd, 0, &start_cmd, 2)) {
PrintAndLog("start_cmd must have 2 HEX symbols");
return 0;
}
if (param_gethex(Cmd, 1, &end_cmd, 2)) {
PrintAndLog("end_cmd must have 2 HEX symbols");
return 0;
}
PrintAndLog("Scanning commands 0x%02X - 0x%02X", start_cmd, end_cmd);
UsbCommand c = {CMD_ISO_15693_BRUTE_FORCE, {start_cmd, end_cmd, 0}};
SendCommand(&c);
return 0;
}
static int CmdHF15SlixDisablePrivacy(const char *Cmd) static int CmdHF15SlixDisablePrivacy(const char *Cmd)
{ {
char cmdp = param_getchar(Cmd, 0); char cmdp = param_getchar(Cmd, 0);
@ -1201,10 +1095,7 @@ static command_t CommandTable15[] = {
{"reader", CmdHF15Reader, 0, "Act like an ISO15693 reader"}, {"reader", CmdHF15Reader, 0, "Act like an ISO15693 reader"},
{"sim", CmdHF15Sim, 0, "Fake an ISO15693 tag"}, {"sim", CmdHF15Sim, 0, "Fake an ISO15693 tag"},
{"cmd", CmdHF15Cmd, 0, "Send direct commands to ISO15693 tag"}, {"cmd", CmdHF15Cmd, 0, "Send direct commands to ISO15693 tag"},
{"brute", CmdHF15Bruteforce, 0, "Brute force ISO15693 commands"},
{"slix_disable_privacy", CmdHF15SlixDisablePrivacy, 0, "Disable privacy mode on SLIX ISO15693 tag"}, {"slix_disable_privacy", CmdHF15SlixDisablePrivacy, 0, "Disable privacy mode on SLIX ISO15693 tag"},
{"slix_change_pass", CmdHF15SlixChangePass, 0, "Change password of SLIX ISO15693 tag"},
{"slix_lock_pass", CmdHF15SlixLockPass, 0, "Lock password on SLIX ISO15693 tag"},
{"findafi", CmdHF15Afi, 0, "Brute force AFI of an ISO15693 tag"}, {"findafi", CmdHF15Afi, 0, "Brute force AFI of an ISO15693 tag"},
{"dumpmemory", CmdHF15DumpMem, 0, "Read all memory pages of an ISO15693 tag"}, {"dumpmemory", CmdHF15DumpMem, 0, "Read all memory pages of an ISO15693 tag"},
{"csetuid", CmdHF15CSetUID, 0, "Set UID for magic Chinese card"}, {"csetuid", CmdHF15CSetUID, 0, "Set UID for magic Chinese card"},

View file

@ -147,9 +147,6 @@ typedef struct {
#define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317 #define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317
#define CMD_CSETUID_ISO_15693 0x0318 #define CMD_CSETUID_ISO_15693 0x0318
#define CMD_ISO_15693_SLIX_L_DISABLE_PRIVACY 0x0319 #define CMD_ISO_15693_SLIX_L_DISABLE_PRIVACY 0x0319
#define CMD_ISO_15693_SLIX_L_CHANGE_PASS 0x031A
#define CMD_ISO_15693_SLIX_L_LOCK_PASS 0x031B
#define CMD_ISO_15693_BRUTE_FORCE 0x031C
// For Hitag2 transponders // For Hitag2 transponders
#define CMD_SNOOP_HITAG 0x0370 #define CMD_SNOOP_HITAG 0x0370