mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-19 12:59:44 -07:00
Merge branch 'master' into fix_mifare_sim
This commit is contained in:
commit
faf7aa2b28
6 changed files with 38 additions and 17 deletions
|
@ -31,6 +31,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
|
||||||
- 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 Mifare Mini, Mifare 2K and 4K support to `hf mf sim` (piwi)
|
- Added Mifare Mini, Mifare 2K and 4K support to `hf mf sim` (piwi)
|
||||||
|
- Added Legic detection to `hf search` (dnet)
|
||||||
|
|
||||||
## [v3.1.0][2018-10-10]
|
## [v3.1.0][2018-10-10]
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -367,18 +367,20 @@ int Cmdmandecoderaw(const char *Cmd)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//by marshmellow
|
/**
|
||||||
//biphase decode
|
* @author marshmellow
|
||||||
//take 01 or 10 = 0 and 11 or 00 = 1
|
* biphase decode
|
||||||
//takes 2 arguments "offset" default = 0 if 1 it will shift the decode by one bit
|
* decdoes 01 or 10 to 0 and 11 or 00 to 1
|
||||||
// and "invert" default = 0 if 1 it will invert output
|
* param offset adjust start position
|
||||||
// the argument offset allows us to manually shift if the output is incorrect - [EDIT: now auto detects]
|
* param invert invert output
|
||||||
|
* param maxErr maximum tolerated errors
|
||||||
|
*/
|
||||||
int CmdBiphaseDecodeRaw(const char *Cmd)
|
int CmdBiphaseDecodeRaw(const char *Cmd)
|
||||||
{
|
{
|
||||||
size_t size=0;
|
size_t size=0;
|
||||||
int offset=0, invert=0, maxErr=20, errCnt=0;
|
int offset=0, invert=0, maxErr=20, errCnt=0;
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') {
|
if (strlen(Cmd) > 7 || cmdp == 'h' || cmdp == 'H') {
|
||||||
PrintAndLog("Usage: data biphaserawdecode [offset] [invert] [maxErr]");
|
PrintAndLog("Usage: data biphaserawdecode [offset] [invert] [maxErr]");
|
||||||
PrintAndLog(" Converts 10 or 01 to 1 and 11 or 00 to 0");
|
PrintAndLog(" Converts 10 or 01 to 1 and 11 or 00 to 0");
|
||||||
PrintAndLog(" --must have binary sequence in demodbuffer (run data askrawdemod first)");
|
PrintAndLog(" --must have binary sequence in demodbuffer (run data askrawdemod first)");
|
||||||
|
@ -427,7 +429,7 @@ int CmdBiphaseDecodeRaw(const char *Cmd)
|
||||||
int ASKbiphaseDemod(const char *Cmd, bool verbose)
|
int ASKbiphaseDemod(const char *Cmd, bool verbose)
|
||||||
{
|
{
|
||||||
//ask raw demod GraphBuffer first
|
//ask raw demod GraphBuffer first
|
||||||
int offset=0, clk=0, invert=0, maxErr=0;
|
int offset=0, clk=0, invert=0, maxErr=100;
|
||||||
sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr);
|
sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr);
|
||||||
|
|
||||||
uint8_t BitStream[MAX_GRAPH_TRACE_LEN];
|
uint8_t BitStream[MAX_GRAPH_TRACE_LEN];
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -137,7 +137,7 @@ int CmdFdxDemod(const char *Cmd){
|
||||||
|
|
||||||
//Differential Biphase / di-phase (inverted biphase)
|
//Differential Biphase / di-phase (inverted biphase)
|
||||||
//get binary from ask wave
|
//get binary from ask wave
|
||||||
if (!ASKbiphaseDemod("0 32 1 0", false)) {
|
if (!ASKbiphaseDemod("0 32 1 100", false)) {
|
||||||
if (g_debugMode) PrintAndLog("DEBUG: Error - FDX-B ASKbiphaseDemod failed");
|
if (g_debugMode) PrintAndLog("DEBUG: Error - FDX-B ASKbiphaseDemod failed");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ int CmdFdxDemod(const char *Cmd){
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdFdxRead(const char *Cmd) {
|
int CmdFdxRead(const char *Cmd) {
|
||||||
lf_read(true, 10000);
|
lf_read(true, 39999);
|
||||||
return CmdFdxDemod(Cmd);
|
return CmdFdxDemod(Cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue