mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-31 12:00:10 -07:00
change lf config threshold, hf 14b reader,
adjust lf config threshold to coincide with graph values and trigger on highs over the threshold or lows under the threshold * -1 split general hf 14b reader from full info printing
This commit is contained in:
parent
9152bda817
commit
b29d55f24b
4 changed files with 74 additions and 19 deletions
|
@ -5,11 +5,13 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
|
||||||
## [Unreleased][unreleased]
|
## [Unreleased][unreleased]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- Changed lf config's `threshold` to a graph (signed) metric and it will trigger on + or - value set to. (example: set to 50 and recording would begin at first graphed value of >= 50 or <= -50) (marshmellow)
|
||||||
- Changed `hf 14b write` to `hf 14b sriwrite` as it only applied to sri tags (marshmellow)
|
- Changed `hf 14b write` to `hf 14b sriwrite` as it only applied to sri tags (marshmellow)
|
||||||
- Added `hf 14b info` to `hf search` (marshmellow)
|
- Added `hf 14b reader` to `hf search` (marshmellow)
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Add `hf 14b info` to find and print info about std 14b tags and sri tags (using 14b raw commands in the client) (marshmellow)
|
- Add `hf 14b reader` to find and print general info about known 14b tags (marshmellow)
|
||||||
|
- Add `hf 14b info` to find and print full info about std 14b tags and sri tags (using 14b raw commands in the client) (marshmellow)
|
||||||
- Add PACE replay functionality (frederikmoellers)
|
- Add PACE replay functionality (frederikmoellers)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -119,8 +119,7 @@ void LFSetupFPGAForADC(int divisor, bool lf_field)
|
||||||
* @param silent - is true, now outputs are made. If false, dbprints the status
|
* @param silent - is true, now outputs are made. If false, dbprints the status
|
||||||
* @return the number of bits occupied by the samples.
|
* @return the number of bits occupied by the samples.
|
||||||
*/
|
*/
|
||||||
|
uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold, bool silent)
|
||||||
uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold,bool silent)
|
|
||||||
{
|
{
|
||||||
//.
|
//.
|
||||||
uint8_t *dest = BigBuf_get_addr();
|
uint8_t *dest = BigBuf_get_addr();
|
||||||
|
@ -151,8 +150,12 @@ uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averag
|
||||||
if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
|
if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
|
||||||
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
||||||
LED_D_OFF();
|
LED_D_OFF();
|
||||||
if (trigger_threshold > 0 && sample < trigger_threshold)
|
// threshold either high or low values 128 = center 0. if trigger = 178
|
||||||
|
if ((trigger_threshold > 0) && (sample < (trigger_threshold+128)) && (sample > (128-trigger_threshold))) //
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
//if (trigger_threshold > 0 && sample < trigger_threshold) //
|
||||||
|
//continue;
|
||||||
|
|
||||||
trigger_threshold = 0;
|
trigger_threshold = 0;
|
||||||
sample_total_numbers++;
|
sample_total_numbers++;
|
||||||
|
|
|
@ -197,6 +197,7 @@ int CmdHF14BCmdRaw (const char *Cmd) {
|
||||||
return HF14BCmdRaw(reply, &crc, power, data, &datalen, true);
|
return HF14BCmdRaw(reply, &crc, power, data, &datalen, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// print full atqb info
|
||||||
static void print_atqb_resp(uint8_t *data){
|
static void print_atqb_resp(uint8_t *data){
|
||||||
PrintAndLog (" UID: %s", sprint_hex(data+1,4));
|
PrintAndLog (" UID: %s", sprint_hex(data+1,4));
|
||||||
PrintAndLog (" App Data: %s", sprint_hex(data+5,4));
|
PrintAndLog (" App Data: %s", sprint_hex(data+5,4));
|
||||||
|
@ -245,6 +246,7 @@ static void print_atqb_resp(uint8_t *data){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get SRx chip model (from UID) // from ST Microelectronics
|
||||||
char *get_ST_Chip_Model(uint8_t data){
|
char *get_ST_Chip_Model(uint8_t data){
|
||||||
static char model[20];
|
static char model[20];
|
||||||
char *retStr = model;
|
char *retStr = model;
|
||||||
|
@ -263,7 +265,8 @@ char *get_ST_Chip_Model(uint8_t data){
|
||||||
return retStr;
|
return retStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_st_info(uint8_t *data){
|
// print UID info from SRx chips (ST Microelectronics)
|
||||||
|
static void print_st_general_info(uint8_t *data){
|
||||||
//uid = first 8 bytes in data
|
//uid = first 8 bytes in data
|
||||||
PrintAndLog(" UID: %s", sprint_hex(SwapEndian64(data,8,8),8));
|
PrintAndLog(" UID: %s", sprint_hex(SwapEndian64(data,8,8),8));
|
||||||
PrintAndLog(" MFG: %02X, %s", data[6], getTagInfo(data[6]));
|
PrintAndLog(" MFG: %02X, %s", data[6], getTagInfo(data[6]));
|
||||||
|
@ -271,8 +274,18 @@ static void print_st_info(uint8_t *data){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 14b get and print Full Info (as much as we know)
|
||||||
int HF14BStdInfo(uint8_t *data, uint8_t *datalen){
|
int HF14BStdInfo(uint8_t *data, uint8_t *datalen){
|
||||||
|
if (!HF14BStdReader(data,datalen)) return 0;
|
||||||
|
|
||||||
|
//add more info here
|
||||||
|
print_atqb_resp(data);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 14b get and print UID only (general info)
|
||||||
|
int HF14BStdReader(uint8_t *data, uint8_t *datalen){
|
||||||
//05 00 00 = find one tag in field
|
//05 00 00 = find one tag in field
|
||||||
//1d xx xx xx xx 20 00 08 01 00 = attrib xx=crc
|
//1d xx xx xx xx 20 00 08 01 00 = attrib xx=crc
|
||||||
//a3 = ? (resp 03 e2 c2)
|
//a3 = ? (resp 03 e2 c2)
|
||||||
|
@ -294,19 +307,30 @@ int HF14BStdInfo(uint8_t *data, uint8_t *datalen){
|
||||||
//std read cmd
|
//std read cmd
|
||||||
data[0] = 0x05;
|
data[0] = 0x05;
|
||||||
data[1] = 0x00;
|
data[1] = 0x00;
|
||||||
data[2] = 0x00;
|
data[2] = 0x08;
|
||||||
|
|
||||||
if (HF14BCmdRaw(true, &crc, false, data, datalen, false)==0) return 0;
|
if (HF14BCmdRaw(true, &crc, false, data, datalen, false)==0) return 0;
|
||||||
|
|
||||||
if (data[0] != 0x50 || *datalen != 14 || !crc) return 0;
|
if (data[0] != 0x50 || *datalen != 14 || !crc) return 0;
|
||||||
|
|
||||||
PrintAndLog ("\n14443-3b tag found:");
|
PrintAndLog ("\n14443-3b tag found:");
|
||||||
print_atqb_resp(data);
|
PrintAndLog (" UID: %s", sprint_hex(data+1,4));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SRx get and print full info (needs more info...)
|
||||||
int HF14B_ST_Info(uint8_t *data, uint8_t *datalen){
|
int HF14B_ST_Info(uint8_t *data, uint8_t *datalen){
|
||||||
|
if (!HF14B_ST_Reader(data, datalen)) return 0;
|
||||||
|
|
||||||
|
//add locking bit information here.
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SRx get and print general info about SRx chip from UID
|
||||||
|
int HF14B_ST_Reader(uint8_t *data, uint8_t *datalen){
|
||||||
bool crc = true;
|
bool crc = true;
|
||||||
*datalen = 2;
|
*datalen = 2;
|
||||||
//wake cmd
|
//wake cmd
|
||||||
|
@ -342,12 +366,12 @@ int HF14B_ST_Info(uint8_t *data, uint8_t *datalen){
|
||||||
if (*datalen != 10 || !crc) return 0;
|
if (*datalen != 10 || !crc) return 0;
|
||||||
|
|
||||||
PrintAndLog("\n14443-3b ST tag found:");
|
PrintAndLog("\n14443-3b ST tag found:");
|
||||||
print_st_info(data);
|
print_st_general_info(data);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// test for other 14b type tags (mimic another reader - don't have tags to identify)
|
// test for other 14b type tags (mimic another reader - don't have tags to identify)
|
||||||
int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){
|
int HF14B_Other_Reader(uint8_t *data, uint8_t *datalen){
|
||||||
bool crc = true;
|
bool crc = true;
|
||||||
*datalen = 4;
|
*datalen = 4;
|
||||||
//std read cmd
|
//std read cmd
|
||||||
|
@ -356,7 +380,7 @@ int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){
|
||||||
data[2] = 0x3f;
|
data[2] = 0x3f;
|
||||||
data[3] = 0x80;
|
data[3] = 0x80;
|
||||||
|
|
||||||
if (HF14BCmdRaw(true, &crc, false, data, datalen, false)!=0) {
|
if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
|
||||||
if (*datalen > 2 || !crc) {
|
if (*datalen > 2 || !crc) {
|
||||||
PrintAndLog ("\n14443-3b tag found:");
|
PrintAndLog ("\n14443-3b tag found:");
|
||||||
PrintAndLog ("Unknown tag type answered to a 0x000b3f80 command ans:");
|
PrintAndLog ("Unknown tag type answered to a 0x000b3f80 command ans:");
|
||||||
|
@ -369,7 +393,7 @@ int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){
|
||||||
*datalen = 1;
|
*datalen = 1;
|
||||||
data[0] = 0x0a;
|
data[0] = 0x0a;
|
||||||
|
|
||||||
if (HF14BCmdRaw(true, &crc, false, data, datalen, false)!=0) {
|
if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
|
||||||
if (*datalen > 0) {
|
if (*datalen > 0) {
|
||||||
PrintAndLog ("\n14443-3b tag found:");
|
PrintAndLog ("\n14443-3b tag found:");
|
||||||
PrintAndLog ("Unknown tag type answered to a 0x0A command ans:");
|
PrintAndLog ("Unknown tag type answered to a 0x0A command ans:");
|
||||||
|
@ -382,7 +406,7 @@ int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){
|
||||||
*datalen = 1;
|
*datalen = 1;
|
||||||
data[0] = 0x0c;
|
data[0] = 0x0c;
|
||||||
|
|
||||||
if (HF14BCmdRaw(true, &crc, false, data, datalen, false)!=0) {
|
if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) {
|
||||||
if (*datalen > 0) {
|
if (*datalen > 0) {
|
||||||
PrintAndLog ("\n14443-3b tag found:");
|
PrintAndLog ("\n14443-3b tag found:");
|
||||||
PrintAndLog ("Unknown tag type answered to a 0x0C command ans:");
|
PrintAndLog ("Unknown tag type answered to a 0x0C command ans:");
|
||||||
|
@ -390,11 +414,11 @@ int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
rawClose();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get and print all info known about any known 14b tag
|
||||||
int HF14BInfo(bool verbose){
|
int HF14BInfo(bool verbose){
|
||||||
uint8_t data[100];
|
uint8_t data[100];
|
||||||
uint8_t datalen = 5;
|
uint8_t datalen = 5;
|
||||||
|
@ -407,16 +431,41 @@ int HF14BInfo(bool verbose){
|
||||||
|
|
||||||
// try unknown 14b read commands (to be identified later)
|
// try unknown 14b read commands (to be identified later)
|
||||||
// could be read of calypso, CEPAS, moneo, or pico pass.
|
// could be read of calypso, CEPAS, moneo, or pico pass.
|
||||||
if (HF14B_Other_Info(data, &datalen)) return 1;
|
if (HF14B_Other_Reader(data, &datalen)) return 1;
|
||||||
|
|
||||||
if (verbose) PrintAndLog("no 14443B tag found");
|
if (verbose) PrintAndLog("no 14443B tag found");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// menu command to get and print all info known about any known 14b tag
|
||||||
int CmdHF14Binfo(const char *Cmd){
|
int CmdHF14Binfo(const char *Cmd){
|
||||||
return HF14BInfo(true);
|
return HF14BInfo(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get and print general info about all known 14b chips
|
||||||
|
int HF14BReader(bool verbose){
|
||||||
|
uint8_t data[100];
|
||||||
|
uint8_t datalen = 5;
|
||||||
|
|
||||||
|
// try std 14b (atqb)
|
||||||
|
if (HF14BStdReader(data, &datalen)) return 1;
|
||||||
|
|
||||||
|
// try st 14b
|
||||||
|
if (HF14B_ST_Reader(data, &datalen)) return 1;
|
||||||
|
|
||||||
|
// try unknown 14b read commands (to be identified later)
|
||||||
|
// could be read of calypso, CEPAS, moneo, or pico pass.
|
||||||
|
if (HF14B_Other_Reader(data, &datalen)) return 1;
|
||||||
|
|
||||||
|
if (verbose) PrintAndLog("no 14443B tag found");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// menu command to get and print general info about all known 14b chips
|
||||||
|
int CmdHF14BReader(const char *Cmd){
|
||||||
|
return HF14BReader(true);
|
||||||
|
}
|
||||||
|
|
||||||
int CmdSriWrite( const char *Cmd){
|
int CmdSriWrite( const char *Cmd){
|
||||||
/*
|
/*
|
||||||
* For SRIX4K blocks 00 - 7F
|
* For SRIX4K blocks 00 - 7F
|
||||||
|
@ -487,8 +536,9 @@ int CmdSriWrite( const char *Cmd){
|
||||||
static command_t CommandTable[] =
|
static command_t CommandTable[] =
|
||||||
{
|
{
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"info", CmdHF14Binfo, 0, "Find and print info about a 14b type tag (HF ISO 14443b)"},
|
{"info", CmdHF14Binfo, 0, "Find and print details about a 14443B tag"},
|
||||||
{"list", CmdHF14BList, 0, "[Deprecated] List ISO 14443b history"},
|
{"list", CmdHF14BList, 0, "[Deprecated] List ISO 14443B history"},
|
||||||
|
{"reader", CmdHF14BReader, 0, "Act as a 14443B reader to identify a tag"},
|
||||||
{"sim", CmdHF14BSim, 0, "Fake ISO 14443B tag"},
|
{"sim", CmdHF14BSim, 0, "Fake ISO 14443B tag"},
|
||||||
{"snoop", CmdHF14BSnoop, 0, "Eavesdrop ISO 14443B"},
|
{"snoop", CmdHF14BSnoop, 0, "Eavesdrop ISO 14443B"},
|
||||||
{"sri512read", CmdSri512Read, 0, "Read contents of a SRI512 tag"},
|
{"sri512read", CmdSri512Read, 0, "Read contents of a SRI512 tag"},
|
||||||
|
|
|
@ -388,7 +388,7 @@ int usage_lf_config()
|
||||||
PrintAndLog(" b <bps> Sets resolution of bits per sample. Default (max): 8");
|
PrintAndLog(" b <bps> Sets resolution of bits per sample. Default (max): 8");
|
||||||
PrintAndLog(" d <decim> Sets decimation. A value of N saves only 1 in N samples. Default: 1");
|
PrintAndLog(" d <decim> Sets decimation. A value of N saves only 1 in N samples. Default: 1");
|
||||||
PrintAndLog(" a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1");
|
PrintAndLog(" a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1");
|
||||||
PrintAndLog(" t <threshold> Sets trigger threshold. 0 means no threshold");
|
PrintAndLog(" t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128)");
|
||||||
PrintAndLog("Examples:");
|
PrintAndLog("Examples:");
|
||||||
PrintAndLog(" lf config b 8 L");
|
PrintAndLog(" lf config b 8 L");
|
||||||
PrintAndLog(" Samples at 125KHz, 8bps.");
|
PrintAndLog(" Samples at 125KHz, 8bps.");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue