Fix felica sniffing.
This commit is contained in:
@@ -55,7 +55,8 @@ static int usage_hf_felica_sniff(void) {
|
||||
PrintAndLogEx(NORMAL, " -t triggers to skip (decimal) max 9999");
|
||||
|
||||
PrintAndLogEx(NORMAL, "Examples:");
|
||||
PrintAndLogEx(NORMAL, " hf felica sniff 10 10");
|
||||
PrintAndLogEx(NORMAL, " hf felica sniff");
|
||||
PrintAndLogEx(NORMAL, " hf felica sniff -s 10 -t 10");
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -817,16 +818,17 @@ static int CmdHFFelicaSniff(const char *Cmd) {
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if(samples2skip == 0){
|
||||
if(samples2skip <= 0){
|
||||
samples2skip = 10;
|
||||
PrintAndLogEx(INFO, "Set default samples2skip: %i", samples2skip);
|
||||
}
|
||||
if(triggers2skip == 0){
|
||||
triggers2skip = 10;
|
||||
if(triggers2skip <= 0){
|
||||
triggers2skip = 5000;
|
||||
PrintAndLogEx(INFO, "Set default triggers2skip: %i", triggers2skip);
|
||||
}
|
||||
|
||||
PrintAndLogEx(INFO, "Start Sniffing now. You can stop sniffing with clicking the PM3 Button");
|
||||
PrintAndLogEx(INFO, "During sniffing, other pm3 commands may not response.");
|
||||
clearCommandBuffer();
|
||||
SendCommandMIX(CMD_HF_FELICA_SNIFF, samples2skip, triggers2skip, 0, NULL, 0);
|
||||
return PM3_SUCCESS;
|
||||
|
||||
@@ -427,199 +427,6 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
|
||||
|
||||
return tracepos;
|
||||
}
|
||||
/*
|
||||
static void printFelica(uint16_t traceLen, uint8_t *trace) {
|
||||
|
||||
PrintAndLogEx(NORMAL, "ISO18092 / FeliCa - Timings are not as accurate");
|
||||
PrintAndLogEx(NORMAL, " Gap | Src | Data | CRC | Annotation |");
|
||||
PrintAndLogEx(NORMAL, "--------|-----|-------------------------------------------------------------------------|----------|-------------------|");
|
||||
uint16_t tracepos = 0;
|
||||
|
||||
PrintAndLogEx(NORMAL, "traceLen: %i", traceLen);
|
||||
PrintAndLogEx(NORMAL, "Raw trace: %s", sprint_hex(trace, traceLen));
|
||||
while (tracepos < traceLen) {
|
||||
PrintAndLogEx(NORMAL, "tracepos: %i", tracepos);
|
||||
PrintAndLogEx(NORMAL, "traceLen: %i", traceLen);
|
||||
|
||||
if (tracepos + 3 >= traceLen) break;
|
||||
|
||||
uint16_t gap = *((uint16_t *)(trace + tracepos));
|
||||
uint8_t crc_ok = trace[tracepos + 2];
|
||||
tracepos += 3;
|
||||
|
||||
if (tracepos + 3 >= traceLen) break;
|
||||
|
||||
uint16_t len = trace[tracepos + 2];
|
||||
PrintAndLogEx(NORMAL, "LEN: %i", len);
|
||||
|
||||
//I am stripping SYNC
|
||||
tracepos += 3; //skip SYNC
|
||||
|
||||
if (tracepos + len + 1 >= traceLen) break;
|
||||
|
||||
uint8_t cmd = trace[tracepos];
|
||||
uint8_t isResponse = cmd & 1;
|
||||
|
||||
char line[32][110] = {{0}};
|
||||
for (int j = 0; j < len + 1 && j / 8 < 32; j++) {
|
||||
snprintf(line[j / 8] + ((j % 8) * 4), 110, " %02x ", trace[tracepos + j]);
|
||||
}
|
||||
char expbuf[50];
|
||||
switch (cmd) {
|
||||
case FELICA_POLL_REQ:
|
||||
snprintf(expbuf, 49, "Poll Req");
|
||||
break;
|
||||
case FELICA_POLL_ACK:
|
||||
snprintf(expbuf, 49, "Poll Resp");
|
||||
break;
|
||||
|
||||
case FELICA_REQSRV_REQ:
|
||||
snprintf(expbuf, 49, "Request Srvc Req");
|
||||
break;
|
||||
case FELICA_REQSRV_ACK:
|
||||
snprintf(expbuf, 49, "Request Srv Resp");
|
||||
break;
|
||||
|
||||
case FELICA_RDBLK_REQ:
|
||||
snprintf(expbuf, 49, "Read block(s) Req");
|
||||
break;
|
||||
case FELICA_RDBLK_ACK:
|
||||
snprintf(expbuf, 49, "Read block(s) Resp");
|
||||
break;
|
||||
|
||||
case FELICA_WRTBLK_REQ:
|
||||
snprintf(expbuf, 49, "Write block(s) Req");
|
||||
break;
|
||||
case FELICA_WRTBLK_ACK:
|
||||
snprintf(expbuf, 49, "Write block(s) Resp");
|
||||
break;
|
||||
case FELICA_SRCHSYSCODE_REQ:
|
||||
snprintf(expbuf, 49, "Search syscode Req");
|
||||
break;
|
||||
case FELICA_SRCHSYSCODE_ACK:
|
||||
snprintf(expbuf, 49, "Search syscode Resp");
|
||||
break;
|
||||
|
||||
case FELICA_REQSYSCODE_REQ:
|
||||
snprintf(expbuf, 49, "Request syscode Req");
|
||||
break;
|
||||
case FELICA_REQSYSCODE_ACK:
|
||||
snprintf(expbuf, 49, "Request syscode Resp");
|
||||
break;
|
||||
|
||||
case FELICA_AUTH1_REQ:
|
||||
snprintf(expbuf, 49, "Auth1 Req");
|
||||
break;
|
||||
case FELICA_AUTH1_ACK:
|
||||
snprintf(expbuf, 49, "Auth1 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_AUTH2_REQ:
|
||||
snprintf(expbuf, 49, "Auth2 Req");
|
||||
break;
|
||||
case FELICA_AUTH2_ACK:
|
||||
snprintf(expbuf, 49, "Auth2 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_RDSEC_REQ:
|
||||
snprintf(expbuf, 49, "Secure read Req");
|
||||
break;
|
||||
case FELICA_RDSEC_ACK:
|
||||
snprintf(expbuf, 49, "Secure read Resp");
|
||||
break;
|
||||
|
||||
case FELICA_WRTSEC_REQ:
|
||||
snprintf(expbuf, 49, "Secure write Req");
|
||||
break;
|
||||
case FELICA_WRTSEC_ACK:
|
||||
snprintf(expbuf, 49, "Secure write Resp");
|
||||
break;
|
||||
|
||||
case FELICA_REQSRV2_REQ:
|
||||
snprintf(expbuf, 49, "Request Srvc v2 Req");
|
||||
break;
|
||||
case FELICA_REQSRV2_ACK:
|
||||
snprintf(expbuf, 49, "Request Srvc v2 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_GETSTATUS_REQ:
|
||||
snprintf(expbuf, 49, "Get status Req");
|
||||
break;
|
||||
case FELICA_GETSTATUS_ACK:
|
||||
snprintf(expbuf, 49, "Get status Resp");
|
||||
break;
|
||||
|
||||
case FELICA_OSVER_REQ:
|
||||
snprintf(expbuf, 49, "Get OS Version Req");
|
||||
break;
|
||||
case FELICA_OSVER_ACK:
|
||||
snprintf(expbuf, 49, "Get OS Version Resp");
|
||||
break;
|
||||
|
||||
case FELICA_RESET_MODE_REQ:
|
||||
snprintf(expbuf, 49, "Reset mode Req");
|
||||
break;
|
||||
case FELICA_RESET_MODE_ACK:
|
||||
snprintf(expbuf, 49, "Reset mode Resp");
|
||||
break;
|
||||
|
||||
case FELICA_AUTH1V2_REQ:
|
||||
snprintf(expbuf, 49, "Auth1 v2 Req");
|
||||
break;
|
||||
case FELICA_AUTH1V2_ACK:
|
||||
snprintf(expbuf, 49, "Auth1 v2 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_AUTH2V2_REQ:
|
||||
snprintf(expbuf, 49, "Auth2 v2 Req");
|
||||
break;
|
||||
case FELICA_AUTH2V2_ACK:
|
||||
snprintf(expbuf, 49, "Auth2 v2 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_RDSECV2_REQ:
|
||||
snprintf(expbuf, 49, "Secure read v2 Req");
|
||||
break;
|
||||
case FELICA_RDSECV2_ACK:
|
||||
snprintf(expbuf, 49, "Secure read v2 Resp");
|
||||
break;
|
||||
case FELICA_WRTSECV2_REQ:
|
||||
snprintf(expbuf, 49, "Secure write v2 Req");
|
||||
break;
|
||||
case FELICA_WRTSECV2_ACK:
|
||||
snprintf(expbuf, 49, "Secure write v2 Resp");
|
||||
break;
|
||||
|
||||
case FELICA_UPDATE_RNDID_REQ:
|
||||
snprintf(expbuf, 49, "Update IDr Req");
|
||||
break;
|
||||
case FELICA_UPDATE_RNDID_ACK:
|
||||
snprintf(expbuf, 49, "Update IDr Resp");
|
||||
break;
|
||||
default:
|
||||
snprintf(expbuf, 49, "Unknown");
|
||||
break;
|
||||
}
|
||||
|
||||
int num_lines = MIN((len) / 16 + 1, 16);
|
||||
for (int j = 0; j < num_lines ; j++) {
|
||||
if (j == 0) {
|
||||
PrintAndLogEx(NORMAL, "%7d | %s |%-32s |%02x %02x %s| %s",
|
||||
gap,
|
||||
(isResponse ? "Tag" : "Rdr"),
|
||||
line[j],
|
||||
trace[tracepos + len],
|
||||
trace[tracepos + len + 1],
|
||||
(crc_ok) ? "OK" : "NG",
|
||||
expbuf);
|
||||
} else {
|
||||
PrintAndLogEx(NORMAL, " | |%-32s | | ", line[j]);
|
||||
}
|
||||
}
|
||||
tracepos += len + 1;
|
||||
}
|
||||
PrintAndLogEx(NORMAL, "");
|
||||
}*/
|
||||
|
||||
// sanity check. Don't use proxmark if it is offline and you didn't specify useTraceBuffer
|
||||
/*
|
||||
@@ -857,6 +664,7 @@ int CmdTraceList(const char *Cmd) {
|
||||
if (protocol == PROTO_HITAG)
|
||||
PrintAndLogEx(NORMAL, "Hitag2 / HitagS - Timings in ETU (8us)");
|
||||
if (protocol == FELICA)
|
||||
PrintAndLogEx(NORMAL, "ISO18092 / FeliCa - Timings are not as accurate");
|
||||
|
||||
PrintAndLogEx(NORMAL, "");
|
||||
PrintAndLogEx(NORMAL, " Start | End | Src | Data (! denotes parity error) | CRC | Annotation");
|
||||
|
||||
Reference in New Issue
Block a user