mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
chg: 'lf t55xx info c' - renamed from "d" to "c", takes a block0 and print info.
chg: 'lf t55xx config c' - now takes a block0 and use as configuration. usage: lf t55xx config c 000880E8 lf t55xx info c 000880E8
This commit is contained in:
parent
f1307e703c
commit
af02ee871d
2 changed files with 62 additions and 11 deletions
|
@ -36,8 +36,17 @@
|
||||||
#define T55XX_DLMODE_1OF4 3 // 1 of 4
|
#define T55XX_DLMODE_1OF4 3 // 1 of 4
|
||||||
#define T55XX_LONGLEADINGREFERENCE 4 // Value to tell Write Bit to send long reference
|
#define T55XX_LONGLEADINGREFERENCE 4 // Value to tell Write Bit to send long reference
|
||||||
|
|
||||||
|
//static uint8_t bit_rates[9] = {8, 16, 32, 40, 50, 64, 100, 128, 0};
|
||||||
|
|
||||||
// Default configuration
|
// Default configuration
|
||||||
t55xx_conf_block_t config = { .modulation = DEMOD_ASK, .inverted = false, .offset = 0x00, .block0 = 0x00, .Q5 = false };
|
t55xx_conf_block_t config = {
|
||||||
|
.modulation = DEMOD_ASK,
|
||||||
|
.inverted = false,
|
||||||
|
.offset = 0x00,
|
||||||
|
.block0 = 0x00,
|
||||||
|
.Q5 = false,
|
||||||
|
.usepwd = false
|
||||||
|
};
|
||||||
|
|
||||||
t55xx_conf_block_t Get_t55xx_Config() {
|
t55xx_conf_block_t Get_t55xx_Config() {
|
||||||
return config;
|
return config;
|
||||||
|
@ -55,9 +64,10 @@ static void print_usage_t55xx_downloadlink(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage_t55xx_config() {
|
static int usage_t55xx_config() {
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf t55xx config [d <demodulation>] [i [0/1]] [o <offset>] [Q5 [0/1]] [ST [0/1]]");
|
PrintAndLogEx(NORMAL, "Usage: lf t55xx config [c <blk0>] [d <demodulation>] [i [0/1]] [o <offset>] [Q5 [0/1]] [ST [0/1]]");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h - This help");
|
PrintAndLogEx(NORMAL, " h - This help");
|
||||||
|
PrintAndLogEx(NORMAL, " c <block0> - set configuration from a block0");
|
||||||
PrintAndLogEx(NORMAL, " b <8|16|32|40|50|64|100|128> - Set bitrate");
|
PrintAndLogEx(NORMAL, " b <8|16|32|40|50|64|100|128> - Set bitrate");
|
||||||
PrintAndLogEx(NORMAL, " d <FSK|FSK1|FSK1a|FSK2|FSK2a|ASK|PSK1|PSK2|NRZ|BI|BIa> - Set demodulation FSK / ASK / PSK / NRZ / Biphase / Biphase A");
|
PrintAndLogEx(NORMAL, " d <FSK|FSK1|FSK1a|FSK2|FSK2a|ASK|PSK1|PSK2|NRZ|BI|BIa> - Set demodulation FSK / ASK / PSK / NRZ / Biphase / Biphase A");
|
||||||
PrintAndLogEx(NORMAL, " i [0/1] - Set/reset data signal inversion");
|
PrintAndLogEx(NORMAL, " i [0/1] - Set/reset data signal inversion");
|
||||||
|
@ -131,14 +141,14 @@ static int usage_t55xx_trace() {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
static int usage_t55xx_info() {
|
static int usage_t55xx_info() {
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf t55xx info [1] [r <mode>] [d <data> [q]]");
|
PrintAndLogEx(NORMAL, "Usage: lf t55xx info [1] [r <mode>] [c <blk0> [q]]");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " (default) - read data from tag.");
|
PrintAndLogEx(NORMAL, " (default) - read data from tag.");
|
||||||
PrintAndLogEx(NORMAL, " p <password> - OPTIONAL password 4bytes (8 hex symbols)");
|
PrintAndLogEx(NORMAL, " p <password> - OPTIONAL password 4bytes (8 hex symbols)");
|
||||||
PrintAndLogEx(NORMAL, " 1 - if set, use Graphbuffer instead of reading tag.");
|
PrintAndLogEx(NORMAL, " 1 - if set, use Graphbuffer instead of reading tag.");
|
||||||
PrintAndLogEx(NORMAL, " d <data> - 4 bytes of data (8 hex characters)");
|
PrintAndLogEx(NORMAL, " c <block0> - set configuration from a block0");
|
||||||
PrintAndLogEx(NORMAL, " if set, use these data instead of reading tag.");
|
PrintAndLogEx(NORMAL, " if set, use these data instead of reading tag.");
|
||||||
PrintAndLogEx(NORMAL, " q - if set, provided data are interpreted as Q5 config.");
|
PrintAndLogEx(NORMAL, " q - if set, provided data are interpreted as Q5 config.");
|
||||||
print_usage_t55xx_downloadlink();
|
print_usage_t55xx_downloadlink();
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
|
@ -312,6 +322,9 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
uint8_t rates[9] = {8, 16, 32, 40, 50, 64, 100, 128, 0};
|
uint8_t rates[9] = {8, 16, 32, 40, 50, 64, 100, 128, 0};
|
||||||
uint8_t cmdp = 0;
|
uint8_t cmdp = 0;
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
|
uint32_t block0 = 0;
|
||||||
|
bool gotconf = false;
|
||||||
|
|
||||||
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
||||||
char tmp = tolower(param_getchar(Cmd, cmdp));
|
char tmp = tolower(param_getchar(Cmd, cmdp));
|
||||||
switch (tmp) {
|
switch (tmp) {
|
||||||
|
@ -331,6 +344,11 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
}
|
}
|
||||||
cmdp += 2;
|
cmdp += 2;
|
||||||
break;
|
break;
|
||||||
|
case 'c':
|
||||||
|
block0 = param_get32ex(Cmd, cmdp + 1, 0, 16);
|
||||||
|
gotconf = true;
|
||||||
|
cmdp += 2;
|
||||||
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
param_getstr(Cmd, cmdp + 1, modulation, sizeof(modulation));
|
param_getstr(Cmd, cmdp + 1, modulation, sizeof(modulation));
|
||||||
cmdp += 2;
|
cmdp += 2;
|
||||||
|
@ -413,7 +431,36 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
//Validations
|
//Validations
|
||||||
if (errors) return usage_t55xx_config();
|
if (errors) return usage_t55xx_config();
|
||||||
|
|
||||||
config.block0 = 0;
|
if ( gotconf ) {
|
||||||
|
|
||||||
|
// Q5
|
||||||
|
|
||||||
|
|
||||||
|
// T55x7
|
||||||
|
uint32_t extend = (block0 >> (32 - 15)) & 0x01;
|
||||||
|
uint32_t dbr;
|
||||||
|
if (extend)
|
||||||
|
dbr = (block0 >> (32 - 14)) & 0x3F;
|
||||||
|
else
|
||||||
|
dbr = (block0 >> (32 - 14)) & 0x07;
|
||||||
|
|
||||||
|
uint32_t datamod = (block0 >> (32 - 20)) & 0x1F;
|
||||||
|
bool pwd = (bool)((block0 >> (32 - 28)) & 0x01);
|
||||||
|
bool sst = (bool)((block0 >> (32 - 29)) & 0x01);
|
||||||
|
bool inv = (bool)((block0 >> (32 - 31)) & 0x01);
|
||||||
|
|
||||||
|
config.modulation = datamod;
|
||||||
|
config.bitrate = dbr;
|
||||||
|
config.inverted = inv;
|
||||||
|
config.Q5 = 0;
|
||||||
|
config.ST = sst;
|
||||||
|
config.usepwd = pwd;
|
||||||
|
config.offset = 0;
|
||||||
|
config.block0 = block0;
|
||||||
|
} else {
|
||||||
|
config.block0 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return printConfiguration(config);
|
return printConfiguration(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1014,11 +1061,14 @@ static bool testQ5(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk)
|
||||||
si += 3;
|
si += 3;
|
||||||
//uint8_t ST = PackBits(si, 1, DemodBuffer); si += 1;
|
//uint8_t ST = PackBits(si, 1, DemodBuffer); si += 1;
|
||||||
if (maxBlk == 0) continue;
|
if (maxBlk == 0) continue;
|
||||||
|
|
||||||
//test modulation
|
//test modulation
|
||||||
if (!testQ5Modulation(mode, modread)) continue;
|
if (!testQ5Modulation(mode, modread)) continue;
|
||||||
if (bitRate != clk) continue;
|
if (bitRate != clk) continue;
|
||||||
|
|
||||||
*fndBitRate = convertQ5bitRate(bitRate);
|
*fndBitRate = convertQ5bitRate(bitRate);
|
||||||
if (*fndBitRate < 0) continue;
|
if (*fndBitRate < 0) continue;
|
||||||
|
|
||||||
*offset = idx;
|
*offset = idx;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1550,7 +1600,7 @@ static int CmdT55xxInfo(const char *Cmd) {
|
||||||
switch (tolower(param_getchar(Cmd, cmdp))) {
|
switch (tolower(param_getchar(Cmd, cmdp))) {
|
||||||
case 'h':
|
case 'h':
|
||||||
return usage_t55xx_info();
|
return usage_t55xx_info();
|
||||||
case 'd':
|
case 'c':
|
||||||
block0 = param_get32ex(Cmd, cmdp + 1, 0, 16);
|
block0 = param_get32ex(Cmd, cmdp + 1, 0, 16);
|
||||||
gotdata = true;
|
gotdata = true;
|
||||||
cmdp += 2;
|
cmdp += 2;
|
||||||
|
@ -1602,7 +1652,7 @@ static int CmdT55xxInfo(const char *Cmd) {
|
||||||
if (DemodBufferLen < 32 + config.offset) return PM3_ESOFT;
|
if (DemodBufferLen < 32 + config.offset) return PM3_ESOFT;
|
||||||
|
|
||||||
//PrintAndLogEx(NORMAL, "Offset+32 ==%d\n DemodLen == %d", config.offset + 32, DemodBufferLen);
|
//PrintAndLogEx(NORMAL, "Offset+32 ==%d\n DemodLen == %d", config.offset + 32, DemodBufferLen);
|
||||||
block0 = PackBits(config.offset, 32, DemodBuffer);
|
block0 = PackBits(config.offset, 32, DemodBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
|
|
@ -116,6 +116,7 @@ typedef struct {
|
||||||
} bitrate;
|
} bitrate;
|
||||||
bool Q5;
|
bool Q5;
|
||||||
bool ST;
|
bool ST;
|
||||||
|
bool usepwd;
|
||||||
} t55xx_conf_block_t;
|
} t55xx_conf_block_t;
|
||||||
|
|
||||||
t55xx_conf_block_t Get_t55xx_Config(void);
|
t55xx_conf_block_t Get_t55xx_Config(void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue