mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 21:33:47 -07:00
Merge pull request #1090 from cyberpunk-re/t55xx_config_recompute_block0
Fix issue #844 - "t55xx config" => recompute block0
This commit is contained in:
commit
8e022d3040
3 changed files with 39 additions and 4 deletions
|
@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
|
||||||
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
|
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
|
||||||
|
|
||||||
## [unreleased][unreleased]
|
## [unreleased][unreleased]
|
||||||
|
- Fix issue #844 - `lf t55xx config` => recompute block0 (@cyberpunk-re)
|
||||||
- EM4x50: changed cli parameter from w (word) to d (data) (@tharexde)
|
- EM4x50: changed cli parameter from w (word) to d (data) (@tharexde)
|
||||||
- EM4x50: new function 4x50 login: authenticate against tag (@tharexde)
|
- EM4x50: new function 4x50 login: authenticate against tag (@tharexde)
|
||||||
- EM4x50: new function 4x50 brute: guess password within a given password range (@tharexde)
|
- EM4x50: new function 4x50 brute: guess password within a given password range (@tharexde)
|
||||||
|
@ -21,7 +22,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
|
||||||
- EM4x50: switched to cliparser for all functions (@tharexde)
|
- EM4x50: switched to cliparser for all functions (@tharexde)
|
||||||
- EM4x50: stabilized and accelerated tag detection (@tharexde)
|
- EM4x50: stabilized and accelerated tag detection (@tharexde)
|
||||||
- EM4x50: removed global tag structure on device side (@tharexde)
|
- EM4x50: removed global tag structure on device side (@tharexde)
|
||||||
- Fix `hf 15 sim` - Added basic response to GET_SYSTEM_INFO and READBLOCK requests in order to fix iso15693 tag sim
|
- Fix `hf 15 sim` - Added basic response to GET_SYSTEM_INFO and READBLOCK requests in order to fix iso15693 tag sim (@cyberpunk-re)
|
||||||
- Added `mf mfu sim t 7 n <numreads>` - MFU emulation now supports automatic exit after <num> blocks read. (@cyberpunk-re)
|
- Added `mf mfu sim t 7 n <numreads>` - MFU emulation now supports automatic exit after <num> blocks read. (@cyberpunk-re)
|
||||||
- Added T55xx Guide to assist in learning how to use the T55xx chip (@mwalker33)
|
- Added T55xx Guide to assist in learning how to use the T55xx chip (@mwalker33)
|
||||||
- Fix 'hf iclass wrbl' - dealing with tags in unsecured vs secured pagemode now is correct (@iceman1001)
|
- Fix 'hf iclass wrbl' - dealing with tags in unsecured vs secured pagemode now is correct (@iceman1001)
|
||||||
|
|
|
@ -51,6 +51,7 @@ t55xx_conf_block_t config = {
|
||||||
.inverted = false,
|
.inverted = false,
|
||||||
.offset = 0x00,
|
.offset = 0x00,
|
||||||
.block0 = 0x00,
|
.block0 = 0x00,
|
||||||
|
.block0Status = notSet,
|
||||||
.Q5 = false,
|
.Q5 = false,
|
||||||
.usepwd = false,
|
.usepwd = false,
|
||||||
.downlink_mode = refFixedBit
|
.downlink_mode = refFixedBit
|
||||||
|
@ -739,6 +740,7 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
for (; i < 9; i++) {
|
for (; i < 9; i++) {
|
||||||
if (rates[i] == bitRate) {
|
if (rates[i] == bitRate) {
|
||||||
config.bitrate = i;
|
config.bitrate = i;
|
||||||
|
config.block0 = ((config.block0 & ~(0x1c0000)) | (i << 18));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -789,6 +791,7 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
PrintAndLogEx(WARNING, "Unknown modulation '%s'", modulation);
|
PrintAndLogEx(WARNING, "Unknown modulation '%s'", modulation);
|
||||||
errors = true;
|
errors = true;
|
||||||
}
|
}
|
||||||
|
config.block0 = ((config.block0 & ~(0x1f000)) | (config.modulation << 12));
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
if ((param_getchar(Cmd, cmdp + 1) == '0') || (param_getchar(Cmd, cmdp + 1) == '1')) {
|
if ((param_getchar(Cmd, cmdp + 1) == '0') || (param_getchar(Cmd, cmdp + 1) == '1')) {
|
||||||
|
@ -822,6 +825,7 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
config.ST = true;
|
config.ST = true;
|
||||||
cmdp += 1;
|
cmdp += 1;
|
||||||
}
|
}
|
||||||
|
config.block0 = ((config.block0 & ~(0x8)) | (config.ST << 3));
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
errors = param_getdec(Cmd, cmdp + 1, &downlink_mode);
|
errors = param_getdec(Cmd, cmdp + 1, &downlink_mode);
|
||||||
|
@ -841,10 +845,9 @@ static int CmdT55xxSetConfig(const char *Cmd) {
|
||||||
//Validations
|
//Validations
|
||||||
if (errors) return usage_t55xx_config();
|
if (errors) return usage_t55xx_config();
|
||||||
|
|
||||||
|
config.block0Status = userSet;
|
||||||
if (gotconf) {
|
if (gotconf) {
|
||||||
SetConfigWithBlock0Ex(block0, config.offset, config.Q5);
|
SetConfigWithBlock0Ex(block0, config.offset, config.Q5);
|
||||||
} else {
|
|
||||||
config.block0 = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return printConfiguration(config);
|
return printConfiguration(config);
|
||||||
|
@ -1335,6 +1338,7 @@ bool t55xxTryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32
|
||||||
config.pwd = pwd & 0xffffffff;
|
config.pwd = pwd & 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.block0Status = autoDetect;
|
||||||
if (print_config)
|
if (print_config)
|
||||||
printConfiguration(config);
|
printConfiguration(config);
|
||||||
|
|
||||||
|
@ -1370,6 +1374,7 @@ bool t55xxTryDetectModulationEx(uint8_t downlink_mode, bool print_config, uint32
|
||||||
PrintAndLogEx(NORMAL, "--[%d]---------------", i + 1);
|
PrintAndLogEx(NORMAL, "--[%d]---------------", i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.block0Status = autoDetect;
|
||||||
if (print_config)
|
if (print_config)
|
||||||
printConfiguration(tests[i]);
|
printConfiguration(tests[i]);
|
||||||
}
|
}
|
||||||
|
@ -1640,7 +1645,7 @@ int printConfiguration(t55xx_conf_block_t b) {
|
||||||
PrintAndLogEx(INFO, " Inverted : %s", (b.inverted) ? _GREEN_("Yes") : "No");
|
PrintAndLogEx(INFO, " Inverted : %s", (b.inverted) ? _GREEN_("Yes") : "No");
|
||||||
PrintAndLogEx(INFO, " Offset : %d", b.offset);
|
PrintAndLogEx(INFO, " Offset : %d", b.offset);
|
||||||
PrintAndLogEx(INFO, " Seq. Term. : %s", (b.ST) ? _GREEN_("Yes") : "No");
|
PrintAndLogEx(INFO, " Seq. Term. : %s", (b.ST) ? _GREEN_("Yes") : "No");
|
||||||
PrintAndLogEx(INFO, " Block0 : 0x%08X", b.block0);
|
PrintAndLogEx(INFO, " Block0 : 0x%08X %s", b.block0, GetConfigBlock0Source(b.block0Status));
|
||||||
PrintAndLogEx(INFO, " Downlink Mode : %s", GetDownlinkModeStr(b.downlink_mode));
|
PrintAndLogEx(INFO, " Downlink Mode : %s", GetDownlinkModeStr(b.downlink_mode));
|
||||||
PrintAndLogEx(INFO, " Password Set : %s", (b.usepwd) ? _RED_("Yes") : _GREEN_("No"));
|
PrintAndLogEx(INFO, " Password Set : %s", (b.usepwd) ? _RED_("Yes") : _GREEN_("No"));
|
||||||
if (b.usepwd) {
|
if (b.usepwd) {
|
||||||
|
@ -2800,6 +2805,28 @@ char *GetModelStrFromCID(uint32_t cid) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *GetConfigBlock0Source(uint8_t id) {
|
||||||
|
|
||||||
|
static char buf[40];
|
||||||
|
char *retStr = buf;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case autoDetect:
|
||||||
|
snprintf(retStr, sizeof(buf), _YELLOW_("(Auto detect)"));
|
||||||
|
break;
|
||||||
|
case userSet:
|
||||||
|
snprintf(retStr, sizeof(buf), _YELLOW_("(User set)"));
|
||||||
|
break;
|
||||||
|
case tagRead:
|
||||||
|
snprintf(retStr, sizeof(buf), _GREEN_("(Tag read)"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
snprintf(retStr, sizeof(buf), _RED_("(Unknown)"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
char *GetSelectedModulationStr(uint8_t id) {
|
char *GetSelectedModulationStr(uint8_t id) {
|
||||||
|
|
||||||
static char buf[20];
|
static char buf[20];
|
||||||
|
|
|
@ -125,6 +125,12 @@ typedef struct {
|
||||||
bool inverted;
|
bool inverted;
|
||||||
uint8_t offset;
|
uint8_t offset;
|
||||||
uint32_t block0;
|
uint32_t block0;
|
||||||
|
enum {
|
||||||
|
notSet = 0x00,
|
||||||
|
autoDetect = 0x01,
|
||||||
|
userSet = 0x02,
|
||||||
|
tagRead = 0x03,
|
||||||
|
} block0Status;
|
||||||
enum {
|
enum {
|
||||||
RF_8 = 0x00,
|
RF_8 = 0x00,
|
||||||
RF_16 = 0x01,
|
RF_16 = 0x01,
|
||||||
|
@ -166,6 +172,7 @@ char *GetSaferStr(uint32_t id);
|
||||||
char *GetQ5ModulationStr(uint32_t id);
|
char *GetQ5ModulationStr(uint32_t id);
|
||||||
char *GetModulationStr(uint32_t id, bool xmode);
|
char *GetModulationStr(uint32_t id, bool xmode);
|
||||||
char *GetModelStrFromCID(uint32_t cid);
|
char *GetModelStrFromCID(uint32_t cid);
|
||||||
|
char *GetConfigBlock0Source(uint8_t id);
|
||||||
char *GetSelectedModulationStr(uint8_t id);
|
char *GetSelectedModulationStr(uint8_t id);
|
||||||
char *GetDownlinkModeStr(uint8_t downlink_mode);
|
char *GetDownlinkModeStr(uint8_t downlink_mode);
|
||||||
void printT5xxHeader(uint8_t page);
|
void printT5xxHeader(uint8_t page);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue