mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-01-02 21:54:10 +08:00
BUG: the lf read now uses "getbigbuffer" which the offset from where the data starts in "data samples nnnnn" needed to be set.
ADD: ioprox nxp identifikations
This commit is contained in:
parent
72e930ef32
commit
c2d25819d8
5 changed files with 38 additions and 40 deletions
|
@ -464,8 +464,8 @@ int CmdSamples(const char *Cmd)
|
||||||
if (n == 0) n = 512;
|
if (n == 0) n = 512;
|
||||||
if (n > sizeof(got)) n = sizeof(got);
|
if (n > sizeof(got)) n = sizeof(got);
|
||||||
|
|
||||||
PrintAndLog("Reading %d samples\n", n);
|
PrintAndLog("Reading %d samples from device memory\n", n);
|
||||||
GetFromBigBuf(got,n,0);
|
GetFromBigBuf(got,n,3560);
|
||||||
WaitForResponse(CMD_ACK,NULL);
|
WaitForResponse(CMD_ACK,NULL);
|
||||||
for (int j = 0; j < n; j++) {
|
for (int j = 0; j < n; j++) {
|
||||||
GraphBuffer[cnt++] = ((int)got[j]) - 128;
|
GraphBuffer[cnt++] = ((int)got[j]) - 128;
|
||||||
|
|
|
@ -59,8 +59,10 @@ const productName uidmapping[] = {
|
||||||
{ 0xE001000000000000LL, 16, "Motorola" },
|
{ 0xE001000000000000LL, 16, "Motorola" },
|
||||||
{ 0xE002000000000000LL, 16, "ST Microelectronics" },
|
{ 0xE002000000000000LL, 16, "ST Microelectronics" },
|
||||||
{ 0xE003000000000000LL, 16, "Hitachi" },
|
{ 0xE003000000000000LL, 16, "Hitachi" },
|
||||||
{ 0xE004000000000000LL, 16, "Philips" },
|
{ 0xE004000000000000LL, 16, "NXP(Philips)" },
|
||||||
{ 0xE004010000000000LL, 24, "Philips; IC SL2 ICS20" },
|
{ 0xE004010000000000LL, 24, "NXP(Philips); IC SL2 ICS20/ICS21(SLI) ICS2002/ICS2102(SLIX)" },
|
||||||
|
{ 0xE004020000000000LL, 24, "NXP(Philips); IC SL2 ICS53/ICS54(SLI-S) ICS5302/ICS5402(SLIX-S)" },
|
||||||
|
{ 0xE004030000000000LL, 24, "NXP(Philips); IC SL2 ICS50/ICS51(SLI-L) ICS5002/ICS5102(SLIX-L)" },
|
||||||
{ 0xE005000000000000LL, 16, "Infineon" },
|
{ 0xE005000000000000LL, 16, "Infineon" },
|
||||||
{ 0xE005400000000000LL, 24, "Infineon; 56x32bit" },
|
{ 0xE005400000000000LL, 24, "Infineon; 56x32bit" },
|
||||||
{ 0xE006000000000000LL, 16, "Cylinc" },
|
{ 0xE006000000000000LL, 16, "Cylinc" },
|
||||||
|
|
|
@ -363,7 +363,9 @@ int CmdLFRead(const char *Cmd)
|
||||||
} else if (*Cmd == '\0') {
|
} else if (*Cmd == '\0') {
|
||||||
c.arg[0] = 0;
|
c.arg[0] = 0;
|
||||||
} else if (sscanf(Cmd, "%"lli, &c.arg[0]) != 1) {
|
} else if (sscanf(Cmd, "%"lli, &c.arg[0]) != 1) {
|
||||||
PrintAndLog("use 'read' or 'read h', or 'read <divisor>'");
|
PrintAndLog("Samples 1: 'lf read'");
|
||||||
|
PrintAndLog(" 2: 'lf read h'");
|
||||||
|
PrintAndLog(" 3: 'lf read <divisor>'");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
|
@ -566,7 +568,7 @@ static command_t CommandTable[] =
|
||||||
|
|
||||||
{"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"},
|
{"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"},
|
||||||
{"indalademod", CmdIndalaDemod, 1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
|
{"indalademod", CmdIndalaDemod, 1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
|
||||||
{"indalaclone", CmdIndalaClone, 1, "<UID> ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"},
|
{"indalaclone", CmdIndalaClone, 1, "<UID> ['l']-- Clone Indala to T55x7 (UID in HEX)(option 'l' for 224 UID"},
|
||||||
{"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"},
|
{"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"},
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -255,38 +255,32 @@ int CmdEM410xSim(const char *Cmd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function is equivalent of loread + losamples + em410xread
|
/* Function is equivalent of lf read + data samples + em410xread
|
||||||
* looped until an EM410x tag is detected */
|
* looped until an EM410x tag is detected
|
||||||
|
*
|
||||||
|
* Why is CmdSamples("16000")?
|
||||||
|
* TBD: Auto-grow sample size based on detected sample rate. IE: If the
|
||||||
|
* rate gets lower, then grow the number of samples
|
||||||
|
* Changed by martin, 4000 x 4 = 16000,
|
||||||
|
* see http://www.proxmark.org/forum/viewtopic.php?pid=7235#p7235
|
||||||
|
|
||||||
|
*/
|
||||||
int CmdEM410xWatch(const char *Cmd)
|
int CmdEM410xWatch(const char *Cmd)
|
||||||
{
|
{
|
||||||
int read_h = (*Cmd == 'h');
|
int read_h = (*Cmd == 'h');
|
||||||
//char k;
|
do
|
||||||
do
|
{
|
||||||
{
|
CmdLFRead(read_h ? "h" : "");
|
||||||
CmdLFRead(read_h ? "h" : "");
|
CmdSamples("16000");
|
||||||
// 2000 samples is OK for clock=64, but not clock=32. Probably want
|
} while (
|
||||||
// 8000 for clock=16. Don't want to go too high since old HID driver
|
|
||||||
// is very slow
|
|
||||||
// TBD: Auto-grow sample size based on detected sample rate. IE: If the
|
|
||||||
// rate gets lower, then grow the number of samples
|
|
||||||
|
|
||||||
// Changed by martin, 4000 x 4 = 16000,
|
|
||||||
// see http://www.proxmark.org/forum/viewtopic.php?pid=7235#p7235
|
|
||||||
CmdSamples("16000");
|
|
||||||
} while (
|
|
||||||
!CmdEM410xRead("")
|
!CmdEM410xRead("")
|
||||||
);
|
);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdEM410xWatchnSpoof(const char *Cmd)
|
int CmdEM410xWatchnSpoof(const char *Cmd)
|
||||||
{
|
{
|
||||||
int read_h = (*Cmd == 'h');
|
CmdEM410xWatch(Cmd);
|
||||||
do
|
|
||||||
{
|
|
||||||
CmdLFRead(read_h ? "h" : "");
|
|
||||||
CmdSamples("16000");
|
|
||||||
} while ( ! CmdEM410xRead(""));
|
|
||||||
PrintAndLog("# Replaying : %s",global_em410xId);
|
PrintAndLog("# Replaying : %s",global_em410xId);
|
||||||
CmdEM410xSim(global_em410xId);
|
CmdEM410xSim(global_em410xId);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -636,12 +630,12 @@ int CmdWriteWordPWD(const char *Cmd)
|
||||||
static command_t CommandTable[] =
|
static command_t CommandTable[] =
|
||||||
{
|
{
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"410read", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag"},
|
{"410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag"},
|
||||||
{"410sim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
|
{"410xsim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
|
||||||
{"410watch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},
|
{"410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},
|
||||||
{"410spoof", CmdEM410xWatchnSpoof, 0, "['h'] --- Watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" },
|
{"410xspoof", CmdEM410xWatchnSpoof, 0, "['h'] --- Watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" },
|
||||||
{"410write", CmdEM410xWrite, 1, "<UID> <'0' T5555> <'1' T55x7> [clock rate] -- Write EM410x UID to T5555(Q5) or T55x7 tag, optionally setting clock rate"},
|
{"410xwrite", CmdEM410xWrite, 1, "<UID> <'0' T5555> <'1' T55x7> [clock rate] -- Write EM410x UID to T5555(Q5) or T55x7 tag, optionally setting clock rate"},
|
||||||
{"4xread", CmdEM4x50Read, 1, "Extract data from EM4x50 tag"},
|
{"4x50read", CmdEM4x50Read, 1, "Extract data from EM4x50 tag"},
|
||||||
{"rd", CmdReadWord, 1, "<Word 1-15> -- Read EM4xxx word data"},
|
{"rd", CmdReadWord, 1, "<Word 1-15> -- Read EM4xxx word data"},
|
||||||
{"rdpwd", CmdReadWordPWD, 1, "<Word 1-15> <Password> -- Read EM4xxx word data in password mode "},
|
{"rdpwd", CmdReadWordPWD, 1, "<Word 1-15> <Password> -- Read EM4xxx word data in password mode "},
|
||||||
{"wr", CmdWriteWord, 1, "<Data> <Word 1-15> -- Write EM4xxx word data"},
|
{"wr", CmdWriteWord, 1, "<Data> <Word 1-15> -- Write EM4xxx word data"},
|
||||||
|
|
|
@ -56,7 +56,7 @@ int CmdReadBlk(const char *Cmd)
|
||||||
GraphBuffer[j] = (int)data[j];
|
GraphBuffer[j] = (int)data[j];
|
||||||
}
|
}
|
||||||
GraphTraceLen = LF_TRACE_BUFF_SIZE;
|
GraphTraceLen = LF_TRACE_BUFF_SIZE;
|
||||||
CmdIceManchester(Block);
|
ManchesterDemod(Block);
|
||||||
RepaintGraphWindow();
|
RepaintGraphWindow();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ int CmdReadBlkPWD(const char *Cmd)
|
||||||
GraphBuffer[j] = ((int)data[j]) - 128;
|
GraphBuffer[j] = ((int)data[j]) - 128;
|
||||||
}
|
}
|
||||||
GraphTraceLen = LF_TRACE_BUFF_SIZE;
|
GraphTraceLen = LF_TRACE_BUFF_SIZE;
|
||||||
CmdIceManchester(Block);
|
ManchesterDemod(Block);
|
||||||
RepaintGraphWindow();
|
RepaintGraphWindow();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -475,9 +475,9 @@ static command_t CommandTable[] =
|
||||||
{
|
{
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"rd", CmdReadBlk, 0, "<block> -- Read T55xx block data (page 0)"},
|
{"rd", CmdReadBlk, 0, "<block> -- Read T55xx block data (page 0)"},
|
||||||
{"rdPWD", CmdReadBlkPWD, 0, "<block> <password> -- Read T55xx block data with password mode"},
|
{"rdpwd", CmdReadBlkPWD, 0, "<block> <password> -- Read T55xx block data with password mode"},
|
||||||
{"wr", CmdWriteBlk, 0, "<data> <block> -- Write T55xx block data (page 0)"},
|
{"wr", CmdWriteBlk, 0, "<data> <block> -- Write T55xx block data (page 0)"},
|
||||||
{"wrPWD", CmdWriteBlkPWD, 0, "<data> <block> <password> -- Write T55xx block data with password"},
|
{"wrpwd", CmdWriteBlkPWD, 0, "<data> <block> <password> -- Write T55xx block data with password"},
|
||||||
{"trace", CmdReadTrace, 0, "[1] Read T55xx traceability data (page 1 / blk 0-1) "},
|
{"trace", CmdReadTrace, 0, "[1] Read T55xx traceability data (page 1 / blk 0-1) "},
|
||||||
{"info", CmdInfo, 0, "[1] Read T55xx configuration data (page0 /blk 0)"},
|
{"info", CmdInfo, 0, "[1] Read T55xx configuration data (page0 /blk 0)"},
|
||||||
{"dump", CmdDump, 0, "[password] Dump T55xx card block 0-7. optional with password"},
|
{"dump", CmdDump, 0, "[password] Dump T55xx card block 0-7. optional with password"},
|
||||||
|
|
Loading…
Reference in a new issue