chg: 'sc list' - hooked up list command (runs 'trace list 7816' )

chg: 'sc reader' - added 's' silent parameter
chg: 'sc info' - added 's' silent parameter
This commit is contained in:
Chris 2018-07-08 11:19:26 +02:00
parent ef318b56ec
commit f9ba0e59fa
2 changed files with 63 additions and 33 deletions

View file

@ -191,12 +191,11 @@ int CmdHF14AList(const char *Cmd) {
} }
int CmdHF14AReader(const char *Cmd) { int CmdHF14AReader(const char *Cmd) {
bool silent = false;
uint32_t cm = ISO14A_CONNECT; uint32_t cm = ISO14A_CONNECT;
bool disconnectAfter = true; bool disconnectAfter = true, silent = false;
int cmdp = 0; int cmdp = 0;
while (param_getchar(Cmd, cmdp) != 0x00) { while (param_getchar(Cmd, cmdp) != 0x00) {
switch (tolower(param_getchar(Cmd, cmdp))) { switch (tolower(param_getchar(Cmd, cmdp))) {
case 'h': case 'h':
@ -208,16 +207,15 @@ int CmdHF14AReader(const char *Cmd) {
disconnectAfter = false; disconnectAfter = false;
break; break;
case 's': case 's':
silent = true; silent = true;
break; break;
case 'x': case 'x':
cm &= ~ISO14A_CONNECT; cm &= ~ISO14A_CONNECT;
break; break;
default: default:
PrintAndLogEx(WARNING, "Unknown command."); PrintAndLogEx(WARNING, "Unknown command.");
return 1; return 1;
} }
cmdp++; cmdp++;
} }
@ -225,7 +223,6 @@ int CmdHF14AReader(const char *Cmd) {
cm |= ISO14A_NO_DISCONNECT; cm |= ISO14A_NO_DISCONNECT;
UsbCommand c = {CMD_READER_ISO_14443a, {cm, 0, 0}}; UsbCommand c = {CMD_READER_ISO_14443a, {cm, 0, 0}};
clearCommandBuffer(); clearCommandBuffer();
SendCommand(&c); SendCommand(&c);
@ -1020,17 +1017,17 @@ int CmdHF14AAntiFuzz(const char *cmd) {
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, 1, "This help"}, {"help", CmdHelp, 1, "This help"},
{"list", CmdHF14AList, 0, "[Deprecated] List ISO 14443-a history"}, {"list", CmdHF14AList, 0, "[Deprecated] List ISO 14443-a history"},
{"info", CmdHF14AInfo, 0, "Tag information"}, {"info", CmdHF14AInfo, 0, "Tag information"},
{"reader", CmdHF14AReader, 0, "Act like an ISO14443-a reader"}, {"reader", CmdHF14AReader, 0, "Act like an ISO14443-a reader"},
{"cuids", CmdHF14ACUIDs, 0, "<n> Collect n>0 ISO14443-a UIDs in one go"}, {"cuids", CmdHF14ACUIDs, 0, "<n> Collect n>0 ISO14443-a UIDs in one go"},
{"sim", CmdHF14ASim, 0, "<UID> -- Simulate ISO 14443-a tag"}, {"sim", CmdHF14ASim, 0, "<UID> -- Simulate ISO 14443-a tag"},
{"sniff", CmdHF14ASniff, 0, "sniff ISO 14443-a traffic"}, {"sniff", CmdHF14ASniff, 0, "sniff ISO 14443-a traffic"},
{"apdu", CmdHF14AAPDU, 0, "Send ISO 14443-4 APDU to tag"}, {"apdu", CmdHF14AAPDU, 0, "Send ISO 14443-4 APDU to tag"},
{"raw", CmdHF14ACmdRaw, 0, "Send raw hex data to tag"}, {"raw", CmdHF14ACmdRaw, 0, "Send raw hex data to tag"},
{"antifuzz", CmdHF14AAntiFuzz, 0, "Fuzzing the anticollision phase. Warning! Readers may react strange"}, {"antifuzz", CmdHF14AAntiFuzz, 0, "Fuzzing the anticollision phase. Warning! Readers may react strange"},
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
int CmdHF14A(const char *Cmd) { int CmdHF14A(const char *Cmd) {

View file

@ -211,38 +211,68 @@ int CmdSmartUpgrade(const char *Cmd) {
} }
int CmdSmartInfo(const char *Cmd){ int CmdSmartInfo(const char *Cmd){
uint8_t cmdp = 0; uint8_t cmdp = 0;
bool errors = false; bool errors = false, silent = false;
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
switch (tolower(param_getchar(Cmd, cmdp))) { switch (tolower(param_getchar(Cmd, cmdp))) {
case 'h': return usage_sm_info(); case 'h': return usage_sm_info();
case 's':
silent = true;
break;
default: default:
PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
cmdp++;
} }
//Validations //Validations
if (errors || cmdp == 0 ) return usage_sm_info(); if (errors || cmdp == 0 ) return usage_sm_info();
UsbCommand c = {CMD_SMART_ATR, {0, 0, 0}};
clearCommandBuffer();
SendCommand(&c);
UsbCommand resp;
if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) {
if (!silent) PrintAndLogEx(WARNING, "smart card select failed");
return 1;
}
uint8_t isok = resp.arg[0] & 0xFF;
if (!isok) {
if (!silent) PrintAndLogEx(WARNING, "smart card select failed");
return 1;
}
smart_card_atr_t card;
memcpy(&card, (smart_card_atr_t *)resp.d.asBytes, sizeof(smart_card_atr_t));
// print header
PrintAndLogEx(INFO, "\n--- Smartcard Information ---------");
PrintAndLogEx(INFO, "-------------------------------------------------------------");
PrintAndLogEx(INFO, "ATR : %s", sprint_hex(card.atr, sizeof(card.atr_len)));
PrintAndLogEx(INFO, "\n todo - look up ATR ");
return 0; return 0;
} }
int CmdSmartReader(const char *Cmd){ int CmdSmartReader(const char *Cmd){
uint8_t cmdp = 0; uint8_t cmdp = 0;
bool errors = false; bool errors = false, silent = false;
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
switch (tolower(param_getchar(Cmd, cmdp))) { switch (tolower(param_getchar(Cmd, cmdp))) {
case 'h': return usage_sm_reader(); case 'h': return usage_sm_reader();
case 's':
silent = true;
break;
default: default:
PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
cmdp++;
} }
//Validations //Validations
@ -253,27 +283,30 @@ int CmdSmartReader(const char *Cmd){
SendCommand(&c); SendCommand(&c);
UsbCommand resp; UsbCommand resp;
if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) { if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) {
PrintAndLogEx(WARNING, "timeout while waiting for reply."); if (!silent) PrintAndLogEx(WARNING, "smart card select failed");
return 1; return 1;
} }
uint8_t isok = resp.arg[0] & 0xFF; uint8_t isok = resp.arg[0] & 0xFF;
if (!isok) { if (!isok) {
PrintAndLogEx(FAILED, "failed to get ATR"); if (!silent) PrintAndLogEx(WARNING, "smart card select failed");
return 1; return 1;
} }
smart_card_atr_t card;
memcpy(&card, (smart_card_atr_t *)resp.d.asBytes, sizeof(smart_card_atr_t));
smart_card_atr_t *card = (smart_card_atr_t *)resp.d.asBytes; PrintAndLogEx(INFO, "ATR : %s", sprint_hex(card.atr, sizeof(card.atr_len)));
return 0;
// print header }
PrintAndLogEx(INFO, "\n--- Smartcard Information ---------");
PrintAndLogEx(INFO, "-------------------------------------------------------------"); int CmdSmartList(const char *Cmd) {
PrintAndLogEx(INFO, "ATR : %s", sprint_hex(card->atr, sizeof(card->atr_len))); CmdTraceList("7816");
return 0; return 0;
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, 1, "This help"}, {"help", CmdHelp, 1, "This help"},
{"list", CmdSmartList, 0, "List ISO 7816 history"},
{"info", CmdSmartInfo, 1, "Tag information [rdv40]"}, {"info", CmdSmartInfo, 1, "Tag information [rdv40]"},
{"reader", CmdSmartReader, 1, "Act like an IS07816 reader [rdv40]"}, {"reader", CmdSmartReader, 1, "Act like an IS07816 reader [rdv40]"},
{"raw", CmdSmartRaw, 1, "Send raw hex data to tag [rdv40]"}, {"raw", CmdSmartRaw, 1, "Send raw hex data to tag [rdv40]"},