]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
Added support for Legic tags to `hf search` command (#815)
authorAndrás Veres-Szentkirályi <vsza@vsza.hu>
Fri, 12 Apr 2019 06:52:18 +0000 (08:52 +0200)
committerpwpiwi <pwpiwi@users.noreply.github.com>
Fri, 12 Apr 2019 06:52:18 +0000 (08:52 +0200)
* hf legic: use CMD_ACK instead of Dbprintf
* hf search: add support for Legic tags

CHANGELOG.md
armsrc/legicrf.c
client/cmdhf.c
client/cmdhflegic.c

index 50c33d0f2092635eb445befe60b38b058cfa50f9..adff821fa083548c2e05c15680ebf0f6a5460317 100644 (file)
@@ -30,6 +30,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 - Added `hf plot` (piwi)
 - Added `hf mfp mad` `hf mf mad` parsing MAD1 and MAD2 (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]
 
index c848e6479bdf11a752d31e37d858e631514a1f65..97af88433e3afdce5f9c91b735636c954065bc73 100644 (file)
@@ -379,8 +379,9 @@ void LegicRfReader(int offset, int bytes) {
   // establish shared secret and detect card type
   DbpString("Reading card ...");
   uint8_t card_type = setup_phase(SESSION_IV);
+  uint8_t result = 0;
   if(init_card(card_type, &card) != 0) {
-    Dbprintf("No or unknown card found, aborting");
+    result = 1;
     goto OUT;
   }
 
@@ -397,17 +398,14 @@ void LegicRfReader(int offset, int bytes) {
   for(uint16_t i = 0; i < bytes; ++i) {
     int16_t byte = read_byte(offset + i, card.cmdsize);
     if(byte == -1) {
-      Dbprintf("operation failed @ 0x%03.3x", bytes);
+      result = 2;
       goto OUT;
     }
     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:
+  cmd_send(CMD_ACK, result, bytes, 0, &card, sizeof(card));
   FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
   LED_B_OFF();
   LED_C_OFF();
index 73b0bc76f4a4bead86536ec3eb389e170698d567..6d25cac0a4313da1f9bf6017973039ef27ef4d16 100644 (file)
@@ -66,6 +66,11 @@ int CmdHFSearch(const char *Cmd){
                PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
                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");
        return 0;
 }
index 8fbd45782f341f4e7ba064e2fe7c57102fe9ce81..66e8ebb145b4eb31b08eddf89883d76534b8db70 100644 (file)
@@ -18,6 +18,7 @@
 #include "cmdparser.h"
 #include "cmdmain.h"
 #include "util.h"
+#include "../include/legic.h"
 
 static int CmdHelp(const char *Cmd);
 
@@ -214,7 +215,21 @@ int CmdLegicRFRead(const char *Cmd)
   if(byte_count + offset > 1024) byte_count = 1024 - offset;
   UsbCommand c={CMD_READER_LEGIC_RF, {offset, byte_count, 0}};
   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)
Impressum, Datenschutz