mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
style
This commit is contained in:
parent
6d699d66bc
commit
56525cc453
5 changed files with 104 additions and 103 deletions
|
@ -2441,8 +2441,8 @@ static void iso14a_set_ATS_times(const uint8_t *ats) {
|
||||||
|
|
||||||
static int GetATQA(uint8_t *resp, uint8_t *resp_par, bool use_ecp, bool use_magsafe) {
|
static int GetATQA(uint8_t *resp, uint8_t *resp_par, bool use_ecp, bool use_magsafe) {
|
||||||
|
|
||||||
#define ECP_DELAY 10
|
#define ECP_DELAY 10
|
||||||
#define ECP_RETRY_TIMEOUT 100
|
#define ECP_RETRY_TIMEOUT 100
|
||||||
#define WUPA_RETRY_TIMEOUT 10 // 10ms
|
#define WUPA_RETRY_TIMEOUT 10 // 10ms
|
||||||
|
|
||||||
|
|
||||||
|
@ -2492,7 +2492,7 @@ static int GetATQA(uint8_t *resp, uint8_t *resp_par, bool use_ecp, bool use_mags
|
||||||
ReaderTransmitBitsPar(wupa, 7, NULL, NULL);
|
ReaderTransmitBitsPar(wupa, 7, NULL, NULL);
|
||||||
// Receive the ATQA
|
// Receive the ATQA
|
||||||
len = ReaderReceive(resp, resp_par);
|
len = ReaderReceive(resp, resp_par);
|
||||||
|
|
||||||
first_try = false;
|
first_try = false;
|
||||||
} while (len == 0 && GetTickCountDelta(start_time) <= retry_timeout);
|
} while (len == 0 && GetTickCountDelta(start_time) <= retry_timeout);
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@ static uint16_t rx_frame_from_fpga(void) {
|
||||||
return AT91C_BASE_SSC->SSC_RHR;
|
return AT91C_BASE_SSC->SSC_RHR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -1225,8 +1225,8 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo,
|
||||||
LED_C_ON();
|
LED_C_ON();
|
||||||
|
|
||||||
// Main loop - get crypted nonces for target sector
|
// Main loop - get crypted nonces for target sector
|
||||||
for (uint8_t rtr = 0; rtr < 2; rtr++) {
|
for (uint8_t rtr = 0; rtr < 2; rtr++) {
|
||||||
|
|
||||||
if (mifare_classic_halt(pcs, cuid)) {
|
if (mifare_classic_halt(pcs, cuid)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1253,10 +1253,10 @@ void MifareStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo,
|
||||||
if (len != 4) {
|
if (len != 4) {
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
nt2 = bytes_to_num(receivedAnswer, 4);
|
nt2 = bytes_to_num(receivedAnswer, 4);
|
||||||
target_ks[0] = nt2 ^ target_nt[0];
|
target_ks[0] = nt2 ^ target_nt[0];
|
||||||
|
|
||||||
// second colleciton
|
// second colleciton
|
||||||
|
|
||||||
if (mifare_classic_halt(pcs, cuid)) {
|
if (mifare_classic_halt(pcs, cuid)) {
|
||||||
|
|
|
@ -4169,8 +4169,8 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default Write or password read ???
|
// Default Write or password read ???
|
||||||
// the most confusing command.
|
// the most confusing command.
|
||||||
// if the token is with a password - all is OK,
|
// if the token is with a password - all is OK,
|
||||||
// if not - read command with a password will lead to write the shifted password to the memory and:
|
// if not - read command with a password will lead to write the shifted password to the memory and:
|
||||||
// IF the most bit of the data is `1` ----> IT LEADS TO LOCK this block of the memory
|
// IF the most bit of the data is `1` ----> IT LEADS TO LOCK this block of the memory
|
||||||
if (dataLen == 38) {
|
if (dataLen == 38) {
|
||||||
|
|
|
@ -635,104 +635,104 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl
|
||||||
memcpy(&statelists[1].nt_enc, package->nt_b, sizeof(package->nt_b));
|
memcpy(&statelists[1].nt_enc, package->nt_b, sizeof(package->nt_b));
|
||||||
memcpy(&statelists[1].ks1, package->ks_b, sizeof(package->ks_b));
|
memcpy(&statelists[1].ks1, package->ks_b, sizeof(package->ks_b));
|
||||||
|
|
||||||
// calc keys
|
|
||||||
pthread_t thread_id[2];
|
|
||||||
|
|
||||||
// create and run worker threads
|
|
||||||
for (uint8_t i = 0; i < 2; i++)
|
|
||||||
pthread_create(thread_id + i, NULL, nested_worker_thread, &statelists[i]);
|
|
||||||
|
|
||||||
// wait for threads to terminate:
|
|
||||||
for (uint8_t i = 0; i < 2; i++)
|
|
||||||
pthread_join(thread_id[i], (void *)&statelists[i].head.slhead);
|
|
||||||
|
|
||||||
// the first 16 Bits of the cryptostate already contain part of our key.
|
|
||||||
// Create the intersection of the two lists based on these 16 Bits and
|
|
||||||
// roll back the cryptostate
|
|
||||||
p1 = p3 = statelists[0].head.slhead;
|
|
||||||
p2 = p4 = statelists[1].head.slhead;
|
|
||||||
|
|
||||||
while (p1 <= statelists[0].tail.sltail && p2 <= statelists[1].tail.sltail) {
|
|
||||||
if (Compare16Bits(p1, p2) == 0) {
|
|
||||||
|
|
||||||
struct Crypto1State savestate;
|
|
||||||
savestate = *p1;
|
|
||||||
while (Compare16Bits(p1, &savestate) == 0 && p1 <= statelists[0].tail.sltail) {
|
|
||||||
*p3 = *p1;
|
|
||||||
lfsr_rollback_word(p3, statelists[0].nt_enc ^ statelists[0].uid, 0);
|
|
||||||
p3++;
|
|
||||||
p1++;
|
|
||||||
}
|
|
||||||
savestate = *p2;
|
|
||||||
while (Compare16Bits(p2, &savestate) == 0 && p2 <= statelists[1].tail.sltail) {
|
|
||||||
*p4 = *p2;
|
|
||||||
lfsr_rollback_word(p4, statelists[1].nt_enc ^ statelists[1].uid, 0);
|
|
||||||
p4++;
|
|
||||||
p2++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
while (Compare16Bits(p1, p2) == -1) p1++;
|
|
||||||
while (Compare16Bits(p1, p2) == 1) p2++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p3->odd = -1;
|
|
||||||
p3->even = -1;
|
|
||||||
p4->odd = -1;
|
|
||||||
p4->even = -1;
|
|
||||||
statelists[0].len = p3 - statelists[0].head.slhead;
|
|
||||||
statelists[1].len = p4 - statelists[1].head.slhead;
|
|
||||||
statelists[0].tail.sltail = --p3;
|
|
||||||
statelists[1].tail.sltail = --p4;
|
|
||||||
|
|
||||||
// the statelists now contain possible keys. The key we are searching for must be in the
|
|
||||||
// intersection of both lists
|
|
||||||
qsort(statelists[0].head.keyhead, statelists[0].len, sizeof(uint64_t), compare_uint64);
|
|
||||||
qsort(statelists[1].head.keyhead, statelists[1].len, sizeof(uint64_t), compare_uint64);
|
|
||||||
// Create the intersection
|
|
||||||
statelists[0].len = intersection(statelists[0].head.keyhead, statelists[1].head.keyhead);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
memcpy(&uid, package->cuid, sizeof(package->cuid));
|
|
||||||
|
|
||||||
statelists[0].blockNo = package->block;
|
|
||||||
statelists[0].keyType = package->keytype;
|
|
||||||
statelists[0].uid = uid;
|
|
||||||
|
|
||||||
memcpy(&statelists[0].nt_enc, package->nt, sizeof(package->nt));
|
|
||||||
memcpy(&statelists[0].ks1, package->ks, sizeof(package->ks));
|
|
||||||
|
|
||||||
// calc keys
|
// calc keys
|
||||||
pthread_t t;
|
pthread_t thread_id[2];
|
||||||
|
|
||||||
// create and run worker thread
|
// create and run worker threads
|
||||||
pthread_create(&t, NULL, nested_worker_thread, &statelists[0]);
|
for (uint8_t i = 0; i < 2; i++)
|
||||||
|
pthread_create(thread_id + i, NULL, nested_worker_thread, &statelists[i]);
|
||||||
|
|
||||||
// wait for thread to terminate:
|
// wait for threads to terminate:
|
||||||
pthread_join(t, (void *)&statelists[0].head.slhead);
|
for (uint8_t i = 0; i < 2; i++)
|
||||||
|
pthread_join(thread_id[i], (void *)&statelists[i].head.slhead);
|
||||||
|
|
||||||
// the first 16 Bits of the cryptostate already contain part of our key.
|
// the first 16 Bits of the cryptostate already contain part of our key.
|
||||||
|
// Create the intersection of the two lists based on these 16 Bits and
|
||||||
|
// roll back the cryptostate
|
||||||
p1 = p3 = statelists[0].head.slhead;
|
p1 = p3 = statelists[0].head.slhead;
|
||||||
|
p2 = p4 = statelists[1].head.slhead;
|
||||||
|
|
||||||
// create key candidates.
|
while (p1 <= statelists[0].tail.sltail && p2 <= statelists[1].tail.sltail) {
|
||||||
while (p1 <= statelists[0].tail.sltail) {
|
if (Compare16Bits(p1, p2) == 0) {
|
||||||
struct Crypto1State savestate;
|
|
||||||
savestate = *p1;
|
struct Crypto1State savestate;
|
||||||
while (Compare16Bits(p1, &savestate) == 0 && p1 <= statelists[0].tail.sltail) {
|
savestate = *p1;
|
||||||
*p3 = *p1;
|
while (Compare16Bits(p1, &savestate) == 0 && p1 <= statelists[0].tail.sltail) {
|
||||||
lfsr_rollback_word(p3, statelists[0].nt_enc ^ statelists[0].uid, 0);
|
*p3 = *p1;
|
||||||
p3++;
|
lfsr_rollback_word(p3, statelists[0].nt_enc ^ statelists[0].uid, 0);
|
||||||
p1++;
|
p3++;
|
||||||
|
p1++;
|
||||||
|
}
|
||||||
|
savestate = *p2;
|
||||||
|
while (Compare16Bits(p2, &savestate) == 0 && p2 <= statelists[1].tail.sltail) {
|
||||||
|
*p4 = *p2;
|
||||||
|
lfsr_rollback_word(p4, statelists[1].nt_enc ^ statelists[1].uid, 0);
|
||||||
|
p4++;
|
||||||
|
p2++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (Compare16Bits(p1, p2) == -1) p1++;
|
||||||
|
while (Compare16Bits(p1, p2) == 1) p2++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p3->odd = -1;
|
p3->odd = -1;
|
||||||
p3->even = -1;
|
p3->even = -1;
|
||||||
|
p4->odd = -1;
|
||||||
|
p4->even = -1;
|
||||||
statelists[0].len = p3 - statelists[0].head.slhead;
|
statelists[0].len = p3 - statelists[0].head.slhead;
|
||||||
|
statelists[1].len = p4 - statelists[1].head.slhead;
|
||||||
statelists[0].tail.sltail = --p3;
|
statelists[0].tail.sltail = --p3;
|
||||||
*/
|
statelists[1].tail.sltail = --p4;
|
||||||
|
|
||||||
|
// the statelists now contain possible keys. The key we are searching for must be in the
|
||||||
|
// intersection of both lists
|
||||||
|
qsort(statelists[0].head.keyhead, statelists[0].len, sizeof(uint64_t), compare_uint64);
|
||||||
|
qsort(statelists[1].head.keyhead, statelists[1].len, sizeof(uint64_t), compare_uint64);
|
||||||
|
// Create the intersection
|
||||||
|
statelists[0].len = intersection(statelists[0].head.keyhead, statelists[1].head.keyhead);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
memcpy(&uid, package->cuid, sizeof(package->cuid));
|
||||||
|
|
||||||
|
statelists[0].blockNo = package->block;
|
||||||
|
statelists[0].keyType = package->keytype;
|
||||||
|
statelists[0].uid = uid;
|
||||||
|
|
||||||
|
memcpy(&statelists[0].nt_enc, package->nt, sizeof(package->nt));
|
||||||
|
memcpy(&statelists[0].ks1, package->ks, sizeof(package->ks));
|
||||||
|
|
||||||
|
// calc keys
|
||||||
|
pthread_t t;
|
||||||
|
|
||||||
|
// create and run worker thread
|
||||||
|
pthread_create(&t, NULL, nested_worker_thread, &statelists[0]);
|
||||||
|
|
||||||
|
// wait for thread to terminate:
|
||||||
|
pthread_join(t, (void *)&statelists[0].head.slhead);
|
||||||
|
|
||||||
|
// the first 16 Bits of the cryptostate already contain part of our key.
|
||||||
|
p1 = p3 = statelists[0].head.slhead;
|
||||||
|
|
||||||
|
// create key candidates.
|
||||||
|
while (p1 <= statelists[0].tail.sltail) {
|
||||||
|
struct Crypto1State savestate;
|
||||||
|
savestate = *p1;
|
||||||
|
while (Compare16Bits(p1, &savestate) == 0 && p1 <= statelists[0].tail.sltail) {
|
||||||
|
*p3 = *p1;
|
||||||
|
lfsr_rollback_word(p3, statelists[0].nt_enc ^ statelists[0].uid, 0);
|
||||||
|
p3++;
|
||||||
|
p1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p3->odd = -1;
|
||||||
|
p3->even = -1;
|
||||||
|
statelists[0].len = p3 - statelists[0].head.slhead;
|
||||||
|
statelists[0].tail.sltail = --p3;
|
||||||
|
*/
|
||||||
|
|
||||||
uint32_t keycnt = statelists[0].len;
|
uint32_t keycnt = statelists[0].len;
|
||||||
if (keycnt == 0) goto out;
|
if (keycnt == 0) goto out;
|
||||||
|
@ -753,16 +753,16 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl
|
||||||
|
|
||||||
// used for mfCheckKeys_file, which needs a header
|
// used for mfCheckKeys_file, which needs a header
|
||||||
mem = calloc((maxkeysinblock * 6) + 5, sizeof(uint8_t));
|
mem = calloc((maxkeysinblock * 6) + 5, sizeof(uint8_t));
|
||||||
if (mem == NULL) {
|
if (mem == NULL) {
|
||||||
free(statelists[0].head.slhead);
|
free(statelists[0].head.slhead);
|
||||||
return PM3_EMALLOC;
|
return PM3_EMALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
mem[0] = statelists[0].keyType;
|
mem[0] = statelists[0].keyType;
|
||||||
mem[1] = statelists[0].blockNo;
|
mem[1] = statelists[0].blockNo;
|
||||||
mem[2] = 1;
|
mem[2] = 1;
|
||||||
mem[3] = ((max_keys_chunk >> 8) & 0xFF);
|
mem[3] = ((max_keys_chunk >> 8) & 0xFF);
|
||||||
mem[4] = (max_keys_chunk & 0xFF);
|
mem[4] = (max_keys_chunk & 0xFF);
|
||||||
|
|
||||||
p_keyblock = mem + 5;
|
p_keyblock = mem + 5;
|
||||||
} else {
|
} else {
|
||||||
|
@ -854,7 +854,7 @@ out:
|
||||||
);
|
);
|
||||||
|
|
||||||
free(statelists[0].head.slhead);
|
free(statelists[0].head.slhead);
|
||||||
free(statelists[1].head.slhead);
|
free(statelists[1].head.slhead);
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue