mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 22:03:42 -07:00
text
This commit is contained in:
parent
c25eb722dc
commit
4bde614006
2 changed files with 29 additions and 28 deletions
|
@ -84,7 +84,7 @@ static void encodeHeden2L(uint8_t *dest, uint32_t cardnumber) {
|
||||||
dest[i / 8] = bytebits_to_byte(template + i, 8);
|
dest[i / 8] = bytebits_to_byte(template + i, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(INFO, "Heden-2L card number " _GREEN_("%u"), cardnumber);
|
PrintAndLogEx(INFO, "Heden-2L card number %u", cardnumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void decodeHeden2L(uint8_t *bits) {
|
static void decodeHeden2L(uint8_t *bits) {
|
||||||
|
@ -109,7 +109,7 @@ static void decodeHeden2L(uint8_t *bits) {
|
||||||
if (bits[offset + 7]) cardnumber += 16384;
|
if (bits[offset + 7]) cardnumber += 16384;
|
||||||
if (bits[offset + 23]) cardnumber += 32768;
|
if (bits[offset + 23]) cardnumber += 32768;
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "\tHeden-2L | " _GREEN_("%u"), cardnumber);
|
PrintAndLogEx(SUCCESS, " Heden-2L | %u", cardnumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indala 26 bit decode
|
// Indala 26 bit decode
|
||||||
|
@ -206,8 +206,8 @@ int demodIndalaEx(int clk, int invert, int maxErr, bool verbose) {
|
||||||
);
|
);
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "Possible de-scramble patterns");
|
PrintAndLogEx(SUCCESS, "Possible de-scramble patterns");
|
||||||
PrintAndLogEx(SUCCESS, "\tPrinted | __%04d__ [0x%X]", p1, p1);
|
PrintAndLogEx(SUCCESS, " Printed | __%04d__ [0x%X]", p1, p1);
|
||||||
PrintAndLogEx(SUCCESS, "\tInternal ID | %" PRIu64, foo);
|
PrintAndLogEx(SUCCESS, " Internal ID | %" PRIu64, foo);
|
||||||
decodeHeden2L(DemodBuffer);
|
decodeHeden2L(DemodBuffer);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -218,7 +218,7 @@ int demodIndalaEx(int clk, int invert, int maxErr, bool verbose) {
|
||||||
uint32_t uid7 = bytebits_to_byte(DemodBuffer + 192, 32);
|
uint32_t uid7 = bytebits_to_byte(DemodBuffer + 192, 32);
|
||||||
PrintAndLogEx(
|
PrintAndLogEx(
|
||||||
SUCCESS
|
SUCCESS
|
||||||
, "Indala - len " _GREEN_("%zu") " Raw: %x%08x%08x%08x%08x%08x%08x"
|
, "Indala (len %zu) Raw: " _GREEN_("%x%08x%08x%08x%08x%08x%08x")
|
||||||
, DemodBufferLen
|
, DemodBufferLen
|
||||||
, uid1
|
, uid1
|
||||||
, uid2
|
, uid2
|
||||||
|
@ -245,7 +245,7 @@ static int CmdIndalaDemod(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf indala demod",
|
CLIParserInit(&ctx, "lf indala demod",
|
||||||
"Tries to psk demodulate the graphbuffer as Indala Prox",
|
"Tries to psk demodulate the graphbuffer as Indala",
|
||||||
"lf indala demod\n"
|
"lf indala demod\n"
|
||||||
"lf indala demod --clock 32 -> demod a Indala tag from GraphBuffer using a clock of RF/32\n"
|
"lf indala demod --clock 32 -> demod a Indala tag from GraphBuffer using a clock of RF/32\n"
|
||||||
"lf indala demod --clock 32 -i -> demod a Indala tag from GraphBuffer using a clock of RF/32 and inverting data\n"
|
"lf indala demod --clock 32 -i -> demod a Indala tag from GraphBuffer using a clock of RF/32 and inverting data\n"
|
||||||
|
@ -276,7 +276,7 @@ static int CmdIndalaDemodAlt(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf indala altdemod",
|
CLIParserInit(&ctx, "lf indala altdemod",
|
||||||
"Tries to psk demodulate the graphbuffer as Indala Prox\n"
|
"Tries to psk demodulate the graphbuffer as Indala\n"
|
||||||
"This is uses a alternative way to demodulate and was used from the beginning in the Pm3 client.\n"
|
"This is uses a alternative way to demodulate and was used from the beginning in the Pm3 client.\n"
|
||||||
"It's now considered obsolete but remains because it has sometimes its advantages.",
|
"It's now considered obsolete but remains because it has sometimes its advantages.",
|
||||||
"lf indala altdemod\n"
|
"lf indala altdemod\n"
|
||||||
|
@ -493,7 +493,7 @@ static int CmdIndalaDemodAlt(const char *Cmd) {
|
||||||
static int CmdIndalaReader(const char *Cmd) {
|
static int CmdIndalaReader(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf indala reader",
|
CLIParserInit(&ctx, "lf indala reader",
|
||||||
"read a Indala Prox tag",
|
"read a Indala tag",
|
||||||
"lf indala reader -@ -> continuous reader mode"
|
"lf indala reader -@ -> continuous reader mode"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -527,7 +527,7 @@ static int CmdIndalaSim(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf indala sim",
|
CLIParserInit(&ctx, "lf indala sim",
|
||||||
"Enables simulation of IOProx card with specified facility-code and card number.\n"
|
"Enables simulation of Indala card with specified facility-code and card number.\n"
|
||||||
"Simulation runs until the button is pressed or another USB command is issued.",
|
"Simulation runs until the button is pressed or another USB command is issued.",
|
||||||
"lf indala sim --heden 888\n"
|
"lf indala sim --heden 888\n"
|
||||||
"lf indala sim --raw a0000000a0002021\n"
|
"lf indala sim --raw a0000000a0002021\n"
|
||||||
|
@ -616,7 +616,8 @@ static int CmdIndalaClone(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf indala clone",
|
CLIParserInit(&ctx, "lf indala clone",
|
||||||
"clone INDALA UID to T55x7 or Q5/T5555 tag",
|
"clone INDALA UID to T55x7 or Q5/T5555 tag\n"
|
||||||
|
_RED_("\nWarning, encoding with FC/CN doesn't always work"),
|
||||||
"lf indala clone --heden 888\n"
|
"lf indala clone --heden 888\n"
|
||||||
"lf indala clone --fc 123 --cn 1337\n"
|
"lf indala clone --fc 123 --cn 1337\n"
|
||||||
"lf indala clone -r a0000000a0002021\n"
|
"lf indala clone -r a0000000a0002021\n"
|
||||||
|
@ -626,8 +627,8 @@ static int CmdIndalaClone(const char *Cmd) {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_strx0("r", "raw", "<hex>", "raw bytes"),
|
arg_strx0("r", "raw", "<hex>", "raw bytes"),
|
||||||
arg_int0(NULL, "heden", "<decimal>", "Cardnumber for Heden 2L format"),
|
arg_int0(NULL, "heden", "<decimal>", "Cardnumber for Heden 2L format"),
|
||||||
arg_int0(NULL, "fc", "<decimal>", "Facility Code (26 bit format)"),
|
arg_int0(NULL, "fc", "<decimal>", "Facility Code (26 bit H10301 format)"),
|
||||||
arg_int0(NULL, "cn", "<decimal>", "Cardnumber (26 bit format)"),
|
arg_int0(NULL, "cn", "<decimal>", "Cardnumber (26 bit H10301 format)"),
|
||||||
arg_lit0(NULL, "q5", "optional - specify writing to Q5/T5555 tag"),
|
arg_lit0(NULL, "q5", "optional - specify writing to Q5/T5555 tag"),
|
||||||
arg_lit0(NULL, "em", "optional - specify writing to EM4305/4469 tag"),
|
arg_lit0(NULL, "em", "optional - specify writing to EM4305/4469 tag"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
|
@ -769,8 +770,8 @@ static int CmdIndalaClone(const char *Cmd) {
|
||||||
static command_t CommandTable[] = {
|
static command_t CommandTable[] = {
|
||||||
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
||||||
{"demod", CmdIndalaDemod, AlwaysAvailable, "demodulate an indala tag (PSK1) from GraphBuffer"},
|
{"demod", CmdIndalaDemod, AlwaysAvailable, "demodulate an indala tag (PSK1) from GraphBuffer"},
|
||||||
{"altdemod", CmdIndalaDemodAlt, AlwaysAvailable, "alternative method to Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
|
{"altdemod", CmdIndalaDemodAlt, AlwaysAvailable, "alternative method to demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
|
||||||
{"reader", CmdIndalaReader, IfPm3Lf, "read an Indala Prox tag from the antenna"},
|
{"reader", CmdIndalaReader, IfPm3Lf, "read an Indala tag from the antenna"},
|
||||||
{"clone", CmdIndalaClone, IfPm3Lf, "clone Indala tag to T55x7 or Q5/T5555"},
|
{"clone", CmdIndalaClone, IfPm3Lf, "clone Indala tag to T55x7 or Q5/T5555"},
|
||||||
{"sim", CmdIndalaSim, IfPm3Lf, "simulate Indala tag"},
|
{"sim", CmdIndalaSim, IfPm3Lf, "simulate Indala tag"},
|
||||||
{NULL, NULL, NULL, NULL}
|
{NULL, NULL, NULL, NULL}
|
||||||
|
|
|
@ -34,7 +34,7 @@ static int CmdHelp(const char *Cmd);
|
||||||
static int CmdIOProxWatch(const char *Cmd) {
|
static int CmdIOProxWatch(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf io watch",
|
CLIParserInit(&ctx, "lf io watch",
|
||||||
"Enables IOProx compatible reader mode printing details.\n"
|
"Enables ioProx compatible reader mode printing details.\n"
|
||||||
"By default, values are printed and logged until the button is pressed or another USB command is issued.",
|
"By default, values are printed and logged until the button is pressed or another USB command is issued.",
|
||||||
"lf io watch"
|
"lf io watch"
|
||||||
);
|
);
|
||||||
|
@ -57,7 +57,7 @@ static int CmdIOProxWatch(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//IO-Prox demod - FSK RF/64 with preamble of 000000001
|
//IO-Prox demod - FSK RF/64 with preamble of 000000001
|
||||||
//print ioprox ID and some format details
|
//print ioProx ID and some format details
|
||||||
int demodIOProx(bool verbose) {
|
int demodIOProx(bool verbose) {
|
||||||
(void) verbose; // unused so far
|
(void) verbose; // unused so far
|
||||||
int idx = 0, retval = PM3_SUCCESS;
|
int idx = 0, retval = PM3_SUCCESS;
|
||||||
|
@ -157,7 +157,7 @@ int demodIOProx(bool verbose) {
|
||||||
static int CmdIOProxDemod(const char *Cmd) {
|
static int CmdIOProxDemod(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf io demod",
|
CLIParserInit(&ctx, "lf io demod",
|
||||||
"Try to find IOProx preamble, if found decode / descramble data",
|
"Try to find ioProx preamble, if found decode / descramble data",
|
||||||
"lf io demod"
|
"lf io demod"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ static int CmdIOProxDemod(const char *Cmd) {
|
||||||
static int CmdIOProxReader(const char *Cmd) {
|
static int CmdIOProxReader(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf io reader",
|
CLIParserInit(&ctx, "lf io reader",
|
||||||
"read a IOProx tag",
|
"read a ioProx tag",
|
||||||
"lf io reader -@ -> continuous reader mode"
|
"lf io reader -@ -> continuous reader mode"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ static int CmdIOProxSim(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf io sim",
|
CLIParserInit(&ctx, "lf io sim",
|
||||||
"Enables simulation of IOProx card with specified facility-code and card number.\n"
|
"Enables simulation of ioProx card with specified facility-code and card number.\n"
|
||||||
"Simulation runs until the button is pressed or another USB command is issued.",
|
"Simulation runs until the button is pressed or another USB command is issued.",
|
||||||
"lf io sim --vn 1 --fc 101 --cn 1337"
|
"lf io sim --vn 1 --fc 101 --cn 1337"
|
||||||
);
|
);
|
||||||
|
@ -220,10 +220,10 @@ static int CmdIOProxSim(const char *Cmd) {
|
||||||
|
|
||||||
if ((cn & 0xFFFF) != cn) {
|
if ((cn & 0xFFFF) != cn) {
|
||||||
cn &= 0xFFFF;
|
cn &= 0xFFFF;
|
||||||
PrintAndLogEx(INFO, "Card Number Truncated to 16-bits (IOProx): %u", cn);
|
PrintAndLogEx(INFO, "Card Number Truncated to 16-bits (ioProx): %u", cn);
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "Simulating IOProx version: " _YELLOW_("%u") " FC: " _YELLOW_("%u (0x%02x)") " CN: " _YELLOW_("%u"), version, fc, fc, cn);
|
PrintAndLogEx(SUCCESS, "Simulating ioProx version: " _YELLOW_("%u") " FC: " _YELLOW_("%u (0x%02x)") " CN: " _YELLOW_("%u"), version, fc, fc, cn);
|
||||||
PrintAndLogEx(SUCCESS, "Press pm3-button to abort simulation or run another command");
|
PrintAndLogEx(SUCCESS, "Press pm3-button to abort simulation or run another command");
|
||||||
|
|
||||||
uint8_t bs[64];
|
uint8_t bs[64];
|
||||||
|
@ -233,7 +233,7 @@ static int CmdIOProxSim(const char *Cmd) {
|
||||||
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
// IOProx uses: fcHigh: 10, fcLow: 8, clk: 64, invert: 1
|
// ioProx uses: fcHigh: 10, fcLow: 8, clk: 64, invert: 1
|
||||||
// arg1 --- fcHigh<<8 + fcLow
|
// arg1 --- fcHigh<<8 + fcLow
|
||||||
// arg2 --- Invert and clk setting
|
// arg2 --- Invert and clk setting
|
||||||
// size --- 64 bits == 8 bytes
|
// size --- 64 bits == 8 bytes
|
||||||
|
@ -259,7 +259,7 @@ static int CmdIOProxClone(const char *Cmd) {
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf io clone",
|
CLIParserInit(&ctx, "lf io clone",
|
||||||
"Enables simulation of IOProx card with specified facility-code and card number.\n"
|
"Enables simulation of ioProx card with specified facility-code and card number.\n"
|
||||||
"Tag must be on the antenna when issuing this command.",
|
"Tag must be on the antenna when issuing this command.",
|
||||||
"lf io clone --vn 1 --fc 101 --cn 1337"
|
"lf io clone --vn 1 --fc 101 --cn 1337"
|
||||||
);
|
);
|
||||||
|
@ -292,7 +292,7 @@ static int CmdIOProxClone(const char *Cmd) {
|
||||||
|
|
||||||
if ((cn & 0xFFFF) != cn) {
|
if ((cn & 0xFFFF) != cn) {
|
||||||
cn &= 0xFFFF;
|
cn &= 0xFFFF;
|
||||||
PrintAndLogEx(INFO, "Card Number Truncated to 16-bits (IOProx): %u", cn);
|
PrintAndLogEx(INFO, "Card Number Truncated to 16-bits (ioProx): %u", cn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getIOProxBits(version, fc, cn, bits) != PM3_SUCCESS) {
|
if (getIOProxBits(version, fc, cn, bits) != PM3_SUCCESS) {
|
||||||
|
@ -317,7 +317,7 @@ static int CmdIOProxClone(const char *Cmd) {
|
||||||
blocks[1] = bytebits_to_byte(bits, 32);
|
blocks[1] = bytebits_to_byte(bits, 32);
|
||||||
blocks[2] = bytebits_to_byte(bits + 32, 32);
|
blocks[2] = bytebits_to_byte(bits + 32, 32);
|
||||||
|
|
||||||
PrintAndLogEx(INFO, "Preparing to clone IOProx to " _YELLOW_("%s") " with Version: " _GREEN_("%u") " FC: " _GREEN_("%u (0x%02x)") " CN: " _GREEN_("%u")
|
PrintAndLogEx(INFO, "Preparing to clone ioProx to " _YELLOW_("%s") " with Version: " _GREEN_("%u") " FC: " _GREEN_("%u (0x%02x)") " CN: " _GREEN_("%u")
|
||||||
, cardtype
|
, cardtype
|
||||||
, version
|
, version
|
||||||
, fc
|
, fc
|
||||||
|
@ -339,10 +339,10 @@ static int CmdIOProxClone(const char *Cmd) {
|
||||||
|
|
||||||
static command_t CommandTable[] = {
|
static command_t CommandTable[] = {
|
||||||
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
||||||
{"demod", CmdIOProxDemod, AlwaysAvailable, "demodulate an IOProx tag from the GraphBuffer"},
|
{"demod", CmdIOProxDemod, AlwaysAvailable, "demodulate an ioProx tag from the GraphBuffer"},
|
||||||
{"reader", CmdIOProxReader, IfPm3Lf, "attempt to read and extract tag data"},
|
{"reader", CmdIOProxReader, IfPm3Lf, "attempt to read and extract tag data"},
|
||||||
{"clone", CmdIOProxClone, IfPm3Lf, "clone IOProx tag to T55x7 or Q5/T5555"},
|
{"clone", CmdIOProxClone, IfPm3Lf, "clone ioProx tag to T55x7 or Q5/T5555"},
|
||||||
{"sim", CmdIOProxSim, IfPm3Lf, "simulate IOProx tag"},
|
{"sim", CmdIOProxSim, IfPm3Lf, "simulate ioProx tag"},
|
||||||
{"watch", CmdIOProxWatch, IfPm3Lf, "continuously watch for cards. Reader mode"},
|
{"watch", CmdIOProxWatch, IfPm3Lf, "continuously watch for cards. Reader mode"},
|
||||||
{NULL, NULL, NULL, NULL}
|
{NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue