mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-18 03:00:58 +08:00
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:
parent
ef318b56ec
commit
f9ba0e59fa
2 changed files with 63 additions and 33 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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]"},
|
||||||
|
|
Loading…
Reference in a new issue