From b29d55f24b7bbdfad0e4c1644d06a046336c07ae Mon Sep 17 00:00:00 2001 From: marshmellow42 Date: Sat, 27 Jun 2015 22:49:26 -0400 Subject: [PATCH] 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 --- CHANGELOG.md | 6 ++-- armsrc/lfsampling.c | 9 ++++-- client/cmdhf14b.c | 76 +++++++++++++++++++++++++++++++++++++-------- client/cmdlf.c | 2 +- 4 files changed, 74 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f9546d9..0f420915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,13 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac ## [Unreleased][unreleased] ### 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) -- Added `hf 14b info` to `hf search` (marshmellow) +- Added `hf 14b reader` to `hf search` (marshmellow) ### 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) ### Fixed diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 120c0801..662ebf24 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -119,8 +119,7 @@ void LFSetupFPGAForADC(int divisor, bool lf_field) * @param silent - is true, now outputs are made. If false, dbprints the status * @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(); @@ -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) { sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR; 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; + + //if (trigger_threshold > 0 && sample < trigger_threshold) // + //continue; trigger_threshold = 0; sample_total_numbers++; diff --git a/client/cmdhf14b.c b/client/cmdhf14b.c index d1d668e9..acbd0c2c 100644 --- a/client/cmdhf14b.c +++ b/client/cmdhf14b.c @@ -197,6 +197,7 @@ int CmdHF14BCmdRaw (const char *Cmd) { return HF14BCmdRaw(reply, &crc, power, data, &datalen, true); } +// print full atqb info static void print_atqb_resp(uint8_t *data){ PrintAndLog (" UID: %s", sprint_hex(data+1,4)); PrintAndLog (" App Data: %s", sprint_hex(data+5,4)); @@ -245,6 +246,7 @@ static void print_atqb_resp(uint8_t *data){ return; } +// get SRx chip model (from UID) // from ST Microelectronics char *get_ST_Chip_Model(uint8_t data){ static char model[20]; char *retStr = model; @@ -263,7 +265,8 @@ char *get_ST_Chip_Model(uint8_t data){ 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 PrintAndLog(" UID: %s", sprint_hex(SwapEndian64(data,8,8),8)); PrintAndLog(" MFG: %02X, %s", data[6], getTagInfo(data[6])); @@ -271,8 +274,18 @@ static void print_st_info(uint8_t *data){ return; } +// 14b get and print Full Info (as much as we know) 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 //1d xx xx xx xx 20 00 08 01 00 = attrib xx=crc //a3 = ? (resp 03 e2 c2) @@ -294,19 +307,30 @@ int HF14BStdInfo(uint8_t *data, uint8_t *datalen){ //std read cmd data[0] = 0x05; data[1] = 0x00; - data[2] = 0x00; + data[2] = 0x08; if (HF14BCmdRaw(true, &crc, false, data, datalen, false)==0) return 0; if (data[0] != 0x50 || *datalen != 14 || !crc) return 0; PrintAndLog ("\n14443-3b tag found:"); - print_atqb_resp(data); + PrintAndLog (" UID: %s", sprint_hex(data+1,4)); return 1; } +// SRx get and print full info (needs more info...) 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; *datalen = 2; //wake cmd @@ -342,12 +366,12 @@ int HF14B_ST_Info(uint8_t *data, uint8_t *datalen){ if (*datalen != 10 || !crc) return 0; PrintAndLog("\n14443-3b ST tag found:"); - print_st_info(data); + print_st_general_info(data); return 1; } // 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; *datalen = 4; //std read cmd @@ -356,7 +380,7 @@ int HF14B_Other_Info(uint8_t *data, uint8_t *datalen){ data[2] = 0x3f; 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) { PrintAndLog ("\n14443-3b tag found:"); 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; data[0] = 0x0a; - if (HF14BCmdRaw(true, &crc, false, data, datalen, false)!=0) { + if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) { if (*datalen > 0) { PrintAndLog ("\n14443-3b tag found:"); 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; data[0] = 0x0c; - if (HF14BCmdRaw(true, &crc, false, data, datalen, false)!=0) { + if (HF14BCmdRaw(true, &crc, true, data, datalen, false)!=0) { if (*datalen > 0) { PrintAndLog ("\n14443-3b tag found:"); 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; } } - + rawClose(); return 0; - } +// get and print all info known about any known 14b tag int HF14BInfo(bool verbose){ uint8_t data[100]; uint8_t datalen = 5; @@ -407,16 +431,41 @@ int HF14BInfo(bool verbose){ // try unknown 14b read commands (to be identified later) // 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"); return 0; } +// menu command to get and print all info known about any known 14b tag int CmdHF14Binfo(const char *Cmd){ 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){ /* * For SRIX4K blocks 00 - 7F @@ -487,8 +536,9 @@ int CmdSriWrite( const char *Cmd){ static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, - {"info", CmdHF14Binfo, 0, "Find and print info about a 14b type tag (HF ISO 14443b)"}, - {"list", CmdHF14BList, 0, "[Deprecated] List ISO 14443b history"}, + {"info", CmdHF14Binfo, 0, "Find and print details about a 14443B tag"}, + {"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"}, {"snoop", CmdHF14BSnoop, 0, "Eavesdrop ISO 14443B"}, {"sri512read", CmdSri512Read, 0, "Read contents of a SRI512 tag"}, diff --git a/client/cmdlf.c b/client/cmdlf.c index edf02932..1acee39b 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -388,7 +388,7 @@ int usage_lf_config() PrintAndLog(" b Sets resolution of bits per sample. Default (max): 8"); PrintAndLog(" d 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(" t Sets trigger threshold. 0 means no threshold"); + PrintAndLog(" t Sets trigger threshold. 0 means no threshold (range: 0-128)"); PrintAndLog("Examples:"); PrintAndLog(" lf config b 8 L"); PrintAndLog(" Samples at 125KHz, 8bps."); -- 2.39.2