mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2026-05-12 11:18:11 -07:00
Merge pull request #3233 from kormax/felica-trace-improved-annotation
Annotate more FeliCa commands with 'hf felica list'
This commit is contained in:
+100
-14
@@ -1972,48 +1972,77 @@ void annotateLegic(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
|
||||
}
|
||||
|
||||
void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
|
||||
switch (cmd[3]) {
|
||||
case FELICA_POLL_REQ:
|
||||
if (cmdsize < 4) {
|
||||
snprintf(exp, size, "?");
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t cmd_code = cmd[3];
|
||||
if (cmd_code >= 0xC0 && cmdsize > 4) {
|
||||
// Command codes >= 0xC0 include a second-byte subcommand/function code.
|
||||
cmd_code = (uint16_t)((cmd_code << 8) | cmd[4]);
|
||||
}
|
||||
|
||||
switch (cmd_code) {
|
||||
case FELICA_POLL_REQ: {
|
||||
// Polling request code is byte 6 of the trace frame.
|
||||
if (cmdsize > 6) {
|
||||
if (cmd[6] == 0x01) {
|
||||
snprintf(exp, size, "POLLING (SYSTEM CODE)");
|
||||
break;
|
||||
}
|
||||
if (cmd[6] == 0x02) {
|
||||
snprintf(exp, size, "POLLING (COMMUNICATION PERFORMANCE)");
|
||||
break;
|
||||
}
|
||||
}
|
||||
snprintf(exp, size, "POLLING");
|
||||
break;
|
||||
}
|
||||
case FELICA_POLL_ACK:
|
||||
snprintf(exp, size, "POLL ACK");
|
||||
snprintf(exp, size, "POLLING ACK");
|
||||
break;
|
||||
case FELICA_REQSRV_REQ:
|
||||
snprintf(exp, size, "REQUEST SERVICE");
|
||||
break;
|
||||
case FELICA_REQSRV_ACK:
|
||||
snprintf(exp, size, "REQ SERV ACK");
|
||||
snprintf(exp, size, "REQUEST SERVICE ACK");
|
||||
break;
|
||||
case FELICA_REQRESP_REQ:
|
||||
snprintf(exp, size, "REQUEST RESPONSE");
|
||||
break;
|
||||
case FELICA_REQRESP_ACK:
|
||||
snprintf(exp, size, "REQ RESP ACK");
|
||||
snprintf(exp, size, "REQUEST RESPONSE ACK");
|
||||
break;
|
||||
case FELICA_RDBLK_REQ:
|
||||
snprintf(exp, size, "READ BLK");
|
||||
snprintf(exp, size, "READ WITHOUT ENCRYPTION");
|
||||
break;
|
||||
case FELICA_RDBLK_ACK:
|
||||
snprintf(exp, size, "READ BLK ACK");
|
||||
snprintf(exp, size, "READ WITHOUT ENCRYPTION ACK");
|
||||
break;
|
||||
case FELICA_WRTBLK_REQ:
|
||||
snprintf(exp, size, "WRITE BLK");
|
||||
snprintf(exp, size, "WRITE WITHOUT ENCRYPTION");
|
||||
break;
|
||||
case FELICA_WRTBLK_ACK:
|
||||
snprintf(exp, size, "WRITE BLK ACK");
|
||||
snprintf(exp, size, "WRITE WITHOUT ENCRYPTION ACK");
|
||||
break;
|
||||
case FELICA_SRCHSYSCODE_REQ:
|
||||
snprintf(exp, size, "SEARCH SERVICE CODE");
|
||||
break;
|
||||
case FELICA_SRCHSYSCODE_ACK:
|
||||
snprintf(exp, size, "SSC ACK");
|
||||
snprintf(exp, size, "SEARCH SERVICE CODE ACK");
|
||||
break;
|
||||
case FELICA_REQSYSCODE_REQ:
|
||||
snprintf(exp, size, "REQUEST SYSTEM CODE");
|
||||
break;
|
||||
case FELICA_REQSYSCODE_ACK:
|
||||
snprintf(exp, size, "RSC ACK");
|
||||
snprintf(exp, size, "REQUEST SYSTEM CODE ACK");
|
||||
break;
|
||||
case FELICA_REQBLKINFO_REQ:
|
||||
snprintf(exp, size, "REQUEST BLOCK INFORMATION");
|
||||
break;
|
||||
case FELICA_REQBLKINFO_ACK:
|
||||
snprintf(exp, size, "REQUEST BLOCK INFORMATION ACK");
|
||||
break;
|
||||
case FELICA_AUTH1_REQ:
|
||||
snprintf(exp, size, "AUTH 1");
|
||||
@@ -2045,11 +2074,53 @@ void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
|
||||
case FELICA_GET_NODE_LIST_ACK:
|
||||
snprintf(exp, size, "REQUEST CODE LIST ACK");
|
||||
break;
|
||||
case FELICA_REQBLKINFO_EX_REQ:
|
||||
snprintf(exp, size, "REQUEST BLOCK INFORMATION EX");
|
||||
break;
|
||||
case FELICA_REQBLKINFO_EX_ACK:
|
||||
snprintf(exp, size, "REQUEST BLOCK INFORMATION EX ACK");
|
||||
break;
|
||||
case FELICA_SET_PARAMETER_REQ:
|
||||
snprintf(exp, size, "SET PARAMETER");
|
||||
break;
|
||||
case FELICA_SET_PARAMETER_ACK:
|
||||
snprintf(exp, size, "SET PARAMETER ACK");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_ISSUE_INFO_REQ:
|
||||
snprintf(exp, size, "GET CONTAINER ISSUE INFO");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_ISSUE_INFO_ACK:
|
||||
snprintf(exp, size, "GET CONTAINER ISSUE INFO ACK");
|
||||
break;
|
||||
case FELICA_GET_AREA_INFO_REQ:
|
||||
snprintf(exp, size, "GET AREA INFO");
|
||||
break;
|
||||
case FELICA_GET_AREA_INFO_ACK:
|
||||
snprintf(exp, size, "GET AREA INFO ACK");
|
||||
break;
|
||||
case FELICA_GET_NODE_PROPERTY_REQ:
|
||||
snprintf(exp, size, "GET NODE PROPERTY");
|
||||
break;
|
||||
case FELICA_GET_NODE_PROPERTY_ACK:
|
||||
snprintf(exp, size, "GET NODE PROPERTY ACK");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_PROPERTY_REQ:
|
||||
snprintf(exp, size, "GET CONTAINER PROPERTY");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_PROPERTY_ACK:
|
||||
snprintf(exp, size, "GET CONTAINER PROPERTY ACK");
|
||||
break;
|
||||
case FELICA_REQSRV2_REQ:
|
||||
snprintf(exp, size, "REQUEST SERVICE v2");
|
||||
break;
|
||||
case FELICA_REQSRV2_ACK:
|
||||
snprintf(exp, size, "REQ SERV v2 ACK");
|
||||
snprintf(exp, size, "REQUEST SERVICE v2 ACK");
|
||||
break;
|
||||
case FELICA_INTERNAL_AUTH_READ_REQ:
|
||||
snprintf(exp, size, "INTERNAL AUTHENTICATE AND READ");
|
||||
break;
|
||||
case FELICA_INTERNAL_AUTH_READ_ACK:
|
||||
snprintf(exp, size, "INTERNAL AUTHENTICATE AND READ ACK");
|
||||
break;
|
||||
case FELICA_GETSTATUS_REQ:
|
||||
snprintf(exp, size, "GET STATUS");
|
||||
@@ -2057,11 +2128,17 @@ void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
|
||||
case FELICA_GETSTATUS_ACK:
|
||||
snprintf(exp, size, "GET STATUS ACK");
|
||||
break;
|
||||
case FELICA_GETPLATFORMINFO_REQ:
|
||||
snprintf(exp, size, "GET PLATFORM INFO");
|
||||
break;
|
||||
case FELICA_GETPLATFORMINFO_ACK:
|
||||
snprintf(exp, size, "GET PLATFORM INFO ACK");
|
||||
break;
|
||||
case FELICA_REQUEST_SPEC_VERSION_REQ:
|
||||
snprintf(exp, size, "REQUEST SPEC VERSION");
|
||||
break;
|
||||
case FELICA_REQUEST_SPEC_VERSION_ACK:
|
||||
snprintf(exp, size, "REQUEST SPEC ACK");
|
||||
snprintf(exp, size, "REQUEST SPEC VERSION ACK");
|
||||
break;
|
||||
case FELICA_RESET_MODE_REQ:
|
||||
snprintf(exp, size, "RESET MODE");
|
||||
@@ -2097,7 +2174,16 @@ void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
|
||||
snprintf(exp, size, "UPDATE RANDOM ID");
|
||||
break;
|
||||
case FELICA_UPDATE_RNDID_ACK:
|
||||
snprintf(exp, size, "URI ACK");
|
||||
snprintf(exp, size, "UPDATE RANDOM ID ACK");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_ID_REQ:
|
||||
snprintf(exp, size, "GET CONTAINER ID");
|
||||
break;
|
||||
case FELICA_GET_CONTAINER_ID_ACK:
|
||||
snprintf(exp, size, "GET CONTAINER ID ACK");
|
||||
break;
|
||||
case FELICA_ECHO_REQ:
|
||||
snprintf(exp, size, "ECHO");
|
||||
break;
|
||||
default :
|
||||
snprintf(exp, size, "?");
|
||||
|
||||
@@ -837,6 +837,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
|
||||
#define FELICA_REQSYSCODE_REQ 0x0c
|
||||
#define FELICA_REQSYSCODE_ACK 0x0d
|
||||
|
||||
#define FELICA_REQBLKINFO_REQ 0x0e
|
||||
#define FELICA_REQBLKINFO_ACK 0x0f
|
||||
|
||||
#define FELICA_AUTH1_REQ 0x10
|
||||
#define FELICA_AUTH1_ACK 0x11
|
||||
|
||||
@@ -852,15 +855,30 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
|
||||
#define FELICA_GET_NODE_LIST_REQ 0x1a
|
||||
#define FELICA_GET_NODE_LIST_ACK 0x1b
|
||||
|
||||
#define FELICA_REQBLKINFO_EX_REQ 0x1e
|
||||
#define FELICA_REQBLKINFO_EX_ACK 0x1f
|
||||
|
||||
#define FELICA_SET_PARAMETER_REQ 0x20
|
||||
#define FELICA_SET_PARAMETER_ACK 0x21
|
||||
|
||||
#define FELICA_GET_CONTAINER_ISSUE_INFO_REQ 0x22
|
||||
#define FELICA_GET_CONTAINER_ISSUE_INFO_ACK 0x23
|
||||
|
||||
#define FELICA_GET_AREA_INFO_REQ 0x24
|
||||
#define FELICA_GET_AREA_INFO_ACK 0x25
|
||||
|
||||
#define FELICA_GET_NODE_PROPERTY_REQ 0x28
|
||||
#define FELICA_GET_NODE_PROPERTY_ACK 0x29
|
||||
|
||||
#define FELICA_GET_CONTAINER_PROPERTY_REQ 0x2e
|
||||
#define FELICA_GET_CONTAINER_PROPERTY_ACK 0x2f
|
||||
|
||||
#define FELICA_REQSRV2_REQ 0x32
|
||||
#define FELICA_REQSRV2_ACK 0x33
|
||||
|
||||
#define FELICA_INTERNAL_AUTH_READ_REQ 0x34
|
||||
#define FELICA_INTERNAL_AUTH_READ_ACK 0x35
|
||||
|
||||
#define FELICA_GETSTATUS_REQ 0x38
|
||||
#define FELICA_GETSTATUS_ACK 0x39
|
||||
|
||||
@@ -890,6 +908,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
|
||||
#define FELICA_GET_CONTAINER_ID_REQ 0x70
|
||||
#define FELICA_GET_CONTAINER_ID_ACK 0x71
|
||||
|
||||
// Echo is a two-byte command (F000).
|
||||
#define FELICA_ECHO_REQ 0xF000
|
||||
|
||||
// FeliCa SYSTEM list
|
||||
#define SYSTEMCODE_ANY 0xffff // ANY
|
||||
#define SYSTEMCODE_FELICA_LITE 0x88b4 // FeliCa Lite
|
||||
|
||||
Reference in New Issue
Block a user