mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-19 03:23:36 +08:00
ADD: ISO7816-4 annotation in "hf list".
Only basic 7816 command apdu supported. USAGE::"hf list 7816"
This commit is contained in:
parent
d8af608f8e
commit
c5f8c67ab4
2 changed files with 97 additions and 20 deletions
|
@ -189,7 +189,6 @@ void annotateIso15693(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void annotateTopaz(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
|
||||
{
|
||||
switch(cmd[0]) {
|
||||
|
@ -204,10 +203,34 @@ void annotateTopaz(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
|
|||
case TOPAZ_READ8 :snprintf(exp, size, "READ8");break;
|
||||
case TOPAZ_WRITE_E8 :snprintf(exp, size, "WRITE-E8");break;
|
||||
case TOPAZ_WRITE_NE8 :snprintf(exp, size, "WRITE-NE8");break;
|
||||
default: snprintf(exp,size,"?"); break;
|
||||
default :snprintf(exp,size,"?"); break;
|
||||
}
|
||||
}
|
||||
|
||||
void annotateIso7816(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){
|
||||
|
||||
int pos = (cmd[0] == 2 || cmd[0] == 3) ? 1 : 2;
|
||||
|
||||
switch ( cmd[pos] ){
|
||||
case ISO7816_READ_BINARY :snprintf(exp, size, "READ BIN");break;
|
||||
case ISO7816_WRITE_BINARY :snprintf(exp, size, "WRITE BIN");break;
|
||||
case ISO7816_UPDATE_BINARY :snprintf(exp, size, "UPDATE BIN");break;
|
||||
case ISO7816_ERASE_BINARY :snprintf(exp, size, "ERASE BIN");break;
|
||||
case ISO7816_READ_RECORDS :snprintf(exp, size, "READ RECORDS");break;
|
||||
case ISO7816_WRITE_RECORDS :snprintf(exp, size, "WRITE RECORDS");break;
|
||||
case ISO7816_APPEND_RECORD :snprintf(exp, size, "APPEND RECORD");break;
|
||||
case ISO7816_UPDATE_RECORD :snprintf(exp, size, "UPDATE RECORD");break;
|
||||
case ISO7816_GET_DATA :snprintf(exp, size, "GET DATA");break;
|
||||
case ISO7816_PUT_DATA :snprintf(exp, size, "PUT DATA");break;
|
||||
case ISO7816_SELECT_FILE :snprintf(exp, size, "SELECT FILE");break;
|
||||
case ISO7816_VERIFY :snprintf(exp, size, "VERIFY");break;
|
||||
case ISO7816_INTERNAL_AUTHENTICATION :snprintf(exp, size, "INTERNAL AUTH");break;
|
||||
case ISO7816_EXTERNAL_AUTHENTICATION :snprintf(exp, size, "EXTERNAL AUTH");break;
|
||||
case ISO7816_GET_CHALLENGE :snprintf(exp, size, "GET CHALLENGE");break;
|
||||
case ISO7816_MANAGE_CHANNEL :snprintf(exp, size, "MANAGE CHANNEL");break;
|
||||
default :snprintf(exp,size,"?"); break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
06 00 = INITIATE
|
||||
|
@ -234,9 +257,10 @@ void annotateIso14443b(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
|
|||
case ISO14443B_RESET : snprintf(exp,size,"RESET");break;
|
||||
case ISO14443B_COMPLETION : snprintf(exp,size,"COMPLETION");break;
|
||||
case ISO14443B_AUTHENTICATE : snprintf(exp,size,"AUTHENTICATE");break;
|
||||
case ISO14443B_PING : snprintf(exp,size,"PING");break;
|
||||
case ISO14443B_PONG : snprintf(exp,size,"PONG");break;
|
||||
default : snprintf(exp,size ,"?");break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -517,6 +541,7 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
|
|||
case ISO_14443A: annotateIso14443a(explanation,sizeof(explanation),frame,data_len); break;
|
||||
case ISO_14443B: annotateIso14443b(explanation,sizeof(explanation),frame,data_len); break;
|
||||
case TOPAZ: annotateTopaz(explanation,sizeof(explanation),frame,data_len); break;
|
||||
case ISO_7816_4: annotateIso7816(explanation,sizeof(explanation),frame,data_len); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
@ -585,6 +610,8 @@ int CmdHFList(const char *Cmd)
|
|||
protocol = ISO_14443B;
|
||||
} else if(strcmp(type,"topaz")== 0) {
|
||||
protocol = TOPAZ;
|
||||
} else if(strcmp(type,"7816")== 0) {
|
||||
protocol = ISO_7816_4;
|
||||
} else if(strcmp(type,"raw")== 0) {
|
||||
protocol = -1;//No crc, no annotations
|
||||
}else{
|
||||
|
@ -603,6 +630,7 @@ int CmdHFList(const char *Cmd)
|
|||
PrintAndLog(" 14b - interpret data as iso14443b communications");
|
||||
PrintAndLog(" iclass - interpret data as iclass communications");
|
||||
PrintAndLog(" topaz - interpret data as topaz communications");
|
||||
PrintAndLog(" 7816 - interpret data as iso7816-4 communications");
|
||||
PrintAndLog("");
|
||||
PrintAndLog("example: hf list 14a f");
|
||||
PrintAndLog("example: hf list iclass");
|
||||
|
|
|
@ -31,6 +31,9 @@ ISO14443B
|
|||
05 = REQB
|
||||
1D = ATTRIB
|
||||
50 = HALT
|
||||
|
||||
BA = PING (reader -> tag)
|
||||
AB = PONG (tag -> reader)
|
||||
SRIX4K (tag does not respond to 05)
|
||||
06 00 = INITIATE
|
||||
0E xx = SELECT ID (xx = Chip-ID)
|
||||
|
@ -88,7 +91,29 @@ NXP/Philips CUSTOM COMMANDS
|
|||
BA = Enable Privacy
|
||||
BB = 64bit Password Protection
|
||||
40 = Long Range CMD (Standard ISO/TR7003:1990)
|
||||
*/
|
||||
|
||||
ISO 7816-4 Basic interindustry commands. For command APDU's.
|
||||
B0 = READ BINARY
|
||||
D0 = WRITE BINARY
|
||||
D6 = UPDATE BINARY
|
||||
0E = ERASE BINARY
|
||||
B2 = READ RECORDS
|
||||
D2 = WRITE RECORDS
|
||||
E2 = APPEND RECORD
|
||||
DC = UPDATE RECORD
|
||||
CA = GET DATA
|
||||
DA = PUT DATA
|
||||
A4 = SELECT FILE
|
||||
20 = VERIFY
|
||||
88 = INTERNAL AUTHENTICATION
|
||||
82 = EXTERNAL AUTHENTICATION
|
||||
B4 = GET CHALLENGE
|
||||
70 = MANAGE CHANNEL
|
||||
|
||||
For response APDU's
|
||||
90 00 = OK
|
||||
6x xx = ERROR
|
||||
*/
|
||||
|
||||
#define ICLASS_CMD_ACTALL 0x0A
|
||||
#define ICLASS_CMD_READ_OR_IDENTIFY 0x0C
|
||||
|
@ -159,6 +184,8 @@ NXP/Philips CUSTOM COMMANDS
|
|||
#define ISO14443B_RESET 0x0C
|
||||
#define ISO14443B_COMPLETION 0x0F
|
||||
#define ISO14443B_AUTHENTICATE 0x0A
|
||||
#define ISO14443B_PING 0xBA
|
||||
#define ISO14443B_PONG 0xAB
|
||||
|
||||
//First byte is 26
|
||||
#define ISO15693_INVENTORY 0x01
|
||||
|
@ -197,6 +224,7 @@ NXP/Philips CUSTOM COMMANDS
|
|||
#define ICLASS 1
|
||||
#define ISO_14443B 2
|
||||
#define TOPAZ 3
|
||||
#define ISO_7816_4 4
|
||||
|
||||
//-- Picopass fuses
|
||||
#define FUSE_FPERS 0x80
|
||||
|
@ -208,6 +236,27 @@ NXP/Philips CUSTOM COMMANDS
|
|||
#define FUSE_FPROD0 0x02
|
||||
#define FUSE_RA 0x01
|
||||
|
||||
// ISO 7816-4 Basic interindustry commands. For command APDU's.
|
||||
#define ISO7816_READ_BINARY 0xB0
|
||||
#define ISO7816_WRITE_BINARY 0xD0
|
||||
#define ISO7816_UPDATE_BINARY 0xD6
|
||||
#define ISO7816_ERASE_BINARY 0x0E
|
||||
#define ISO7816_READ_RECORDS 0xB2
|
||||
#define ISO7816_WRITE_RECORDS 0xD2
|
||||
#define ISO7816_APPEND_RECORD 0xE2
|
||||
#define ISO7816_UPDATE_RECORD 0xDC
|
||||
#define ISO7816_GET_DATA 0xCA
|
||||
#define ISO7816_PUT_DATA 0xDA
|
||||
#define ISO7816_SELECT_FILE 0xA4
|
||||
#define ISO7816_VERIFY 0x20
|
||||
#define ISO7816_INTERNAL_AUTHENTICATION 0x88
|
||||
#define ISO7816_EXTERNAL_AUTHENTICATION 0x82
|
||||
#define ISO7816_GET_CHALLENGE 0xB4
|
||||
#define ISO7816_MANAGE_CHANNEL 0x70
|
||||
|
||||
// ISO7816-4 For response APDU's
|
||||
#define ISO7816_OK 0x9000
|
||||
// 6x xx = ERROR
|
||||
|
||||
void printIclassDumpInfo(uint8_t* iclass_dump);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue