mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
add white cloner pwdgen algo (thanks to @paleopterix!)
This commit is contained in:
parent
a32fbd21bd
commit
1aa9600048
4 changed files with 35 additions and 1 deletions
|
@ -142,3 +142,15 @@ void htole24(uint32_t val, uint8_t data[3]) {
|
||||||
data[2] = (uint8_t)(val >> 16);
|
data[2] = (uint8_t)(val >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ROL on u32
|
||||||
|
uint32_t rotl(uint32_t a, uint8_t n) {
|
||||||
|
n &= 31;
|
||||||
|
return (a << n) | (a >> (32 - n));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ROR on u32
|
||||||
|
uint32_t rotr(uint32_t a, uint8_t n) {
|
||||||
|
n &= 31;
|
||||||
|
return (a >> n) | (a << (32 - n));
|
||||||
|
}
|
|
@ -51,9 +51,13 @@ uint16_t reflect16(uint16_t b); // dedicated 16bit reversal
|
||||||
void num_to_bytes(uint64_t n, size_t len, uint8_t *dest);
|
void num_to_bytes(uint64_t n, size_t len, uint8_t *dest);
|
||||||
uint64_t bytes_to_num(uint8_t *src, size_t len);
|
uint64_t bytes_to_num(uint8_t *src, size_t len);
|
||||||
|
|
||||||
|
// rotate left byte array
|
||||||
void rol(uint8_t *data, const size_t len);
|
void rol(uint8_t *data, const size_t len);
|
||||||
void lsl(uint8_t *data, size_t len);
|
void lsl(uint8_t *data, size_t len);
|
||||||
uint32_t le24toh(uint8_t data[3]);
|
uint32_t le24toh(uint8_t data[3]);
|
||||||
void htole24(uint32_t val, uint8_t data[3]);
|
void htole24(uint32_t val, uint8_t data[3]);
|
||||||
|
|
||||||
|
// rol on a u32
|
||||||
|
uint32_t rotl(uint32_t a, uint8_t n);
|
||||||
|
uint32_t rotr(uint32_t a, uint8_t n);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -414,12 +414,21 @@ int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LF T55x7 White gun cloner algo
|
||||||
|
uint32_t lf_t55xx_white_pwdgen(uint32_t id) {
|
||||||
|
uint32_t r1 = rotl(id & 0x000000ec, 8);
|
||||||
|
uint32_t r2 = rotl(id & 0x86000000, 16);
|
||||||
|
uint32_t pwd = 0x10303;
|
||||||
|
pwd += ((id & 0x86ee00ec) ^ r1 ^ r2 );
|
||||||
|
return pwd;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
// Self tests
|
// Self tests
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
int generator_selftest(void) {
|
int generator_selftest(void) {
|
||||||
|
|
||||||
#define NUM_OF_TEST 5
|
#define NUM_OF_TEST 6
|
||||||
|
|
||||||
PrintAndLogEx(INFO, "PWD / KEY generator selftest");
|
PrintAndLogEx(INFO, "PWD / KEY generator selftest");
|
||||||
PrintAndLogEx(INFO, "----------------------------");
|
PrintAndLogEx(INFO, "----------------------------");
|
||||||
|
@ -468,6 +477,13 @@ int generator_selftest(void) {
|
||||||
testresult++;
|
testresult++;
|
||||||
PrintAndLogEx(success ? SUCCESS : WARNING, "UID | %s | %"PRIx64" - %s", sprint_hex(uid6, 4), key6, success ? "OK" : "->82C7E64BC565<--");
|
PrintAndLogEx(success ? SUCCESS : WARNING, "UID | %s | %"PRIx64" - %s", sprint_hex(uid6, 4), key6, success ? "OK" : "->82C7E64BC565<--");
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t lf_id = lf_t55xx_white_pwdgen(0x00000080);
|
||||||
|
success = (lf_id = 0x00018383);
|
||||||
|
if (success)
|
||||||
|
testresult++;
|
||||||
|
PrintAndLogEx(success ? SUCCESS : WARNING, "ID | 0x00000080 | %08"PRIx32 " - %s", lf_id, success ? "OK" : "->00018383<--");
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "------------------- Selftest %s", (testresult == NUM_OF_TEST) ? "OK" : "fail");
|
PrintAndLogEx(SUCCESS, "------------------- Selftest %s", (testresult == NUM_OF_TEST) ? "OK" : "fail");
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,5 +41,7 @@ int mfc_algo_di_all(uint8_t *uid, uint8_t *keys);
|
||||||
int mfc_algo_sky_one(uint8_t *uid, uint8_t sector, uint8_t keytype, uint64_t *key);
|
int mfc_algo_sky_one(uint8_t *uid, uint8_t sector, uint8_t keytype, uint64_t *key);
|
||||||
int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys);
|
int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys);
|
||||||
|
|
||||||
|
uint32_t lf_t55xx_white_pwdgen(uint32_t id);
|
||||||
|
|
||||||
int generator_selftest(void);
|
int generator_selftest(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue