mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
100
This commit is contained in:
parent
6b951960f1
commit
789f807e83
4 changed files with 63 additions and 61 deletions
|
@ -698,11 +698,11 @@ int CmdEM4x05Dump(const char *Cmd) {
|
||||||
if (strcmp(filename, "") == 0) {
|
if (strcmp(filename, "") == 0) {
|
||||||
|
|
||||||
if (card_type == EM_4369) {
|
if (card_type == EM_4369) {
|
||||||
sprintf(filename, "lf-4369-%08X-dump", BSWAP_32(data[1]));
|
snprintf(filename, sizeof(filename), "lf-4369-%08X-dump", BSWAP_32(data[1]));
|
||||||
} else if (card_type == EM_4469) {
|
} else if (card_type == EM_4469) {
|
||||||
sprintf(filename, "lf-4469-%08X-dump", BSWAP_32(data[1]));
|
snprintf(filename, sizeof(filename), "lf-4469-%08X-dump", BSWAP_32(data[1]));
|
||||||
} else {
|
} else {
|
||||||
sprintf(filename, "lf-4x05-%08X-dump", BSWAP_32(data[1]));
|
snprintf(filename, sizeof(filename), "lf-4x05-%08X-dump", BSWAP_32(data[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1993,7 +1993,7 @@ int CmdEM4x05Sniff(const char *Cmd) {
|
||||||
bool fwd = arg_get_lit(ctx, 2);
|
bool fwd = arg_get_lit(ctx, 2);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
char cmdText[100];
|
const char* cmdText;
|
||||||
char dataText[100];
|
char dataText[100];
|
||||||
char blkAddr[4];
|
char blkAddr[4];
|
||||||
char bits[80];
|
char bits[80];
|
||||||
|
@ -2048,7 +2048,7 @@ int CmdEM4x05Sniff(const char *Cmd) {
|
||||||
if ((CycleWidth > 300) || (CycleWidth < (ZeroWidth - 5))) { // to long or too short
|
if ((CycleWidth > 300) || (CycleWidth < (ZeroWidth - 5))) { // to long or too short
|
||||||
eop = true;
|
eop = true;
|
||||||
bits[bitidx++] = '0'; // Append last zero from the last bit find
|
bits[bitidx++] = '0'; // Append last zero from the last bit find
|
||||||
cmdText[0] = 0;
|
cmdText = "";
|
||||||
|
|
||||||
// EM4305 command lengths
|
// EM4305 command lengths
|
||||||
// Login 0011 <pwd> => 4 + 45 => 49
|
// Login 0011 <pwd> => 4 + 45 => 49
|
||||||
|
@ -2074,53 +2074,53 @@ int CmdEM4x05Sniff(const char *Cmd) {
|
||||||
if ((strncmp(bits, "0011", 4) == 0) && (bitidx == 49)) {
|
if ((strncmp(bits, "0011", 4) == 0) && (bitidx == 49)) {
|
||||||
haveData = true;
|
haveData = true;
|
||||||
pwd = true;
|
pwd = true;
|
||||||
sprintf(cmdText, "Logon");
|
cmdText = "Logon";
|
||||||
sprintf(blkAddr, " ");
|
strncpy(blkAddr, " ", sizeof(blkAddr));
|
||||||
tmpValue = em4x05_Sniff_GetBlock(&bits[4], fwd);
|
tmpValue = em4x05_Sniff_GetBlock(&bits[4], fwd);
|
||||||
sprintf(dataText, "%08X", tmpValue);
|
snprintf(dataText, sizeof(dataText), "%08X", tmpValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write
|
// write
|
||||||
if ((strncmp(bits, "0101", 4) == 0) && (bitidx == 56)) {
|
if ((strncmp(bits, "0101", 4) == 0) && (bitidx == 56)) {
|
||||||
haveData = true;
|
haveData = true;
|
||||||
sprintf(cmdText, "Write");
|
cmdText = "Write";
|
||||||
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
|
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
|
||||||
sprintf(blkAddr, "%u", tmpValue);
|
snprintf(blkAddr, sizeof(blkAddr), "%u", tmpValue);
|
||||||
if (tmpValue == 2) {
|
if (tmpValue == 2) {
|
||||||
pwd = true;
|
pwd = true;
|
||||||
}
|
}
|
||||||
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
||||||
sprintf(dataText, "%08X", tmpValue);
|
snprintf(dataText, sizeof(dataText), "%08X", tmpValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// read
|
// read
|
||||||
if ((strncmp(bits, "1001", 4) == 0) && (bitidx == 11)) {
|
if ((strncmp(bits, "1001", 4) == 0) && (bitidx == 11)) {
|
||||||
haveData = true;
|
haveData = true;
|
||||||
pwd = false;
|
pwd = false;
|
||||||
sprintf(cmdText, "Read");
|
cmdText = "Read";
|
||||||
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
|
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
|
||||||
sprintf(blkAddr, "%u", tmpValue);
|
snprintf(blkAddr, sizeof(blkAddr), "%u", tmpValue);
|
||||||
sprintf(dataText, " ");
|
strncpy(dataText, " ", sizeof(dataText));
|
||||||
}
|
}
|
||||||
|
|
||||||
// protect
|
// protect
|
||||||
if ((strncmp(bits, "1100", 4) == 0) && (bitidx == 49)) {
|
if ((strncmp(bits, "1100", 4) == 0) && (bitidx == 49)) {
|
||||||
haveData = true;
|
haveData = true;
|
||||||
pwd = false;
|
pwd = false;
|
||||||
sprintf(cmdText, "Protect");
|
cmdText = "Protect";
|
||||||
sprintf(blkAddr, " ");
|
strncpy(blkAddr, " ", sizeof(blkAddr));
|
||||||
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
||||||
sprintf(dataText, "%08X", tmpValue);
|
snprintf(dataText, sizeof(dataText), "%08X", tmpValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// disable
|
// disable
|
||||||
if ((strncmp(bits, "1010", 4) == 0) && (bitidx == 49)) {
|
if ((strncmp(bits, "1010", 4) == 0) && (bitidx == 49)) {
|
||||||
haveData = true;
|
haveData = true;
|
||||||
pwd = false;
|
pwd = false;
|
||||||
sprintf(cmdText, "Disable");
|
cmdText = "Disable";
|
||||||
sprintf(blkAddr, " ");
|
strncpy(blkAddr, " ", sizeof(blkAddr));
|
||||||
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
|
||||||
sprintf(dataText, "%08X", tmpValue);
|
snprintf(dataText, sizeof(dataText), "%08X", tmpValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// bits[bitidx] = 0;
|
// bits[bitidx] = 0;
|
||||||
|
|
|
@ -50,31 +50,32 @@ static void print_result(const em4x50_word_t *words, int fwr, int lwr) {
|
||||||
|
|
||||||
for (int i = fwr; i <= lwr; i++) {
|
for (int i = fwr; i <= lwr; i++) {
|
||||||
|
|
||||||
char s[50] = {0};
|
const char* s;
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case EM4X50_DEVICE_PASSWORD:
|
case EM4X50_DEVICE_PASSWORD:
|
||||||
sprintf(s, _YELLOW_("password, write only"));
|
s = _YELLOW_("password, write only");
|
||||||
break;
|
break;
|
||||||
case EM4X50_PROTECTION:
|
case EM4X50_PROTECTION:
|
||||||
sprintf(s, _YELLOW_("protection cfg (locked)"));
|
s = _YELLOW_("protection cfg (locked)");
|
||||||
break;
|
break;
|
||||||
case EM4X50_CONTROL:
|
case EM4X50_CONTROL:
|
||||||
sprintf(s, _YELLOW_("control cfg (locked)"));
|
s = _YELLOW_("control cfg (locked)");
|
||||||
break;
|
break;
|
||||||
case EM4X50_DEVICE_SERIAL:
|
case EM4X50_DEVICE_SERIAL:
|
||||||
sprintf(s, _YELLOW_("device serial number (read only)"));
|
s = _YELLOW_("device serial number (read only)");
|
||||||
break;
|
break;
|
||||||
case EM4X50_DEVICE_ID:
|
case EM4X50_DEVICE_ID:
|
||||||
sprintf(s, _YELLOW_("device identification (read only)"));
|
s = _YELLOW_("device identification (read only)");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(s, "user data");
|
s = "user data";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char r[30] = {0};
|
char r[30] = {0};
|
||||||
for (int j = 3; j >= 0; j--) {
|
for (int j = 3; j >= 0; j--) {
|
||||||
sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j]));
|
int offset = strlen(r);
|
||||||
|
snprintf(r + offset, sizeof(r) - offset, "%02x ", reflect8(words[i].byte[j]));
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(INFO, " %2i | " _GREEN_("%s") "| %s| %s",
|
PrintAndLogEx(INFO, " %2i | " _GREEN_("%s") "| %s| %s",
|
||||||
|
@ -708,7 +709,8 @@ int CmdEM4x50Reader(const char *Cmd) {
|
||||||
char r[30];
|
char r[30];
|
||||||
memset(r, 0, sizeof(r));
|
memset(r, 0, sizeof(r));
|
||||||
for (int j = 3; j >= 0; j--) {
|
for (int j = 3; j >= 0; j--) {
|
||||||
sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j]));
|
int offset = strlen(r);
|
||||||
|
snprintf(r + offset, sizeof(r) - offset, "%02x ", reflect8(words[i].byte[j]));
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(INFO, _GREEN_(" %s") "| %s", sprint_hex(words[i].byte, 4), r);
|
PrintAndLogEx(INFO, _GREEN_(" %s") "| %s", sprint_hex(words[i].byte, 4), r);
|
||||||
|
@ -786,8 +788,7 @@ int CmdEM4x50Dump(const char *Cmd) {
|
||||||
// user supplied filename?
|
// user supplied filename?
|
||||||
if (fnLen == 0) {
|
if (fnLen == 0) {
|
||||||
PrintAndLogEx(INFO, "Using UID as filename");
|
PrintAndLogEx(INFO, "Using UID as filename");
|
||||||
char *fptr = filename;
|
char *fptr = filename + snprintf(filename, sizeof(filename), "lf-4x50-");
|
||||||
fptr += sprintf(fptr, "lf-4x50-");
|
|
||||||
FillFileNameByUID(fptr, words[EM4X50_DEVICE_ID].byte, "-dump", 4);
|
FillFileNameByUID(fptr, words[EM4X50_DEVICE_ID].byte, "-dump", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1083,8 +1084,7 @@ int CmdEM4x50Restore(const char *Cmd) {
|
||||||
|
|
||||||
if (uidLen) {
|
if (uidLen) {
|
||||||
PrintAndLogEx(INFO, "Using UID as filename");
|
PrintAndLogEx(INFO, "Using UID as filename");
|
||||||
char *fptr = filename;
|
char *fptr = filename + snprintf(filename, sizeof(filename), "lf-4x50-");
|
||||||
fptr += sprintf(fptr, "lf-4x50-");
|
|
||||||
FillFileNameByUID(fptr, uid, "-dump", 4);
|
FillFileNameByUID(fptr, uid, "-dump", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,11 +156,12 @@ static int CmdLFHitagList(const char *Cmd) {
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < len; j++) {
|
for (j = 0; j < len; j++) {
|
||||||
|
|
||||||
|
int offset = j * 4;
|
||||||
//if((parityBits >> (len - j - 1)) & 0x01) {
|
//if((parityBits >> (len - j - 1)) & 0x01) {
|
||||||
if (isResponse && (oddparity8(frame[j]) != ((parityBits >> (len - j - 1)) & 0x01))) {
|
if (isResponse && (oddparity8(frame[j]) != ((parityBits >> (len - j - 1)) & 0x01))) {
|
||||||
sprintf(line + (j * 4), "%02x! ", frame[j]);
|
snprintf(line + offset, sizeof(line) - offset, "%02x! ", frame[j]);
|
||||||
} else {
|
} else {
|
||||||
sprintf(line + (j * 4), "%02x ", frame[j]);
|
snprintf(line + offset, sizeof(line) - offset, "%02x ", frame[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,8 +854,7 @@ static int CmdLFHitag2Dump(const char *Cmd) {
|
||||||
PacketResponseNG resp;
|
PacketResponseNG resp;
|
||||||
uint8_t *data = resp.data.asBytes;
|
uint8_t *data = resp.data.asBytes;
|
||||||
if (fnlen < 1) {
|
if (fnlen < 1) {
|
||||||
char *fptr = filename;
|
char *fptr = filename + snprintf(filename, sizeof(filename), "lf-hitag-");
|
||||||
fptr += sprintf(fptr, "lf-hitag-");
|
|
||||||
FillFileNameByUID(fptr, data, "-dump", 4);
|
FillFileNameByUID(fptr, data, "-dump", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,16 +78,18 @@ void Set_t55xx_Config(t55xx_conf_block_t conf) {
|
||||||
static int CmdHelp(const char *Cmd);
|
static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
static void arg_add_t55xx_downloadlink(void *at[], uint8_t *idx, uint8_t show, uint8_t dl_mode_def) {
|
static void arg_add_t55xx_downloadlink(void *at[], uint8_t *idx, uint8_t show, uint8_t dl_mode_def) {
|
||||||
|
const size_t r_count = 56;
|
||||||
|
const size_t r_len = r_count * sizeof(uint8_t);
|
||||||
|
|
||||||
char *r0 = (char *)calloc(56, sizeof(uint8_t));
|
char *r0 = (char *)calloc(r_count, sizeof(uint8_t));
|
||||||
char *r1 = (char *)calloc(56, sizeof(uint8_t));
|
char *r1 = (char *)calloc(r_count, sizeof(uint8_t));
|
||||||
char *r2 = (char *)calloc(56, sizeof(uint8_t));
|
char *r2 = (char *)calloc(r_count, sizeof(uint8_t));
|
||||||
char *r3 = (char *)calloc(56, sizeof(uint8_t));
|
char *r3 = (char *)calloc(r_count, sizeof(uint8_t));
|
||||||
|
|
||||||
sprintf(r0, "downlink - fixed bit length %s", (dl_mode_def == 0) ? "(detected def)" : "");
|
snprintf(r0, r_len, "downlink - fixed bit length %s", (dl_mode_def == 0) ? "(detected def)" : "");
|
||||||
sprintf(r1, "downlink - long leading reference %s", (dl_mode_def == 1) ? "(detected def)" : "");
|
snprintf(r1, r_len, "downlink - long leading reference %s", (dl_mode_def == 1) ? "(detected def)" : "");
|
||||||
sprintf(r2, "downlink - leading zero %s", (dl_mode_def == 2) ? "(detected def)" : "");
|
snprintf(r2, r_len, "downlink - leading zero %s", (dl_mode_def == 2) ? "(detected def)" : "");
|
||||||
sprintf(r3, "downlink - 1 of 4 coding reference %s", (dl_mode_def == 3) ? "(detected def)" : "");
|
snprintf(r3, r_len, "downlink - 1 of 4 coding reference %s", (dl_mode_def == 3) ? "(detected def)" : "");
|
||||||
|
|
||||||
uint8_t n = *idx;
|
uint8_t n = *idx;
|
||||||
at[n++] = arg_lit0(NULL, "r0", r0);
|
at[n++] = arg_lit0(NULL, "r0", r0);
|
||||||
|
@ -96,8 +98,8 @@ static void arg_add_t55xx_downloadlink(void *at[], uint8_t *idx, uint8_t show, u
|
||||||
at[n++] = arg_lit0(NULL, "r3", r3);
|
at[n++] = arg_lit0(NULL, "r3", r3);
|
||||||
|
|
||||||
if (show == T55XX_DLMODE_ALL) {
|
if (show == T55XX_DLMODE_ALL) {
|
||||||
char *r4 = (char *)calloc(56, sizeof(uint8_t));
|
char *r4 = (char *)calloc(r_count, sizeof(uint8_t));
|
||||||
sprintf(r4, "try all downlink modes %s", (dl_mode_def == 4) ? "(def)" : "");
|
snprintf(r4, r_len, "try all downlink modes %s", (dl_mode_def == 4) ? "(def)" : "");
|
||||||
at[n++] = arg_lit0(NULL, "all", r4);
|
at[n++] = arg_lit0(NULL, "all", r4);
|
||||||
}
|
}
|
||||||
at[n++] = arg_param_end;
|
at[n++] = arg_param_end;
|
||||||
|
@ -961,7 +963,7 @@ static int CmdT55xxDetect(const char *Cmd) {
|
||||||
if (use_gb == false) {
|
if (use_gb == false) {
|
||||||
|
|
||||||
char wakecmd[20] = { 0x00 };
|
char wakecmd[20] = { 0x00 };
|
||||||
sprintf(wakecmd, "-p %08" PRIx64, password);
|
snprintf(wakecmd, sizeof(wakecmd), "-p %08" PRIx64, password);
|
||||||
|
|
||||||
bool usewake = false;
|
bool usewake = false;
|
||||||
bool try_with_pwd = false;
|
bool try_with_pwd = false;
|
||||||
|
@ -4010,7 +4012,7 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
size_t idx = 0;
|
size_t idx = 0;
|
||||||
uint32_t usedPassword, blockData;
|
uint32_t usedPassword, blockData;
|
||||||
int pulseSamples = 0, pulseIdx = 0;
|
int pulseSamples = 0, pulseIdx = 0;
|
||||||
char modeText[100];
|
const char *modeText;
|
||||||
char pwdText[100];
|
char pwdText[100];
|
||||||
char dataText[100];
|
char dataText[100];
|
||||||
int pulseBuffer[80] = { 0 }; // max should be 73 +/- - Holds Pulse widths
|
int pulseBuffer[80] = { 0 }; // max should be 73 +/- - Holds Pulse widths
|
||||||
|
@ -4036,9 +4038,9 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
int maxWidth = 0;
|
int maxWidth = 0;
|
||||||
data[0] = 0;
|
data[0] = 0;
|
||||||
bool have_data = false;
|
bool have_data = false;
|
||||||
sprintf(modeText, "Default");
|
modeText = "Default";
|
||||||
sprintf(pwdText, " ");
|
strncpy(pwdText, " ", sizeof(pwdText));
|
||||||
sprintf(dataText, " ");
|
strncpy(dataText, " ", sizeof(dataText));
|
||||||
|
|
||||||
if (pulseSamples == 0) {
|
if (pulseSamples == 0) {
|
||||||
idx++;
|
idx++;
|
||||||
|
@ -4133,7 +4135,7 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
}
|
}
|
||||||
blockData = 0;
|
blockData = 0;
|
||||||
have_data = true;
|
have_data = true;
|
||||||
sprintf(modeText, "Default Read");
|
modeText = "Default Read";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Password Write
|
// Password Write
|
||||||
|
@ -4161,9 +4163,9 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
blockAddr |= 1;
|
blockAddr |= 1;
|
||||||
}
|
}
|
||||||
have_data = true;
|
have_data = true;
|
||||||
sprintf(modeText, "Default pwd write");
|
modeText = "Default pwd write";
|
||||||
sprintf(pwdText, "%08X", usedPassword);
|
snprintf(pwdText, sizeof(pwdText), "%08X", usedPassword);
|
||||||
sprintf(dataText, "%08X", blockData);
|
snprintf(dataText, sizeof(dataText), "%08X", blockData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default Write (or password read ??)
|
// Default Write (or password read ??)
|
||||||
|
@ -4185,8 +4187,8 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
blockAddr |= 1;
|
blockAddr |= 1;
|
||||||
}
|
}
|
||||||
have_data = true;
|
have_data = true;
|
||||||
sprintf(modeText, "Default write");
|
modeText = "Default write";
|
||||||
sprintf(dataText, "%08X", blockData);
|
snprintf(dataText, sizeof(dataText), "%08X", blockData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4221,9 +4223,9 @@ static int CmdT55xxSniff(const char *Cmd) {
|
||||||
blockAddr |= 1;
|
blockAddr |= 1;
|
||||||
}
|
}
|
||||||
have_data = true;
|
have_data = true;
|
||||||
sprintf(modeText, "Leading 0 pwd write");
|
modeText = "Leading 0 pwd write";
|
||||||
sprintf(pwdText, "%08X", usedPassword);
|
snprintf(pwdText, sizeof(pwdText), "%08X", usedPassword);
|
||||||
sprintf(dataText, "%08X", blockData);
|
snprintf(dataText, sizeof(dataText), "%08X", blockData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue