From 081151eabb3728d4db4e5cca0cab2b2e397e3851 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 24 Oct 2014 15:34:50 +0200 Subject: [PATCH] FIX: data mandemod read the wrong part of BigBuffer (no correct offset) --- client/cmddata.c | 36 +++++++------- client/cmdlfhitag.c | 6 +-- client/cmdlft55xx.c | 46 +++++++++--------- client/ui.c | 114 ++++++++------------------------------------ client/ui.h | 1 - 5 files changed, 62 insertions(+), 141 deletions(-) diff --git a/client/cmddata.c b/client/cmddata.c index f5b9fc9cc..c58f6f620 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -456,25 +456,23 @@ int CmdHpf(const char *Cmd) int CmdSamples(const char *Cmd) { - int cnt = 0; - int n; - uint8_t got[40000]; - - n = strtol(Cmd, NULL, 0); - if (n == 0) n = 512; - if (n > sizeof(got)) n = sizeof(got); + uint8_t got[36440] = {0x00}; + + int n = strtol(Cmd, NULL, 0); + if (n == 0) + n = 512; + if (n > sizeof(got)) + n = sizeof(got); - PrintAndLog("Reading %d samples from device memory\n", n); - GetFromBigBuf(got,n,3560); - WaitForResponse(CMD_ACK,NULL); - for (int j = 0; j < n; j++) { - GraphBuffer[cnt++] = ((int)got[j]) - 128; - } - - PrintAndLog("Done!\n"); - GraphTraceLen = n; - RepaintGraphWindow(); - return 0; + PrintAndLog("Reading %d samples from device memory\n", n); + GetFromBigBuf(got,n,3560); + WaitForResponse(CMD_ACK,NULL); + for (int j = 0; j < n; ++j) { + GraphBuffer[j] = ((int)got[j]) - 128; + } + GraphTraceLen = n; + RepaintGraphWindow(); + return 0; } int CmdLoad(const char *Cmd) @@ -684,7 +682,7 @@ int CmdManchesterDemod(const char *Cmd) // We cannot end up in this state, this means we are unsynchronized, // move up 1 bit: i++; - warnings++; + warnings++; PrintAndLog("Unsynchronized, resync..."); PrintAndLog("(too many of those messages mean the stream is not Manchester encoded)"); diff --git a/client/cmdlfhitag.c b/client/cmdlfhitag.c index 038ec887c..331f2c87a 100644 --- a/client/cmdlfhitag.c +++ b/client/cmdlfhitag.c @@ -230,7 +230,7 @@ int CmdLFHitagReader(const char *Cmd) { return 0; } -static command_t CommandTableHitag[] = +static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, {"list", CmdLFHitagList, 1, "List Hitag trace history"}, @@ -242,12 +242,12 @@ static command_t CommandTableHitag[] = int CmdLFHitag(const char *Cmd) { - CmdsParse(CommandTableHitag, Cmd); + CmdsParse(CommandTable, Cmd); return 0; } int CmdHelp(const char *Cmd) { - CmdsHelp(CommandTableHitag); + CmdsHelp(CommandTable); return 0; } diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 63cc2ee4e..5804fbc7e 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -29,7 +29,6 @@ static int CmdHelp(const char *Cmd); int CmdReadBlk(const char *Cmd) { int Block = -1; - sscanf(Cmd, "%d", &Block); if ((Block > 7) | (Block < 0)) { @@ -37,7 +36,6 @@ int CmdReadBlk(const char *Cmd) return 1; } - // this command fills up BigBuff UsbCommand c; c.cmd = CMD_T55XX_READ_BLOCK; c.d.asBytes[0] = 0x00; @@ -47,17 +45,18 @@ int CmdReadBlk(const char *Cmd) SendCommand(&c); WaitForResponse(CMD_ACK, NULL); - uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00}; +// uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00}; - GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560); //3560 -- should be offset.. - WaitForResponseTimeout(CMD_ACK,NULL, 1500); + // GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560); //3560 -- should be offset.. + // WaitForResponseTimeout(CMD_ACK,NULL, 1500); - for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) { - GraphBuffer[j] = (int)data[j]; - } - GraphTraceLen = LF_TRACE_BUFF_SIZE; + // for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) { + // GraphBuffer[j] = (int)data[j]; + // } + // GraphTraceLen = LF_TRACE_BUFF_SIZE; + CmdSamples("12000"); ManchesterDemod(Block); - RepaintGraphWindow(); + // RepaintGraphWindow(); return 0; } @@ -90,7 +89,7 @@ int CmdReadBlkPWD(const char *Cmd) WaitForResponseTimeout(CMD_ACK,NULL, 1500); for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) { - GraphBuffer[j] = ((int)data[j]) - 128; + GraphBuffer[j] = ((int)data[j]); } GraphTraceLen = LF_TRACE_BUFF_SIZE; ManchesterDemod(Block); @@ -155,8 +154,8 @@ int CmdReadTrace(const char *Cmd) PrintAndLog("Usage: lf t55xx trace [use data from Graphbuffer]"); PrintAndLog(" [use data from Graphbuffer], if not set, try reading data from tag."); PrintAndLog(""); - PrintAndLog(" sample: lf t55xx trace"); - PrintAndLog(" sample: lf t55xx trace 1"); + PrintAndLog(" sample: lf t55xx trace"); + PrintAndLog(" sample: lf t55xx trace 1"); return 0; } @@ -245,15 +244,14 @@ int CmdInfo(const char *Cmd){ PrintAndLog("Usage: lf t55xx info [use data from Graphbuffer]"); PrintAndLog(" [use data from Graphbuffer], if not set, try reading data from tag."); PrintAndLog(""); - PrintAndLog(" sample: lf t55xx info"); - PrintAndLog(" sample: lf t55xx info 1"); + PrintAndLog(" sample: lf t55xx info"); + PrintAndLog(" sample: lf t55xx info 1"); return 0; } if ( strlen(Cmd)==0){ CmdReadBlk("0"); - } - + } uint8_t bits[1000] = {0x00}; uint8_t * bitstream = bits; @@ -349,18 +347,20 @@ int CmdIceManchester(const char *Cmd){ int ManchesterDemod(int block){ int blockNum = -1; + uint8_t sizebyte = 32; + uint8_t offset = 5; uint32_t blockData; uint8_t bits[1000] = {0x00}; uint8_t * bitstream = bits; manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream); - blockData = PackBits(5, 32, bitstream); + blockData = PackBits(offset, sizebyte, bitstream); - if ( blockNum > -1){ - PrintAndLog(" Block %d : 0x%08X %s", blockNum, blockData, sprint_bin(bitstream+5,32) ); - }else{ - PrintAndLog(" Decoded : 0x%08X %s", blockData, sprint_bin(bitstream+5,32) ); - } + if ( blockNum < 0) + PrintAndLog(" Decoded : 0x%08X %s", blockData, sprint_bin(bitstream+offset,sizebyte) ); + else + PrintAndLog(" Block %d : 0x%08X %s", blockNum, blockData, sprint_bin(bitstream+offset,sizebyte) ); + return 0; } diff --git a/client/ui.c b/client/ui.c index 59ca72dcd..5d05da96c 100644 --- a/client/ui.c +++ b/client/ui.c @@ -18,7 +18,8 @@ #include #include "loclass/cipherutils.h" #include "ui.h" - +#include "cmdmain.h" +#include "cmddata.h" //#include #define M_PI 3.14159265358979323846264338327 @@ -117,7 +118,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){ startindex = DetectFirstTransition(data, len, high); PrintAndLog(" Clock : %d", clock); - PrintAndLog(" startindex : %d", startindex); + //PrintAndLog(" startindex : %d", startindex); if (high != 1) bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex); @@ -235,8 +236,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){ // No high value found, are we in a dampening field? if ( !hithigh ) { //PrintAndLog(" # Entering damp test at index : %d (%d)", z+j, j); - for (j = 0; j < clock; j++) - { + for (j = 0; j < clock; j++) { if ( (data[z+j] <= dampHi && data[z+j] >= dampLow) ){ @@ -392,83 +392,6 @@ void PrintPaddedManchester( uint8_t* bitStream, size_t len, size_t blocksize){ PrintAndLog(" %s", sprint_bin(bitStream+i, mod) ); } -void iceFsk(int * data, const size_t len){ - - //34359738 == 125khz (2^32 / 125) = - - // parameters - float phase_offset = 0.00f; // carrier phase offset - float frequency_offset = 0.30f; // carrier frequency offset - float wn = 0.01f; // pll bandwidth - float zeta = 0.707f; // pll damping factor - float K = 1000; // pll loop gain - size_t n = len; // number of samples - - // generate loop filter parameters (active PI design) - float t1 = K/(wn*wn); // tau_1 - float t2 = 2*zeta/wn; // tau_2 - - // feed-forward coefficients (numerator) - float b0 = (4*K/t1)*(1.+t2/2.0f); - float b1 = (8*K/t1); - float b2 = (4*K/t1)*(1.-t2/2.0f); - - // feed-back coefficients (denominator) - // a0 = 1.0 is implied - float a1 = -2.0f; - float a2 = 1.0f; - - // filter buffer - float v0=0.0f, v1=0.0f, v2=0.0f; - - // initialize states - float phi = phase_offset; // input signal's initial phase - float phi_hat = 0.0f; // PLL's initial phase - - unsigned int i; - float complex x,y; - float complex output[n]; - - for (i=0; i0 ? 1:0; printf("%d", bit ); } printf("\n"); printf("R/50 : "); - for (i =startPos ; i < len; i += 50){ + for (i =startPos ; i < adjustedLen; i += 50){ bit = data[i]>0 ? 1:0; printf("%d", bit ); } printf("\n"); diff --git a/client/ui.h b/client/ui.h index 666d7002c..8d16e0592 100644 --- a/client/ui.h +++ b/client/ui.h @@ -34,7 +34,6 @@ void PrintPaddedManchester( uint8_t * bitStream, size_t len, size_t blocksize); void ManchesterDiffDecodedString( const uint8_t *bitStream, size_t len, uint8_t invert ); int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int high, int low, int clock, int startIndex); int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int clock, int startIndex); -void iceFsk(int * data, const size_t len); void iceFsk2(int * data, const size_t len); void iceFsk3(int * data, const size_t len); #endif