mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-09-20 15:26:13 +08:00
started to add touch nd go keygen algo from metrodroid
This commit is contained in:
parent
2a17cb5545
commit
63739b25d3
|
@ -13,6 +13,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h> // tolower
|
#include <ctype.h> // tolower
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <inttypes.h> // PRIx64 macro
|
||||||
#include "commonutil.h" // reflect...
|
#include "commonutil.h" // reflect...
|
||||||
#include "comms.h" // clearCommandBuffer
|
#include "comms.h" // clearCommandBuffer
|
||||||
#include "cmdparser.h" // command_t
|
#include "cmdparser.h" // command_t
|
||||||
|
@ -550,6 +551,13 @@ static int CmdAnalyseA(const char *Cmd) {
|
||||||
PrintAndLogEx(FAILED, "Error parsing bytes");
|
PrintAndLogEx(FAILED, "Error parsing bytes");
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t key = 0;
|
||||||
|
res = mfc_algo_touch_one(data, 0, 0, &key);
|
||||||
|
if (res == PM3_SUCCESS) {
|
||||||
|
PrintAndLogEx(SUCCESS, "KEY A | %012" PRIx64, key);
|
||||||
|
}
|
||||||
|
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
|
|
||||||
|
|
|
@ -465,7 +465,6 @@ int mfdes_kdf_input_gallagher(uint8_t *uid, uint8_t uidLen, uint8_t keyNo, uint3
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int mfc_generate4b_nuid(uint8_t *uid, uint8_t *nuid) {
|
int mfc_generate4b_nuid(uint8_t *uid, uint8_t *nuid) {
|
||||||
uint16_t crc;
|
uint16_t crc;
|
||||||
uint8_t b1, b2;
|
uint8_t b1, b2;
|
||||||
|
@ -481,6 +480,21 @@ int mfc_generate4b_nuid(uint8_t *uid, uint8_t *nuid) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mfc_algo_touch_one(uint8_t *uid, uint8_t sector, uint8_t keytype, uint64_t *key) {
|
||||||
|
if (uid == NULL) return PM3_EINVARG;
|
||||||
|
if (key == NULL) return PM3_EINVARG;
|
||||||
|
|
||||||
|
*key = (
|
||||||
|
(uint64_t)(uid[1] ^ uid[2] ^ uid[3]) << 40 |
|
||||||
|
(uint64_t)uid[1] << 32 |
|
||||||
|
(uint64_t)uid[2] << 24 |
|
||||||
|
(uint64_t)(((uid[0] + uid[1] + uid[2] + uid[3]) % 0x100) ^ uid[3]) << 16 |
|
||||||
|
(uint64_t)0 << 8 |
|
||||||
|
(uint64_t)0
|
||||||
|
);
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
// Self tests
|
// Self tests
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
|
|
|
@ -43,6 +43,8 @@ int mfc_algo_sky_all(uint8_t *uid, uint8_t *keys);
|
||||||
|
|
||||||
int mfc_generate4b_nuid(uint8_t *uid, uint8_t *nuid);
|
int mfc_generate4b_nuid(uint8_t *uid, uint8_t *nuid);
|
||||||
|
|
||||||
|
int mfc_algo_touch_one(uint8_t *uid, uint8_t sector, uint8_t keytype, uint64_t *key);
|
||||||
|
|
||||||
uint32_t lf_t55xx_white_pwdgen(uint32_t id);
|
uint32_t lf_t55xx_white_pwdgen(uint32_t id);
|
||||||
|
|
||||||
int mfdes_kdf_input_gallagher(uint8_t *uid, uint8_t uidLen, uint8_t keyNo, uint32_t aid, uint8_t *kdfInputOut, uint8_t *kdfInputLen);
|
int mfdes_kdf_input_gallagher(uint8_t *uid, uint8_t uidLen, uint8_t keyNo, uint32_t aid, uint8_t *kdfInputOut, uint8_t *kdfInputLen);
|
||||||
|
|
Loading…
Reference in a new issue