This commit is contained in:
iceman1001 2025-04-13 12:25:14 +02:00
commit bc1c47e81b
7 changed files with 25 additions and 26 deletions

View file

@ -21,7 +21,7 @@
#include <inttypes.h>
// Filename to store the card info in spiff memory
// Filename to store the card info in spiff memory
#define DUMP_FILE "hf_mattyrun_dump_%02x%02x%02x%02x.bin"
// Set of standard keys to be used

View file

@ -193,9 +193,9 @@ void printHf14aConfig(void) {
);
Dbprintf(" [p] Polling loop annotation....... %s %*D",
(hf14aconfig.polling_loop_annotation.frame_length <= 0) ? _YELLOW_("disabled") : _GREEN_("enabled"),
hf14aconfig.polling_loop_annotation.frame_length,
hf14aconfig.polling_loop_annotation.frame_length,
hf14aconfig.polling_loop_annotation.frame,
""
""
);
}
@ -2713,22 +2713,22 @@ static int GetATQA(uint8_t *resp, uint16_t resp_len, uint8_t *resp_par, iso14a_p
uint32_t save_iso14a_timeout = iso14a_get_timeout();
iso14a_set_timeout(1236 / 128 + 1); // response to WUPA is expected at exactly 1236/fc. No need to wait longer.
// Create temporary polling parameters structure that might include both standard and custom frames
iso14a_polling_parameters_t temp_params;
memcpy(&temp_params, polling_parameters, sizeof(iso14a_polling_parameters_t));
// If we have a custom polling frame annotation, add it to the temporary structure
if (hf14aconfig.polling_loop_annotation.frame_length > 0) {
// Only add if we have space in the frames array
if (temp_params.frame_count < ARRAYLEN(temp_params.frames)) {
// Add the custom frame at the end of the frames array
memcpy(&temp_params.frames[temp_params.frame_count],
&hf14aconfig.polling_loop_annotation,
memcpy(&temp_params.frames[temp_params.frame_count],
&hf14aconfig.polling_loop_annotation,
sizeof(iso14a_polling_frame_t));
temp_params.frame_count++;
}
// Increase timeout if polling loop annotation is provided, as target may respond slower
if (temp_params.extra_timeout == 0) {
temp_params.extra_timeout = 250;
@ -2740,7 +2740,7 @@ static int GetATQA(uint8_t *resp, uint16_t resp_len, uint8_t *resp_par, iso14a_p
uint32_t retry_timeout = WUPA_RETRY_TIMEOUT * temp_params.frame_count + temp_params.extra_timeout;
uint32_t start_time = 0;
uint8_t current_frame = 0;
// Use the temporary polling parameters
do {
iso14a_polling_frame_t *frame_parameters = &temp_params.frames[current_frame];

View file

@ -3621,12 +3621,12 @@ TRex *trex_compile(const TRexChar *pattern, const TRexChar **error, int flags) {
exp->_first = trex_newnode(exp, OP_EXPR);
exp->_error = error;
exp->_jmpbuf = malloc(sizeof(jmp_buf));
if (exp->_jmpbuf == NULL) {
trex_free(exp);
return NULL;
}
exp->_flags = flags;
if (setjmp(*((jmp_buf *)exp->_jmpbuf)) == 0) {
int res = trex_list(exp);

View file

@ -744,4 +744,4 @@ function main()
print("\n[+] Read complete. Review output above.")
end
main()
main()

View file

@ -451,7 +451,7 @@ static int ul_comp_write(uint8_t page, const uint8_t *data, uint8_t datalen) {
uint8_t response[1] = {0xFF};
ul_send_cmd_raw(cmd, 2 + datalen, response, sizeof(response));
// ACK
if (response[0] == 0x0a) {
if (response[0] == CARD_ACK) {
return PM3_SUCCESS;
}
// NACK
@ -470,7 +470,8 @@ static int ulev1_requestAuthentication(const uint8_t *pwd, uint8_t *pack, uint16
int len = ul_send_cmd_raw(cmd, sizeof(cmd), pack, packLength);
// NACK tables different tags, but between 0-9 is a NEGATIVE response.
// ACK == 0xA
if (len == 1 && pack[0] <= 0x09) {
// should only give you PACK (4 byytes)
if (len == 1) {
return PM3_EWRONGANSWER;
}
return len;
@ -498,10 +499,7 @@ static int ulaes_requestAuthentication(const uint8_t *key, uint8_t keyno, bool s
if (WaitForResponseTimeout(CMD_HF_MIFAREULAES_AUTH, &resp, 1500) == false) {
return PM3_ETIMEOUT;
}
if (resp.status != PM3_SUCCESS) {
return resp.status;
}
return PM3_SUCCESS;
return resp.status;
}
static int ulc_authentication(const uint8_t *key, bool switch_off_field) {
@ -2048,7 +2046,7 @@ uint64_t GetHF14AMfU_Type(void) {
}
}
} else if ((card.uid[0] == 0x05) && (card.atqa[0] == 0x44)){
} else if ((card.uid[0] == 0x05) && (card.atqa[0] == 0x44)) {
// Infineon MY-D tests Exam high nibble
DropField();
uint8_t nib = (card.uid[1] & 0xf0) >> 4;

View file

@ -193,17 +193,17 @@ static int info_hf_tesla(bool parse_certs) {
}
sw = get_sw(response, resplen);
if (sw == ISO7816_OK ) {
if (sw == ISO7816_OK) {
// save CERT for later
uint8_t cert[MAX_CERT_SIZE] = {0};
memcpy(cert, response, resplen - 2);
PrintAndLogEx(INFO, "%s", sprint_hex_inrow(cert+ (cert_len_present ? 2 : 0), resplen - 2));
PrintAndLogEx(INFO, "%s", sprint_hex_inrow(cert + (cert_len_present ? 2 : 0), resplen - 2));
if (parse_certs) {
asn1_print(cert+ (cert_len_present ? 2 : 0), cert_len-2, " ");
asn1_print(cert + (cert_len_present ? 2 : 0), cert_len - 2, " ");
}
}
} else if ( sw == 0x6f17 ){
} else if (sw == 0x6f17) {
PrintAndLogEx(INFO, "CERT # %i", i);
PrintAndLogEx(INFO, "No certificate in slot %i", i);
} else {

View file

@ -7873,9 +7873,10 @@
],
"offline": true,
"options": [
"-h, --help This help"
"-h, --help This help",
"-p, --parse Parse the certificates as ASN.1"
],
"usage": "hf telsa info [-h]"
"usage": "hf telsa info [-hp]"
},
"hf tesla list": {
"command": "hf tesla list",
@ -13357,6 +13358,6 @@
"metadata": {
"commands_extracted": 767,
"extracted_by": "PM3Help2JSON v1.00",
"extracted_on": "2025-03-24T22:47:29"
"extracted_on": "2025-04-13T10:20:08"
}
}