Added support for Legic tags to hf search command (#815)

* hf legic: use CMD_ACK instead of Dbprintf
* hf search: add support for Legic tags
This commit is contained in:
András Veres-Szentkirályi 2019-04-12 08:52:18 +02:00 committed by pwpiwi
commit bad582468f
4 changed files with 26 additions and 7 deletions

View file

@ -30,6 +30,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
- Added `hf plot` (piwi) - Added `hf plot` (piwi)
- Added `hf mfp mad` `hf mf mad` parsing MAD1 and MAD2 (Merlok) - Added `hf mfp mad` `hf mf mad` parsing MAD1 and MAD2 (Merlok)
- Added `hf mfp ndef` `hf mf ndef` parsing NDEF records (Merlok) - Added `hf mfp ndef` `hf mf ndef` parsing NDEF records (Merlok)
- Added Legic detection to `hf search` (dnet)
## [v3.1.0][2018-10-10] ## [v3.1.0][2018-10-10]

View file

@ -379,8 +379,9 @@ void LegicRfReader(int offset, int bytes) {
// establish shared secret and detect card type // establish shared secret and detect card type
DbpString("Reading card ..."); DbpString("Reading card ...");
uint8_t card_type = setup_phase(SESSION_IV); uint8_t card_type = setup_phase(SESSION_IV);
uint8_t result = 0;
if(init_card(card_type, &card) != 0) { if(init_card(card_type, &card) != 0) {
Dbprintf("No or unknown card found, aborting"); result = 1;
goto OUT; goto OUT;
} }
@ -397,17 +398,14 @@ void LegicRfReader(int offset, int bytes) {
for(uint16_t i = 0; i < bytes; ++i) { for(uint16_t i = 0; i < bytes; ++i) {
int16_t byte = read_byte(offset + i, card.cmdsize); int16_t byte = read_byte(offset + i, card.cmdsize);
if(byte == -1) { if(byte == -1) {
Dbprintf("operation failed @ 0x%03.3x", bytes); result = 2;
goto OUT; goto OUT;
} }
BigBuf[i] = byte; BigBuf[i] = byte;
} }
// OK
Dbprintf("Card (MIM %i) read, use 'hf legic decode' or", card.cardsize);
Dbprintf("'data hexsamples %d' to view results", (bytes+7) & ~7);
OUT: OUT:
cmd_send(CMD_ACK, result, bytes, 0, &card, sizeof(card));
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
LED_B_OFF(); LED_B_OFF();
LED_C_OFF(); LED_C_OFF();

View file

@ -66,6 +66,11 @@ int CmdHFSearch(const char *Cmd){
PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n"); PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
return ans; return ans;
} }
ans = CmdLegicRFRead("");
if (ans == 0) {
PrintAndLog("\nValid Legic Tag Found - Quiting Search\n");
return ans;
}
PrintAndLog("\nno known/supported 13.56 MHz tags found\n"); PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
return 0; return 0;
} }

View file

@ -18,6 +18,7 @@
#include "cmdparser.h" #include "cmdparser.h"
#include "cmdmain.h" #include "cmdmain.h"
#include "util.h" #include "util.h"
#include "../include/legic.h"
static int CmdHelp(const char *Cmd); static int CmdHelp(const char *Cmd);
@ -214,7 +215,21 @@ int CmdLegicRFRead(const char *Cmd)
if(byte_count + offset > 1024) byte_count = 1024 - offset; if(byte_count + offset > 1024) byte_count = 1024 - offset;
UsbCommand c={CMD_READER_LEGIC_RF, {offset, byte_count, 0}}; UsbCommand c={CMD_READER_LEGIC_RF, {offset, byte_count, 0}};
SendCommand(&c); SendCommand(&c);
return 0; UsbCommand resp;
WaitForResponse(CMD_ACK,&resp);
switch (resp.arg[0]) {
case 0:
PrintAndLog("Card (MIM %i) read, use 'hf legic decode' or", ((legic_card_select_t*)resp.d.asBytes)->cardsize);
PrintAndLog("'data hexsamples %d' to view results", (resp.arg[1] + 7) & ~7);
break;
case 1:
PrintAndLog("No or unknown card found, aborting");
break;
case 2:
PrintAndLog("operation failed @ 0x%03.3x", resp.arg[1]);
break;
}
return resp.arg[0];
} }
int CmdLegicLoad(const char *Cmd) int CmdLegicLoad(const char *Cmd)