mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-21 04:29:53 +08:00
FIX: the read counter in "hf 14a sim" (for ntag/ev) should work better now. Instead of always returning zero, it increases aswell.
--Started to add the TI demod into the 'LF SEARCH"
This commit is contained in:
parent
5636ee8ce6
commit
e9a92fe237
3 changed files with 128 additions and 123 deletions
|
@ -1204,10 +1204,12 @@ void SimulateIso14443aTag(int tagType, int flags, byte_t* data)
|
||||||
EmSendCmdEx(data,sizeof(data),false);
|
EmSendCmdEx(data,sizeof(data),false);
|
||||||
p_response = NULL;
|
p_response = NULL;
|
||||||
} else if (receivedCmd[0] == 0x39 && tagType == 7) { // Received a READ COUNTER --
|
} else if (receivedCmd[0] == 0x39 && tagType == 7) { // Received a READ COUNTER --
|
||||||
uint8_t counter = receivedCmd[1];
|
uint8_t index = receivedCmd[1];
|
||||||
uint32_t value = counters[counter];
|
|
||||||
uint8_t data[] = {0x00,0x00,0x00,0x14,0xa5};
|
uint8_t data[] = {0x00,0x00,0x00,0x14,0xa5};
|
||||||
AppendCrc14443a(data, sizeof(data)-2);
|
if ( counters[index] > 0) {
|
||||||
|
num_to_bytes(counters[index], 3, data);
|
||||||
|
AppendCrc14443a(data, sizeof(data)-2);
|
||||||
|
}
|
||||||
EmSendCmdEx(data,sizeof(data),false);
|
EmSendCmdEx(data,sizeof(data),false);
|
||||||
p_response = NULL;
|
p_response = NULL;
|
||||||
} else if (receivedCmd[0] == 0xA5 && tagType == 7) { // Received a INC COUNTER --
|
} else if (receivedCmd[0] == 0xA5 && tagType == 7) { // Received a INC COUNTER --
|
||||||
|
|
204
client/cmdlf.c
204
client/cmdlf.c
|
@ -1056,67 +1056,66 @@ int CmdVchDemod(const char *Cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
//by marshmellow
|
//by marshmellow
|
||||||
int CmdLFfind(const char *Cmd)
|
int CmdLFfind(const char *Cmd) {
|
||||||
{
|
int ans = 0;
|
||||||
int ans = 0;
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char testRaw = param_getchar(Cmd, 1);
|
||||||
char testRaw = param_getchar(Cmd, 1);
|
if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find();
|
||||||
if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find();
|
|
||||||
|
|
||||||
if (!offline && (cmdp != '1')){
|
if (!offline && (cmdp != '1')){
|
||||||
CmdLFRead("s");
|
CmdLFRead("s");
|
||||||
getSamples("30000",false);
|
getSamples("30000",false);
|
||||||
} else if (GraphTraceLen < 1000) {
|
} else if (GraphTraceLen < 1000) {
|
||||||
PrintAndLog("Data in Graphbuffer was too small.");
|
PrintAndLog("Data in Graphbuffer was too small.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
|
if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
|
||||||
|
|
||||||
PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag");
|
PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag");
|
||||||
PrintAndLog("False Positives ARE possible\n");
|
PrintAndLog("False Positives ARE possible\n");
|
||||||
PrintAndLog("\nChecking for known tags:\n");
|
PrintAndLog("\nChecking for known tags:\n");
|
||||||
|
|
||||||
ans=CmdFSKdemodIO("");
|
ans=CmdFSKdemodIO("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid IO Prox ID Found!");
|
PrintAndLog("\nValid IO Prox ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdFSKdemodPyramid("");
|
ans=CmdFSKdemodPyramid("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid Pyramid ID Found!");
|
PrintAndLog("\nValid Pyramid ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdFSKdemodParadox("");
|
ans=CmdFSKdemodParadox("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid Paradox ID Found!");
|
PrintAndLog("\nValid Paradox ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdFSKdemodAWID("");
|
ans=CmdFSKdemodAWID("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid AWID ID Found!");
|
PrintAndLog("\nValid AWID ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdFSKdemodHID("");
|
ans=CmdFSKdemodHID("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid HID Prox ID Found!");
|
PrintAndLog("\nValid HID Prox ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdAskEM410xDemod("");
|
ans=CmdAskEM410xDemod("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid EM410x ID Found!");
|
PrintAndLog("\nValid EM410x ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdG_Prox_II_Demod("");
|
ans=CmdG_Prox_II_Demod("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nValid Guardall G-Prox II ID Found!");
|
PrintAndLog("\nValid Guardall G-Prox II ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdFDXBdemodBI("");
|
ans=CmdFDXBdemodBI("");
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
|
@ -1147,63 +1146,68 @@ int CmdLFfind(const char *Cmd)
|
||||||
PrintAndLog("\nValid NexWatch ID Found!");
|
PrintAndLog("\nValid NexWatch ID Found!");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
// TIdemod?
|
||||||
|
|
||||||
PrintAndLog("\nNo Known Tags Found!\n");
|
|
||||||
if (testRaw=='u' || testRaw=='U'){
|
|
||||||
//test unknown tag formats (raw mode)
|
|
||||||
PrintAndLog("\nChecking for Unknown tags:\n");
|
|
||||||
ans=AutoCorrelate(4000, FALSE, FALSE);
|
|
||||||
|
|
||||||
if (ans > 0) {
|
PrintAndLog("\nNo Known Tags Found!\n");
|
||||||
|
if (testRaw=='u' || testRaw=='U'){
|
||||||
|
//test unknown tag formats (raw mode)
|
||||||
|
PrintAndLog("\nChecking for Unknown tags:\n");
|
||||||
|
ans=AutoCorrelate(4000, FALSE, FALSE);
|
||||||
|
|
||||||
PrintAndLog("Possible Auto Correlation of %d repeating samples",ans);
|
if (ans > 0) {
|
||||||
|
|
||||||
if ( ans % 8 == 0) {
|
PrintAndLog("Possible Auto Correlation of %d repeating samples",ans);
|
||||||
int bytes = (ans / 8);
|
|
||||||
PrintAndLog("Possible %d bytes", bytes);
|
if ( ans % 8 == 0) {
|
||||||
int blocks = 0;
|
int bytes = (ans / 8);
|
||||||
if ( bytes % 2 == 0) {
|
PrintAndLog("Possible %d bytes", bytes);
|
||||||
blocks = (bytes / 2);
|
int blocks = 0;
|
||||||
PrintAndLog("Possible 2 blocks, width %d", blocks);
|
if ( bytes % 2 == 0) {
|
||||||
}
|
blocks = (bytes / 2);
|
||||||
if ( bytes % 4 == 0) {
|
PrintAndLog("Possible 2 blocks, width %d", blocks);
|
||||||
blocks = (bytes / 4);
|
}
|
||||||
PrintAndLog("Possible 4 blocks, width %d", blocks);
|
if ( bytes % 4 == 0) {
|
||||||
}
|
blocks = (bytes / 4);
|
||||||
if ( bytes % 8 == 0) {
|
PrintAndLog("Possible 4 blocks, width %d", blocks);
|
||||||
blocks = (bytes / 8);
|
}
|
||||||
PrintAndLog("Possible 8 blocks, width %d", blocks);
|
if ( bytes % 8 == 0) {
|
||||||
}
|
blocks = (bytes / 8);
|
||||||
if ( bytes % 16 == 0) {
|
PrintAndLog("Possible 8 blocks, width %d", blocks);
|
||||||
blocks = (bytes / 16);
|
}
|
||||||
PrintAndLog("Possible 16 blocks, width %d", blocks);
|
if ( bytes % 16 == 0) {
|
||||||
|
blocks = (bytes / 16);
|
||||||
|
PrintAndLog("Possible 16 blocks, width %d", blocks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
ans=GetFskClock("",FALSE,FALSE);
|
ans=GetFskClock("",FALSE,FALSE);
|
||||||
if (ans != 0){ //fsk
|
if (ans != 0){ //fsk
|
||||||
ans=FSKrawDemod("",TRUE);
|
ans=FSKrawDemod("",TRUE);
|
||||||
|
if (ans>0) {
|
||||||
|
PrintAndLog("\nUnknown FSK Modulated Tag Found!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ans=ASKDemod("0 0 0",TRUE,FALSE,1);
|
||||||
if (ans>0) {
|
if (ans>0) {
|
||||||
PrintAndLog("\nUnknown FSK Modulated Tag Found!");
|
PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!");
|
||||||
|
PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ans=CmdPSK1rawDemod("");
|
||||||
|
if (ans>0) {
|
||||||
|
PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'");
|
||||||
|
PrintAndLog("\nCould also be PSK3 - [currently not supported]");
|
||||||
|
PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
PrintAndLog("\nNo Data Found!\n");
|
||||||
ans=ASKDemod("0 0 0",TRUE,FALSE,1);
|
}
|
||||||
if (ans>0) {
|
return 0;
|
||||||
PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!");
|
|
||||||
PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
ans=CmdPSK1rawDemod("");
|
|
||||||
if (ans>0) {
|
|
||||||
PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'");
|
|
||||||
PrintAndLog("\nCould also be PSK3 - [currently not supported]");
|
|
||||||
PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
PrintAndLog("\nNo Data Found!\n");
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static command_t CommandTable[] =
|
static command_t CommandTable[] =
|
||||||
|
|
|
@ -262,29 +262,30 @@ int CmdTIDemod(const char *Cmd)
|
||||||
// read a TI tag and return its ID
|
// read a TI tag and return its ID
|
||||||
int CmdTIRead(const char *Cmd)
|
int CmdTIRead(const char *Cmd)
|
||||||
{
|
{
|
||||||
UsbCommand c = {CMD_READ_TI_TYPE};
|
UsbCommand c = {CMD_READ_TI_TYPE};
|
||||||
SendCommand(&c);
|
clearCommandbuffer();
|
||||||
return 0;
|
SendCommand(&c);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// write new data to a r/w TI tag
|
// write new data to a r/w TI tag
|
||||||
int CmdTIWrite(const char *Cmd)
|
int CmdTIWrite(const char *Cmd)
|
||||||
{
|
{
|
||||||
UsbCommand c = {CMD_WRITE_TI_TYPE};
|
UsbCommand c = {CMD_WRITE_TI_TYPE};
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
res = sscanf(Cmd, "%012"llx" %012"llx" %012"llx"", &c.arg[0], &c.arg[1], &c.arg[2]);
|
res = sscanf(Cmd, "%012"llx" %012"llx" %012"llx"", &c.arg[0], &c.arg[1], &c.arg[2]);
|
||||||
|
|
||||||
if (res == 2) c.arg[2]=0;
|
if (res == 2) c.arg[2]=0;
|
||||||
if (res < 2)
|
if (res < 2)
|
||||||
PrintAndLog("Please specify the data as two hex strings, optionally the CRC as a third");
|
PrintAndLog("Please specify the data as two hex strings, optionally the CRC as a third");
|
||||||
else
|
else
|
||||||
SendCommand(&c);
|
clearCommandbuffer();
|
||||||
return 0;
|
SendCommand(&c);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static command_t CommandTable[] =
|
static command_t CommandTable[] = {
|
||||||
{
|
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"demod", CmdTIDemod, 1, "Demodulate raw bits for TI-type LF tag"},
|
{"demod", CmdTIDemod, 1, "Demodulate raw bits for TI-type LF tag"},
|
||||||
{"read", CmdTIRead, 0, "Read and decode a TI 134 kHz tag"},
|
{"read", CmdTIRead, 0, "Read and decode a TI 134 kHz tag"},
|
||||||
|
@ -292,14 +293,12 @@ static command_t CommandTable[] =
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
int CmdLFTI(const char *Cmd)
|
int CmdLFTI(const char *Cmd){
|
||||||
{
|
|
||||||
CmdsParse(CommandTable, Cmd);
|
CmdsParse(CommandTable, Cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdHelp(const char *Cmd)
|
int CmdHelp(const char *Cmd){
|
||||||
{
|
|
||||||
CmdsHelp(CommandTable);
|
CmdsHelp(CommandTable);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue