snprintf in some commands

This commit is contained in:
Doridian 2022-06-10 13:02:23 -07:00
commit fbed379691
7 changed files with 67 additions and 76 deletions

View file

@ -1967,11 +1967,11 @@ int CmdTuneSamples(const char *Cmd) {
memset(judgement, 0, sizeof(judgement)); memset(judgement, 0, sizeof(judgement));
// LF evaluation // LF evaluation
if (package->peak_v < LF_UNUSABLE_V) if (package->peak_v < LF_UNUSABLE_V)
sprintf(judgement, _RED_("UNUSABLE")); snprintf(judgement, sizeof(judgement), _RED_("UNUSABLE"));
else if (package->peak_v < LF_MARGINAL_V) else if (package->peak_v < LF_MARGINAL_V)
sprintf(judgement, _YELLOW_("MARGINAL")); snprintf(judgement, sizeof(judgement), _YELLOW_("MARGINAL"));
else else
sprintf(judgement, _GREEN_("OK")); snprintf(judgement, sizeof(judgement), _GREEN_("OK"));
PrintAndLogEx((package->peak_v < LF_UNUSABLE_V) ? WARNING : SUCCESS, "LF antenna is %s", judgement); PrintAndLogEx((package->peak_v < LF_UNUSABLE_V) ? WARNING : SUCCESS, "LF antenna is %s", judgement);
@ -1988,11 +1988,11 @@ int CmdTuneSamples(const char *Cmd) {
PrintAndLogEx(SUCCESS, "Approx. Q factor (*): %.1lf by peak voltage measurement", hfq); PrintAndLogEx(SUCCESS, "Approx. Q factor (*): %.1lf by peak voltage measurement", hfq);
} }
if (package->v_hf < HF_UNUSABLE_V) if (package->v_hf < HF_UNUSABLE_V)
sprintf(judgement, _RED_("UNUSABLE")); snprintf(judgement, sizeof(judgement), _RED_("UNUSABLE"));
else if (package->v_hf < HF_MARGINAL_V) else if (package->v_hf < HF_MARGINAL_V)
sprintf(judgement, _YELLOW_("MARGINAL")); snprintf(judgement, sizeof(judgement), _YELLOW_("MARGINAL"));
else else
sprintf(judgement, _GREEN_("OK")); snprintf(judgement, sizeof(judgement), _GREEN_("OK"));
PrintAndLogEx((package->v_hf < HF_UNUSABLE_V) ? WARNING : SUCCESS, "HF antenna is %s", judgement); PrintAndLogEx((package->v_hf < HF_UNUSABLE_V) ? WARNING : SUCCESS, "HF antenna is %s", judgement);
PrintAndLogEx(NORMAL, "\n(*) Q factor must be measured without tag on the antenna"); PrintAndLogEx(NORMAL, "\n(*) Q factor must be measured without tag on the antenna");
@ -3094,23 +3094,28 @@ static int CmdDiff(const char *Cmd) {
char ca = inA[j]; char ca = inA[j];
char cb = inB[j]; char cb = inB[j];
int dlnALen = strlen(dlnA);
int dlnBLen = strlen(dlnB);
int dlnAiiLen = strlen(dlnAii);
int dlnBiiLen = strlen(dlnBii);
if (inA[j] != inB[j]) { if (inA[j] != inB[j]) {
// diff / add colors // diff / add colors
sprintf(dlnA + strlen(dlnA), _GREEN_("%02X "), inA[j]); snprintf(dlnA + dlnALen, sizeof(dlnA) - dlnALen, _GREEN_("%02X "), inA[j]);
sprintf(dlnB + strlen(dlnB), _RED_("%02X "), inB[j]); snprintf(dlnB + dlnBLen, sizeof(dlnB) - dlnBLen, _RED_("%02X "), inB[j]);
sprintf(dlnAii + strlen(dlnAii), _GREEN_("%c"), ((ca < 32) || (ca == 127)) ? '.' : ca); snprintf(dlnAii + dlnAiiLen, sizeof(dlnAii) - dlnAiiLen, _GREEN_("%c"), ((ca < 32) || (ca == 127)) ? '.' : ca);
sprintf(dlnBii + strlen(dlnBii), _RED_("%c"), ((cb < 32) || (cb == 127)) ? '.' : cb); snprintf(dlnBii + dlnBiiLen, sizeof(dlnBii) - dlnBiiLen, _RED_("%c"), ((cb < 32) || (cb == 127)) ? '.' : cb);
} else { } else {
// normal // normal
sprintf(dlnA + strlen(dlnA), "%02X ", inA[j]); snprintf(dlnA + dlnALen, sizeof(dlnA) - dlnALen, "%02X ", inA[j]);
sprintf(dlnB + strlen(dlnB), "%02X ", inB[j]); snprintf(dlnB + dlnBLen, sizeof(dlnB) - dlnBLen, "%02X ", inB[j]);
sprintf(dlnAii + strlen(dlnAii), "%c", ((ca < 32) || (ca == 127)) ? '.' : ca); snprintf(dlnAii + dlnAiiLen, sizeof(dlnAii) - dlnAiiLen, "%c", ((ca < 32) || (ca == 127)) ? '.' : ca);
sprintf(dlnBii + strlen(dlnBii), "%c", ((cb < 32) || (cb == 127)) ? '.' : cb); snprintf(dlnBii + dlnBiiLen, sizeof(dlnBii) - dlnBiiLen, "%c", ((cb < 32) || (cb == 127)) ? '.' : cb);
} }
} }
sprintf(line, "%s%s | %s%s", dlnA, dlnAii, dlnB, dlnBii); snprintf(line, sizeof(line), "%s%s | %s%s", dlnA, dlnAii, dlnB, dlnBii);
} }
PrintAndLogEx(INFO, "%03X | %s", i, line); PrintAndLogEx(INFO, "%03X | %s", i, line);
} }

View file

@ -634,7 +634,8 @@ static int CmdHF14ACUIDs(const char *Cmd) {
} else { } else {
char uid_string[20]; char uid_string[20];
for (uint16_t m = 0; m < card->uidlen; m++) { for (uint16_t m = 0; m < card->uidlen; m++) {
sprintf(&uid_string[2 * m], "%02X", card->uid[m]); int offset = 2 * m;
snprintf(uid_string + offset, sizeof(uid_string) - offset, "%02X", card->uid[m]);
} }
PrintAndLogEx(SUCCESS, "%s", uid_string); PrintAndLogEx(SUCCESS, "%s", uid_string);
} }
@ -1377,7 +1378,8 @@ static int waitCmd(bool i_select, uint32_t timeout, bool verbose) {
bool crc = check_crc(CRC_14443_A, data, len); bool crc = check_crc(CRC_14443_A, data, len);
char s[16]; char s[16];
sprintf(s, snprintf(s,
sizeof(s),
(crc) ? _GREEN_("%02X %02X") : _RED_("%02X %02X"), (crc) ? _GREEN_("%02X %02X") : _RED_("%02X %02X"),
data[len - 2], data[len - 2],
data[len - 1] data[len - 1]

View file

@ -494,48 +494,31 @@ static int print_atqb_resp(uint8_t *data, uint8_t cid) {
} }
// get SRx chip model (from UID) // from ST Microelectronics // get SRx chip model (from UID) // from ST Microelectronics
static char *get_st_chip_model(uint8_t data) { static const char *get_st_chip_model(uint8_t data) {
static char model[20];
char *retStr = model;
memset(model, 0, sizeof(model));
switch (data) { switch (data) {
case 0x0: case 0x0:
sprintf(retStr, "SRIX4K (Special)"); return "SRIX4K (Special)";
break;
case 0x2: case 0x2:
sprintf(retStr, "SR176"); return "SR176";
break;
case 0x3: case 0x3:
sprintf(retStr, "SRIX4K"); return "SRIX4K";
break;
case 0x4: case 0x4:
sprintf(retStr, "SRIX512"); return "SRIX512";
break;
case 0x6: case 0x6:
sprintf(retStr, "SRI512"); return "SRI512";
break;
case 0x7: case 0x7:
sprintf(retStr, "SRI4K"); return "SRI4K";
break;
case 0xC: case 0xC:
sprintf(retStr, "SRT512"); return "SRT512";
break;
default : default :
sprintf(retStr, "Unknown"); return "Unknown";
break;
} }
return retStr;
} }
static char *get_st_lock_info(uint8_t model, const uint8_t *lockbytes, uint8_t blk) { #define ST_LOCK_INFO_EMPTY " "
static const char *get_st_lock_info(uint8_t model, const uint8_t *lockbytes, uint8_t blk) {
static char str[16];
char *s = str;
sprintf(s, " ");
if (blk > 15) { if (blk > 15) {
return s; return ST_LOCK_INFO_EMPTY;
} }
uint8_t mask = 0; uint8_t mask = 0;
@ -571,12 +554,12 @@ static char *get_st_lock_info(uint8_t model, const uint8_t *lockbytes, uint8_t b
mask = 0x80; mask = 0x80;
break; break;
default: default:
return s; return ST_LOCK_INFO_EMPTY;
} }
if ((lockbytes[1] & mask) == 0) { if ((lockbytes[1] & mask) == 0) {
sprintf(s, _RED_("1")); return _RED_("1");
} }
return s; return ST_LOCK_INFO_EMPTY;
} }
case 0x4: // SRIX512 case 0x4: // SRIX512
case 0x6: // SRI512 case 0x6: // SRI512
@ -642,9 +625,9 @@ static char *get_st_lock_info(uint8_t model, const uint8_t *lockbytes, uint8_t b
break; break;
} }
if ((lockbytes[b] & mask) == 0) { if ((lockbytes[b] & mask) == 0) {
sprintf(s, _RED_("1")); return _RED_("1");
} }
return s; return ST_LOCK_INFO_EMPTY;
} }
case 0x2: { // SR176 case 0x2: { // SR176
//need data[2] //need data[2]
@ -684,14 +667,14 @@ static char *get_st_lock_info(uint8_t model, const uint8_t *lockbytes, uint8_t b
} }
// iceman: this is opposite! need sample to test with. // iceman: this is opposite! need sample to test with.
if ((lockbytes[0] & mask)) { if ((lockbytes[0] & mask)) {
sprintf(s, _RED_("1")); return _RED_("1");
} }
return s; return ST_LOCK_INFO_EMPTY;
} }
default: default:
break; break;
} }
return s; return ST_LOCK_INFO_EMPTY;
} }
static uint8_t get_st_chipid(const uint8_t *uid) { static uint8_t get_st_chipid(const uint8_t *uid) {
@ -1258,7 +1241,7 @@ static int CmdHF14BWriteSri(const char *Cmd) {
char str[36]; char str[36];
memset(str, 0x00, sizeof(str)); memset(str, 0x00, sizeof(str));
sprintf(str, "--sr -c --data %02x%02x%02x%02x%02x%02x", ISO14443B_WRITE_BLK, blockno, data[0], data[1], data[2], data[3]); snprintf(str, sizeof(str), "--sr -c --data %02x%02x%02x%02x%02x%02x", ISO14443B_WRITE_BLK, blockno, data[0], data[1], data[2], data[3]);
return CmdHF14BCmdRaw(str); return CmdHF14BCmdRaw(str);
} }
@ -1439,8 +1422,7 @@ static int CmdHF14BDump(const char *Cmd) {
// save to file // save to file
if (fnlen < 1) { if (fnlen < 1) {
PrintAndLogEx(INFO, "using UID as filename"); PrintAndLogEx(INFO, "using UID as filename");
char *fptr = filename; char *fptr = filename + snprintf(filename, sizeof(filename), "hf-14b-");
fptr += sprintf(fptr, "hf-14b-");
FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen); FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen);
} }

View file

@ -1406,9 +1406,9 @@ static int CmdHF15Dump(const char *Cmd) {
for (int i = 0; i < blocknum; i++) { for (int i = 0; i < blocknum; i++) {
char lck[16] = {0}; char lck[16] = {0};
if (mem[i].lock) { if (mem[i].lock) {
sprintf(lck, _RED_("%d"), mem[i].lock); snprintf(lck, sizeof(lck), _RED_("%d"), mem[i].lock);
} else { } else {
sprintf(lck, "%d", mem[i].lock); snprintf(lck, sizeof(lck), "%d", mem[i].lock);
} }
PrintAndLogEx(INFO, "%3d/0x%02X | %s | %s | %s" PrintAndLogEx(INFO, "%3d/0x%02X | %s | %s | %s"
, i , i
@ -1624,9 +1624,9 @@ static int CmdHF15Readmulti(const char *Cmd) {
for (int i = start; i < stop; i += 5) { for (int i = start; i < stop; i += 5) {
char lck[16] = {0}; char lck[16] = {0};
if (data[i]) { if (data[i]) {
sprintf(lck, _RED_("%d"), data[i]); snprintf(lck, sizeof(lck), _RED_("%d"), data[i]);
} else { } else {
sprintf(lck, "%d", data[i]); snprintf(lck, sizeof(lck), "%d", data[i]);
} }
PrintAndLogEx(INFO, "%3d/0x%02X | %s | %s | %s", currblock, currblock, sprint_hex(data + i + 1, 4), lck, sprint_ascii(data + i + 1, 4)); PrintAndLogEx(INFO, "%3d/0x%02X | %s | %s | %s", currblock, currblock, sprint_hex(data + i + 1, 4), lck, sprint_ascii(data + i + 1, 4));
currblock++; currblock++;
@ -1746,9 +1746,9 @@ static int CmdHF15Readblock(const char *Cmd) {
// print response // print response
char lck[16] = {0}; char lck[16] = {0};
if (data[1]) { if (data[1]) {
sprintf(lck, _RED_("%d"), data[1]); snprintf(lck, sizeof(lck), _RED_("%d"), data[1]);
} else { } else {
sprintf(lck, "%d", data[1]); snprintf(lck, sizeof(lck), "%d", data[1]);
} }
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, " #%3d |lck| ascii", block); PrintAndLogEx(INFO, " #%3d |lck| ascii", block);

View file

@ -410,8 +410,7 @@ static int CmdHFCryptoRFDump(const char *Cmd) {
if (fnlen < 1) { if (fnlen < 1) {
PrintAndLogEx(INFO, "Using UID as filename"); PrintAndLogEx(INFO, "Using UID as filename");
char *fptr = filename; char *fptr = filename + snprintf(filename, sizeof(filename), "hf-cryptorf-");
fptr += sprintf(fptr, "hf-cryptorf-");
FillFileNameByUID(fptr, card.uid, "-dump", card.uidlen); FillFileNameByUID(fptr, card.uid, "-dump", card.uidlen);
} }
@ -524,8 +523,7 @@ static int CmdHFCryptoRFESave(const char *Cmd) {
// user supplied filename? // user supplied filename?
if (fnlen < 1) { if (fnlen < 1) {
PrintAndLogEx(INFO, "Using UID as filename"); PrintAndLogEx(INFO, "Using UID as filename");
char *fptr = filename; char *fptr = filename + snprintf(filename, sizeof(filename), "hf-cryptorf-");
fptr += sprintf(fptr, "hf-cryptorf-");
FillFileNameByUID(fptr, data, "-dump", 4); FillFileNameByUID(fptr, data, "-dump", 4);
} }

View file

@ -887,7 +887,7 @@ static bool emrtd_do_bac(char *documentnumber, char *dob, char *expiry, uint8_t
char expirycd = emrtd_calculate_check_digit(expiry); char expirycd = emrtd_calculate_check_digit(expiry);
char kmrz[25]; char kmrz[25];
sprintf(kmrz, "%s%i%s%i%s%i", documentnumber, documentnumbercd, dob, dobcd, expiry, expirycd); snprintf(kmrz, sizeof(kmrz), "%s%i%s%i%s%i", documentnumber, documentnumbercd, dob, dobcd, expiry, expirycd);
PrintAndLogEx(DEBUG, "kmrz.............. " _GREEN_("%s"), kmrz); PrintAndLogEx(DEBUG, "kmrz.............. " _GREEN_("%s"), kmrz);
uint8_t kseed[20] = { 0x00 }; uint8_t kseed[20] = { 0x00 };
@ -1281,16 +1281,16 @@ static void emrtd_print_issuance(char *data, bool ascii) {
static void emrtd_print_personalization_timestamp(uint8_t *data) { static void emrtd_print_personalization_timestamp(uint8_t *data) {
char str_date[0x0F] = { 0x00 }; char str_date[0x0F] = { 0x00 };
strcpy(str_date, sprint_hex_inrow(data, 0x07)); strncpy(str_date, sprint_hex_inrow(data, 0x07), sizeof(str_date) - 1);
char final_date[20] = { 0x00 }; char final_date[20] = { 0x00 };
sprintf(final_date, "%.4s-%.2s-%.2s %.2s:%.2s:%.2s", str_date, str_date + 4, str_date + 6, str_date + 8, str_date + 10, str_date + 12); snprintf(final_date, sizeof(final_date), "%.4s-%.2s-%.2s %.2s:%.2s:%.2s", str_date, str_date + 4, str_date + 6, str_date + 8, str_date + 10, str_date + 12);
PrintAndLogEx(SUCCESS, "Personalization at....: " _YELLOW_("%s"), final_date); PrintAndLogEx(SUCCESS, "Personalization at....: " _YELLOW_("%s"), final_date);
} }
static void emrtd_print_unknown_timestamp_5f85(uint8_t *data) { static void emrtd_print_unknown_timestamp_5f85(uint8_t *data) {
char final_date[20] = { 0x00 }; char final_date[20] = { 0x00 };
sprintf(final_date, "%.4s-%.2s-%.2s %.2s:%.2s:%.2s", data, data + 4, data + 6, data + 8, data + 10, data + 12); snprintf(final_date, sizeof(final_date), "%.4s-%.2s-%.2s %.2s:%.2s:%.2s", data, data + 4, data + 6, data + 8, data + 10, data + 12);
PrintAndLogEx(SUCCESS, "Unknown timestamp 5F85: " _YELLOW_("%s"), final_date); PrintAndLogEx(SUCCESS, "Unknown timestamp 5F85: " _YELLOW_("%s"), final_date);
PrintAndLogEx(HINT, "This is very likely the personalization timestamp, but it is using an undocumented tag."); PrintAndLogEx(HINT, "This is very likely the personalization timestamp, but it is using an undocumented tag.");
@ -1433,11 +1433,12 @@ static int emrtd_print_ef_dg2_info(uint8_t *data, size_t datalen) {
bool is_jpg = (data[offset] == 0xFF); bool is_jpg = (data[offset] == 0xFF);
char *fn = calloc(strlen(dg_table[EF_DG2].filename) + 4 + 1, sizeof(uint8_t)); size_t fn_len = strlen(dg_table[EF_DG2].filename) + 4 + 1;
char *fn = calloc(fn_len, sizeof(uint8_t));
if (fn == NULL) if (fn == NULL)
return PM3_EMALLOC; return PM3_EMALLOC;
sprintf(fn, "%s.%s", dg_table[EF_DG2].filename, (is_jpg) ? "jpg" : "jp2"); snprintf(fn, fn_len * sizeof(uint8_t), "%s.%s", dg_table[EF_DG2].filename, (is_jpg) ? "jpg" : "jp2");
PrintAndLogEx(DEBUG, "image filename `" _YELLOW_("%s") "`", fn); PrintAndLogEx(DEBUG, "image filename `" _YELLOW_("%s") "`", fn);
@ -1492,11 +1493,12 @@ static int emrtd_print_ef_dg5_info(uint8_t *data, size_t datalen) {
bool is_jpg = (data[offset] == 0xFF); bool is_jpg = (data[offset] == 0xFF);
char *fn = calloc(strlen(dg_table[EF_DG5].filename) + 4 + 1, sizeof(uint8_t)); size_t fn_len = strlen(dg_table[EF_DG5].filename) + 4 + 1;
char *fn = calloc(fn_len, sizeof(uint8_t));
if (fn == NULL) if (fn == NULL)
return PM3_EMALLOC; return PM3_EMALLOC;
sprintf(fn, "%s.%s", dg_table[EF_DG5].filename, (is_jpg) ? "jpg" : "jp2"); snprintf(fn, fn_len * sizeof(uint8_t), "%s.%s", dg_table[EF_DG5].filename, (is_jpg) ? "jpg" : "jp2");
PrintAndLogEx(DEBUG, "image filename `" _YELLOW_("%s") "`", fn); PrintAndLogEx(DEBUG, "image filename `" _YELLOW_("%s") "`", fn);

View file

@ -81,9 +81,11 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) {
PrintAndLogEx(FAILED, "Error in step %" PRId64 ", Return code: %" PRId64, resp.oldarg[0], resp.oldarg[1]); PrintAndLogEx(FAILED, "Error in step %" PRId64 ", Return code: %" PRId64, resp.oldarg[0], resp.oldarg[1]);
} else { } else {
size_t nonce_length = resp.oldarg[1]; size_t nonce_length = resp.oldarg[1];
size_t nonce_length_bytes = 2 * nonce_length + 1;
char *nonce = (char *) calloc(2 * nonce_length + 1, sizeof(uint8_t)); char *nonce = (char *) calloc(2 * nonce_length + 1, sizeof(uint8_t));
for (int j = 0; j < nonce_length; j++) { for (int j = 0; j < nonce_length; j++) {
sprintf(nonce + (2 * j), "%02X", resp.data.asBytes[j]); int nonce_offset = 2 * j;
snprintf(nonce + nonce_offset, (nonce_length_bytes * sizeof(uint8_t)) - nonce_offset, "%02X", resp.data.asBytes[j]);
} }
// print nonce // print nonce
PrintAndLogEx(SUCCESS, "Length: %zu, Nonce: %s", nonce_length, nonce); PrintAndLogEx(SUCCESS, "Length: %zu, Nonce: %s", nonce_length, nonce);