mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 13:23:51 -07:00
lf keri demod - q5 has less decoded bytes
This commit is contained in:
parent
d6e3366c43
commit
bf77599fda
1 changed files with 15 additions and 9 deletions
|
@ -28,21 +28,21 @@
|
||||||
static int CmdHelp(const char *Cmd);
|
static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
static int usage_lf_keri_clone(void) {
|
static int usage_lf_keri_clone(void) {
|
||||||
PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 tag.");
|
PrintAndLogEx(NORMAL, "clone a KERI tag to a T55x7 / T5555 (Q5) tag\n");
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf keri clone [h] <id> <Q5>");
|
PrintAndLogEx(NORMAL, "Usage: lf keri clone [h] <id> <Q5>");
|
||||||
PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t <m|i> [f <fc>] c <cardid> [Q5]");
|
PrintAndLogEx(NORMAL, "Usage extended: lf keri clone [h] t <m|i> [f <fc>] [c <cardnumber>] [Q5]");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h : This help");
|
PrintAndLogEx(NORMAL, " h : This help");
|
||||||
PrintAndLogEx(NORMAL, " <id> : Keri Internal ID");
|
PrintAndLogEx(NORMAL, " <id> : Keri Internal ID");
|
||||||
PrintAndLogEx(NORMAL, " <Q5> : specify write to Q5 (t5555 instead of t55x7)");
|
PrintAndLogEx(NORMAL, " <Q5> : specify write to Q5 (t5555 instead of t55x7)");
|
||||||
// New format
|
// New format
|
||||||
PrintAndLogEx(NORMAL, " <t> [m|i] : Type. m - MS, i - Internal ID");
|
PrintAndLogEx(NORMAL, " <t> [m|i] : Type m - MS, i - Internal ID");
|
||||||
PrintAndLogEx(NORMAL, " <f> <fc> : Facility Code");
|
PrintAndLogEx(NORMAL, " <f> <fc> : Facility Code");
|
||||||
PrintAndLogEx(NORMAL, " <c> <cn> : Card Number");
|
PrintAndLogEx(NORMAL, " <c> <cn> : Card Number");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone 112233"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone 112233"));
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone type ms fc 6 cn 12345"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t i fc 6 cn 12345"));
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t m f 6 c 12345"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf keri clone t m f 6 c 12345"));
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
|
@ -221,6 +221,7 @@ static int CmdKeriRead(const char *Cmd) {
|
||||||
|
|
||||||
static int CmdKeriClone(const char *Cmd) {
|
static int CmdKeriClone(const char *Cmd) {
|
||||||
|
|
||||||
|
bool q5 = false;
|
||||||
uint8_t cmdidx = 0;
|
uint8_t cmdidx = 0;
|
||||||
char keritype = 'i'; // default to internalid
|
char keritype = 'i'; // default to internalid
|
||||||
uint32_t fc = 0;
|
uint32_t fc = 0;
|
||||||
|
@ -268,6 +269,7 @@ static int CmdKeriClone(const char *Cmd) {
|
||||||
T5555_SET_BITRATE(128) |
|
T5555_SET_BITRATE(128) |
|
||||||
T5555_PSK_RF_2 |
|
T5555_PSK_RF_2 |
|
||||||
2 << T5555_MAXBLOCK_SHIFT;
|
2 << T5555_MAXBLOCK_SHIFT;
|
||||||
|
q5 = true;
|
||||||
cmdidx++;
|
cmdidx++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -290,7 +292,7 @@ static int CmdKeriClone(const char *Cmd) {
|
||||||
// Prepare and write to card
|
// Prepare and write to card
|
||||||
// 3 LSB is ONE
|
// 3 LSB is ONE
|
||||||
uint64_t data = ((uint64_t)internalid << 3) + 7;
|
uint64_t data = ((uint64_t)internalid << 3) + 7;
|
||||||
PrintAndLogEx(INFO, "Preparing to clone KERI to T55x7 with Internal Id: %" PRIx32, internalid);
|
PrintAndLogEx(INFO, "Preparing to clone KERI to " _YELLOW_("%s") " with Internal Id " _YELLOW_("%" PRIx32), (q5) ? "T5555/Q5" : "T55x77",internalid);
|
||||||
|
|
||||||
blocks[1] = data >> 32;
|
blocks[1] = data >> 32;
|
||||||
blocks[2] = data & 0xFFFFFFFF;
|
blocks[2] = data & 0xFFFFFFFF;
|
||||||
|
@ -370,21 +372,25 @@ int detectKeri(uint8_t *dest, size_t *size, bool *invert) {
|
||||||
uint8_t preamble[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
|
uint8_t preamble[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
|
||||||
|
|
||||||
// sanity check.
|
// sanity check.
|
||||||
if (*size < sizeof(preamble) + 100) return -1;
|
if (*size < sizeof(preamble) ) return -1;
|
||||||
|
|
||||||
size_t startIdx = 0;
|
size_t startIdx = 0;
|
||||||
|
size_t found_size = *size;
|
||||||
|
|
||||||
if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) {
|
if (!preambleSearch(dest, preamble, sizeof(preamble), &found_size, &startIdx)) {
|
||||||
|
|
||||||
|
found_size = *size;
|
||||||
// if didn't find preamble try again inverting
|
// if didn't find preamble try again inverting
|
||||||
uint8_t preamble_i[] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0};
|
uint8_t preamble_i[] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0};
|
||||||
if (!preambleSearch(DemodBuffer, preamble_i, sizeof(preamble_i), size, &startIdx))
|
if (!preambleSearch(DemodBuffer, preamble_i, sizeof(preamble_i), &found_size, &startIdx))
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
*invert ^= 1;
|
*invert ^= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*size < 64) return -3; //wrong demoded size
|
if (found_size < 64) return -3; //wrong demoded size
|
||||||
|
|
||||||
|
*size = found_size;
|
||||||
|
|
||||||
return (int)startIdx;
|
return (int)startIdx;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue