This commit is contained in:
iceman1001 2021-06-24 19:27:12 +02:00
commit 3b9da365a0
3 changed files with 55 additions and 55 deletions

View file

@ -100,8 +100,6 @@ static void print_info_result(uint8_t *data, bool verbose) {
PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " ---------------------------"); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " ---------------------------");
// data section // data section
PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, _YELLOW_("EM4x50 data:"));
if (verbose) { if (verbose) {
print_result(words, 0, EM4X50_NO_WORDS - 1); print_result(words, 0, EM4X50_NO_WORDS - 1);
} else { } else {
@ -112,16 +110,16 @@ static void print_info_result(uint8_t *data, bool verbose) {
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, "---- " _CYAN_("Configuration") " ----"); PrintAndLogEx(INFO, "---- " _CYAN_("Configuration") " ----");
PrintAndLogEx(INFO, "first word read %3i", fwr); PrintAndLogEx(INFO, "first word read.... " _YELLOW_("%i"), fwr);
PrintAndLogEx(INFO, "last word read %3i", lwr); PrintAndLogEx(INFO, "last word read..... " _YELLOW_("%i"), lwr);
PrintAndLogEx(INFO, "password check %3s", (bpwc) ? _RED_("on") : _GREEN_("off")); PrintAndLogEx(INFO, "password check..... %s", (bpwc) ? _RED_("on") : _GREEN_("off"));
PrintAndLogEx(INFO, "read after write %3s", (braw) ? "on" : "off"); PrintAndLogEx(INFO, "read after write... %s", (braw) ? "on" : "off");
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, "--------- " _CYAN_("Protection") " ---------"); PrintAndLogEx(INFO, "--------- " _CYAN_("Protection") " ------------");
PrintAndLogEx(INFO, "first word read protected %3i", fwrp); PrintAndLogEx(INFO, "first word read protected.... %i", fwrp);
PrintAndLogEx(INFO, "last word read protected %3i", lwrp); PrintAndLogEx(INFO, "last word read protected..... %i", lwrp);
PrintAndLogEx(INFO, "first word write inhibited %3i", fwwi); PrintAndLogEx(INFO, "first word write inhibited... %i", fwwi);
PrintAndLogEx(INFO, "last word write inhibited %3i", lwwi); PrintAndLogEx(INFO, "last word write inhibited.... %i", lwwi);
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, "zero values may indicate read protection"); PrintAndLogEx(INFO, "zero values may indicate read protection");
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
@ -364,9 +362,9 @@ int CmdEM4x50Login(const char *Cmd) {
int CmdEM4x50Brute(const char *Cmd) { int CmdEM4x50Brute(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "lf em 4x50 brute", CLIParserInit(&ctx, "lf em 4x50 brute",
"Tries to bruteforce the password of a EM4x50.\n" "Tries to bruteforce the password of a EM4x50 card.\n"
"Function can be stopped by pressing pm3 button.", "Function can be stopped by pressing pm3 button.",
"lf em 4x50 brute --first 12330000 --last 12340000 -> tries pwds from 0x12330000 to 0x1234000000\n" "lf em 4x50 brute --first 12330000 --last 12340000 -> tries pwds from 0x12330000 to 0x1234000000\n"
); );
void *argtable[] = { void *argtable[] = {
@ -435,7 +433,7 @@ int CmdEM4x50Brute(const char *Cmd) {
int CmdEM4x50Chk(const char *Cmd) { int CmdEM4x50Chk(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "lf em 4x50 chk", CLIParserInit(&ctx, "lf em 4x50 chk",
"Dictionary attack against EM4x50.", "Run dictionary key recovery against EM4x50 card.",
"lf em 4x50 chk -> uses T55xx default dictionary\n" "lf em 4x50 chk -> uses T55xx default dictionary\n"
"lf em 4x50 chk -f my.dic" "lf em 4x50 chk -f my.dic"
); );
@ -639,8 +637,8 @@ int CmdEM4x50Info(const char *Cmd) {
CLIParserInit(&ctx, "lf em 4x50 info", CLIParserInit(&ctx, "lf em 4x50 info",
"Tag information EM4x50.", "Tag information EM4x50.",
"lf em 4x50 info\n" "lf em 4x50 info\n"
"lf em 4x50 info -v -> show data section\n" "lf em 4x50 info -v -> show data section\n"
"lf em 4x50 info -p 12345678 -> uses pwd 0x12345678\n" "lf em 4x50 info -p 12345678 -> uses pwd 0x12345678\n"
); );
void *argtable[] = { void *argtable[] = {
@ -908,9 +906,9 @@ int CmdEM4x50Write(const char *Cmd) {
// envokes changing the password of EM4x50 tag // envokes changing the password of EM4x50 tag
int CmdEM4x50WritePwd(const char *Cmd) { int CmdEM4x50WritePwd(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "lf em 4x50 writepwd", CLIParserInit(&ctx, "lf em 4x50 wrpwd",
"Writes EM4x50 password.", "Writes EM4x50 password.",
"lf em 4x50 writepwd -p 4f22e7ff -n 12345678" "lf em 4x50 wrpwd -p 4f22e7ff -n 12345678"
); );
void *argtable[] = { void *argtable[] = {
@ -1210,21 +1208,23 @@ int CmdEM4x50Sim(const char *Cmd) {
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"brute", CmdEM4x50Brute, IfPm3EM4x50, "guess password of EM4x50"}, {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("operations") " ---------------------"},
{"chk", CmdEM4x50Chk, IfPm3EM4x50, "check passwords from dictionary"}, {"brute", CmdEM4x50Brute, IfPm3EM4x50, "Simple bruteforce attack to find password"},
{"dump", CmdEM4x50Dump, IfPm3EM4x50, "dump EM4x50 tag"}, {"chk", CmdEM4x50Chk, IfPm3EM4x50, "Check passwords from dictionary"},
{"info", CmdEM4x50Info, IfPm3EM4x50, "tag information EM4x50"}, {"dump", CmdEM4x50Dump, IfPm3EM4x50, "Dump EM4x50 tag"},
{"login", CmdEM4x50Login, IfPm3EM4x50, "login into EM4x50"}, {"info", CmdEM4x50Info, IfPm3EM4x50, "Tag information"},
{"rdbl", CmdEM4x50Read, IfPm3EM4x50, "read word data from EM4x50"}, {"login", CmdEM4x50Login, IfPm3EM4x50, "Login into EM4x50 tag"},
{"wrbl", CmdEM4x50Write, IfPm3EM4x50, "write word data to EM4x50"}, {"rdbl", CmdEM4x50Read, IfPm3EM4x50, "Read EM4x50 word data"},
{"writepwd", CmdEM4x50WritePwd, IfPm3EM4x50, "change password of EM4x50"}, {"reader", CmdEM4x50Reader, IfPm3EM4x50, "Show standard read mode data"},
{"wipe", CmdEM4x50Wipe, IfPm3EM4x50, "wipe EM4x50 tag"}, {"restore", CmdEM4x50Restore, IfPm3EM4x50, "Restore EM4x50 dump to tag"},
{"reader", CmdEM4x50Reader, IfPm3EM4x50, "show standard read mode data of EM4x50"}, {"wrbl", CmdEM4x50Write, IfPm3EM4x50, "Write EM4x50 word data"},
{"restore", CmdEM4x50Restore, IfPm3EM4x50, "restore EM4x50 dump to tag"}, {"wrpwd", CmdEM4x50WritePwd, IfPm3EM4x50, "Change EM4x50 password"},
{"sim", CmdEM4x50Sim, IfPm3EM4x50, "simulate EM4x50 tag"}, {"wipe", CmdEM4x50Wipe, IfPm3EM4x50, "Wipe EM4x50 tag"},
{"eload", CmdEM4x50ELoad, IfPm3EM4x50, "upload dump of EM4x50 to emulator memory"}, {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("simulation") " ---------------------"},
{"esave", CmdEM4x50ESave, IfPm3EM4x50, "save emulator memory to file"}, {"eload", CmdEM4x50ELoad, IfPm3EM4x50, "Upload EM4x50 dump to emulator memory"},
{"eview", CmdEM4x50EView, IfPm3EM4x50, "view EM4x50 content in emulator memory"}, {"esave", CmdEM4x50ESave, IfPm3EM4x50, "Save emulator memory to file"},
{"eview", CmdEM4x50EView, IfPm3EM4x50, "View EM4x50 content in emulator memory"},
{"sim", CmdEM4x50Sim, IfPm3EM4x50, "Simulate EM4x50 tag"},
{NULL, NULL, NULL, NULL} {NULL, NULL, NULL, NULL}
}; };

View file

@ -5778,7 +5778,7 @@
}, },
"lf em 4x50 chk": { "lf em 4x50 chk": {
"command": "lf em 4x50 chk", "command": "lf em 4x50 chk",
"description": "dictionary attack against em4x50.", "description": "run dictionary key recovery against em4x50 card.",
"notes": [ "notes": [
"lf em 4x50 chk -> uses t55xx default dictionary", "lf em 4x50 chk -> uses t55xx default dictionary",
"lf em 4x50 chk -f my.dic" "lf em 4x50 chk -f my.dic"
@ -5848,7 +5848,7 @@
}, },
"lf em 4x50 help": { "lf em 4x50 help": {
"command": "lf em 4x50 help", "command": "lf em 4x50 help",
"description": "help this help --------------------------------------------------------------------------------------- lf em 4x50 brute available offline: no tries to bruteforce the password of a em4x50. function can be stopped by pressing pm3 button.", "description": "help this help ----------- --------------------- operations --------------------- ----------- --------------------- simulation --------------------- --------------------------------------------------------------------------------------- lf em 4x50 brute available offline: no tries to bruteforce the password of a em4x50 card. function can be stopped by pressing pm3 button.",
"notes": [ "notes": [
"lf em 4x50 brute --first 12330000 --last 12340000 -> tries pwds from 0x12330000 to 0x1234000000" "lf em 4x50 brute --first 12330000 --last 12340000 -> tries pwds from 0x12330000 to 0x1234000000"
], ],
@ -5979,11 +5979,11 @@
], ],
"usage": "lf em 4x50 wrbl [-h] -b <dec> -d <hex> [-p <hex>]" "usage": "lf em 4x50 wrbl [-h] -b <dec> -d <hex> [-p <hex>]"
}, },
"lf em 4x50 writepwd": { "lf em 4x50 wrpwd": {
"command": "lf em 4x50 writepwd", "command": "lf em 4x50 wrpwd",
"description": "writes em4x50 password.", "description": "writes em4x50 password.",
"notes": [ "notes": [
"lf em 4x50 writepwd -p 4f22e7ff -n 12345678" "lf em 4x50 wrpwd -p 4f22e7ff -n 12345678"
], ],
"offline": false, "offline": false,
"options": [ "options": [
@ -5991,7 +5991,7 @@
"-p, --pwd <hex> password, 4 hex bytes, lsb", "-p, --pwd <hex> password, 4 hex bytes, lsb",
"-n, --new <hex> new password, 4 hex bytes, lsb" "-n, --new <hex> new password, 4 hex bytes, lsb"
], ],
"usage": "lf em 4x50 writepwd [-h] -p <hex> -n <hex>" "usage": "lf em 4x50 wrpwd [-h] -p <hex> -n <hex>"
}, },
"lf em 4x70 auth": { "lf em 4x70 auth": {
"command": "lf em 4x70 auth", "command": "lf em 4x70 auth",
@ -9199,6 +9199,6 @@
"metadata": { "metadata": {
"commands_extracted": 571, "commands_extracted": 571,
"extracted_by": "PM3Help2JSON v1.00", "extracted_by": "PM3Help2JSON v1.00",
"extracted_on": "2021-06-24T16:45:08" "extracted_on": "2021-06-24T17:24:39"
} }
} }

View file

@ -724,21 +724,21 @@ Check column "offline" for their availability.
|command |offline |description |command |offline |description
|------- |------- |----------- |------- |------- |-----------
|`lf em 4x50 help `|Y |`This help` |`lf em 4x50 help `|Y |`This help`
|`lf em 4x50 brute `|N |`guess password of EM4x50` |`lf em 4x50 brute `|N |`Simple bruteforce attack to find password`
|`lf em 4x50 chk `|N |`check passwords from dictionary` |`lf em 4x50 chk `|N |`Check passwords from dictionary`
|`lf em 4x50 dump `|N |`dump EM4x50 tag` |`lf em 4x50 dump `|N |`Dump EM4x50 tag`
|`lf em 4x50 info `|N |`tag information EM4x50` |`lf em 4x50 info `|N |`Tag information`
|`lf em 4x50 login `|N |`login into EM4x50` |`lf em 4x50 login `|N |`Login into EM4x50 tag`
|`lf em 4x50 rdbl `|N |`read word data from EM4x50` |`lf em 4x50 rdbl `|N |`Read EM4x50 word data`
|`lf em 4x50 wrbl `|N |`write word data to EM4x50` |`lf em 4x50 reader `|N |`Show standard read mode data`
|`lf em 4x50 writepwd `|N |`change password of EM4x50` |`lf em 4x50 restore `|N |`Restore EM4x50 dump to tag`
|`lf em 4x50 wipe `|N |`wipe EM4x50 tag` |`lf em 4x50 wrbl `|N |`Write EM4x50 word data`
|`lf em 4x50 reader `|N |`show standard read mode data of EM4x50` |`lf em 4x50 wrpwd `|N |`Change EM4x50 password`
|`lf em 4x50 restore `|N |`restore EM4x50 dump to tag` |`lf em 4x50 wipe `|N |`Wipe EM4x50 tag`
|`lf em 4x50 sim `|N |`simulate EM4x50 tag` |`lf em 4x50 eload `|N |`Upload EM4x50 dump to emulator memory`
|`lf em 4x50 eload `|N |`upload dump of EM4x50 to emulator memory` |`lf em 4x50 esave `|N |`Save emulator memory to file`
|`lf em 4x50 esave `|N |`save emulator memory to file` |`lf em 4x50 eview `|N |`View EM4x50 content in emulator memory`
|`lf em 4x50 eview `|N |`view EM4x50 content in emulator memory` |`lf em 4x50 sim `|N |`Simulate EM4x50 tag`
### lf em 4x70 ### lf em 4x70