From: iceman1001 Date: Sat, 21 Nov 2015 17:48:58 +0000 (+0100) Subject: ADD: lf indalademod output, The binary string is now printed with linebreaks every... X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/52f2df615b806434ec7017349d6920a5cb9ab1c2?hp=6426f6ba86c8a2d3e390fab1ced35223a92d8647 ADD: lf indalademod output, The binary string is now printed with linebreaks every 16bits ADD: lf awid code is modified, some minor changes in outputs ADD: lf t55xx write now prints the password on the same row, looks better when using the new "lf t55xx wipe" command. ADD: the ioprox T55X7_IOPROX_CONFIG_BLOCK block. --- diff --git a/client/cmddata.c b/client/cmddata.c index b141b6f8..3d56a971 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -125,9 +125,7 @@ int CmdPrintDemodBuff(const char *Cmd) if (numBits==0) return 0; PrintAndLog("DemodBuffer: %s",hex); } else { - //setDemodBuf(DemodBuffer, DemodBufferLen-offset, offset); - char *bin = sprint_bin_break(DemodBuffer+offset,numBits,16); - PrintAndLog("DemodBuffer:\n%s",bin); + PrintAndLog("DemodBuffer:\n%s", sprint_bin_break(DemodBuffer+offset,numBits,16)); } return 1; } @@ -1628,7 +1626,7 @@ int CmdIndalaDecode(const char *Cmd) uid1=bytebits_to_byte(DemodBuffer,32); uid2=bytebits_to_byte(DemodBuffer+32,32); if (DemodBufferLen==64){ - PrintAndLog("Indala UID=%s (%x%08x)", sprint_bin(DemodBuffer,DemodBufferLen), uid1, uid2); + PrintAndLog("Indala UID=%s (%x%08x)", sprint_bin_break(DemodBuffer,DemodBufferLen,16), uid1, uid2); } else { uid3=bytebits_to_byte(DemodBuffer+64,32); uid4=bytebits_to_byte(DemodBuffer+96,32); @@ -1636,7 +1634,7 @@ int CmdIndalaDecode(const char *Cmd) uid6=bytebits_to_byte(DemodBuffer+160,32); uid7=bytebits_to_byte(DemodBuffer+192,32); PrintAndLog("Indala UID=%s (%x%08x%08x%08x%08x%08x%08x)", - sprint_bin(DemodBuffer,DemodBufferLen), uid1, uid2, uid3, uid4, uid5, uid6, uid7); + sprint_bin_break(DemodBuffer,DemodBufferLen,16), uid1, uid2, uid3, uid4, uid5, uid6, uid7); } if (g_debugMode){ PrintAndLog("DEBUG: printing demodbuffer:"); @@ -1959,10 +1957,7 @@ int getSamples(const char *Cmd, bool silent) int n = strtol(Cmd, NULL, 0); - if (n == 0) - n = sizeof(got); - - if (n > sizeof(got)) + if ( n == 0 || n > sizeof(got)) n = sizeof(got); PrintAndLog("Reading %d bytes from device memory\n", n); @@ -1976,8 +1971,7 @@ int getSamples(const char *Cmd, bool silent) if(response.arg[0] > 0) { sample_config *sc = (sample_config *) response.d.asBytes; - PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample - , sc->decimation); + PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample, sc->decimation); bits_per_sample = sc->bits_per_sample; } if(bits_per_sample < 8) diff --git a/client/cmdhfmfu.c b/client/cmdhfmfu.c index 07609339..6ccdd088 100644 --- a/client/cmdhfmfu.c +++ b/client/cmdhfmfu.c @@ -1848,9 +1848,8 @@ int CmdHF14AMfuELoad(const char *Cmd) char ctmp = param_getchar(Cmd, 0); - if ( ctmp == 'h' || ctmp == 0x00) { - return usage_hf_mfu_eload(); - } + if ( ctmp == 'h' || ctmp == 0x00) return usage_hf_mfu_eload(); + /* switch (ctmp) { case '0' : numBlocks = 5*4; break; diff --git a/client/cmdlfawid.c b/client/cmdlfawid.c index ed56f660..3b189efe 100644 --- a/client/cmdlfawid.c +++ b/client/cmdlfawid.c @@ -19,14 +19,13 @@ #include "cmdmain.h" static int CmdHelp(const char *Cmd); - int usage_lf_awid_fskdemod(void) { PrintAndLog("Enables AWID26 compatible reader mode printing details of scanned AWID26 tags."); PrintAndLog("By default, values are printed and logged until the button is pressed or another USB command is issued."); PrintAndLog("If the ['1'] option is provided, reader mode is exited after reading a single AWID26 card."); PrintAndLog(""); PrintAndLog("Usage: lf awid fskdemod ['1']"); - PrintAndLog(" Options : "); + PrintAndLog("Options :"); PrintAndLog(" 1 : (optional) stop after reading a single card"); PrintAndLog(""); PrintAndLog(" sample : lf awid fskdemod"); @@ -40,11 +39,11 @@ int usage_lf_awid_sim(void) { PrintAndLog("Per AWID26 format, the facility-code is 8-bit and the card number is 16-bit. Larger values are truncated."); PrintAndLog(""); PrintAndLog("Usage: lf awid sim "); - PrintAndLog(" Options : "); - PrintAndLog(" : 8-bit value representing the AWID facility code"); - PrintAndLog(" : 16-bit value representing the AWID card number"); + PrintAndLog("Options :"); + PrintAndLog(" : 8-bit value AWID facility code"); + PrintAndLog(" : 16-bit value AWID card number"); PrintAndLog(""); - PrintAndLog(" sample : lf awid sim 224 1337"); + PrintAndLog("sample : lf awid sim 224 1337"); return 0; } @@ -54,21 +53,21 @@ int usage_lf_awid_clone(void) { PrintAndLog("Per AWID26 format, the facility-code is 8-bit and the card number is 16-bit. Larger values are truncated."); PrintAndLog(""); PrintAndLog("Usage: lf awid clone "); - PrintAndLog(" Options : "); - PrintAndLog(" : 8-bit value representing the AWID facility code"); - PrintAndLog(" : 16-bit value representing the AWID card number"); + PrintAndLog("Options :"); + PrintAndLog(" : 8-bit value AWID facility code"); + PrintAndLog(" : 16-bit value AWID card number"); PrintAndLog(""); - PrintAndLog(" sample : lf awid clone 224 1337"); + PrintAndLog("sample : lf awid clone 224 1337"); return 0; } -int CmdAWIDDemodFSK(const char *Cmd) -{ - int findone=0; - if(Cmd[0]=='1') findone=1; - if (Cmd[0]=='h' || Cmd[0] == 'H') return usage_lf_awid_fskdemod(); - UsbCommand c={CMD_AWID_DEMOD_FSK}; - c.arg[0]=findone; +int CmdAWIDDemodFSK(const char *Cmd) { + int findone = 0; + if (Cmd[0] == 'h' || Cmd[0] == 'H') return usage_lf_awid_fskdemod(); + + if (Cmd[0] == '1') findone = 1; + + UsbCommand c = {CMD_AWID_DEMOD_FSK, {findone, 0, 0}}; clearCommandBuffer(); SendCommand(&c); return 0; @@ -76,114 +75,133 @@ int CmdAWIDDemodFSK(const char *Cmd) int getAWIDBits(unsigned int fc, unsigned int cn, uint8_t *AWIDBits) { - int i; - uint32_t fcode=(fc & 0x000000FF), cnum=(cn & 0x0000FFFF), uBits=0; - if (fcode != fc) - PrintAndLog("NOTE: Facility code truncated for AWID26 format (8-bit facility code)"); - if (cnum!=cn) - PrintAndLog("NOTE: Card number was truncated for AWID26 format (16-bit card number)"); - - AWIDBits[0] = 0x01; // 6-bit Preamble with 2 parity bits - AWIDBits[1] = 0x1D; // First byte from card format (26-bit) plus parity bits - AWIDBits[2] = 0x80; // Set the next two bits as 0b10 to finish card format - uBits = (fcode<<4) + (cnum>>12); - if (!parityTest(uBits,12,0)) - AWIDBits[2] |= (1<<5); // If not already even parity, set bit to make even - uBits = AWIDBits[2]>>5; - if (!parityTest(uBits, 3, 1)) - AWIDBits[2] |= (1<<4); - uBits = fcode>>5; // first 3 bits of facility-code - AWIDBits[2] += (uBits<<1); - if (!parityTest(uBits, 3, 1)) - AWIDBits[2]++; // Set parity bit to make odd parity - uBits = (fcode & 0x1C)>>2; - AWIDBits[3] = 0; - if (!parityTest(uBits,3,1)) - AWIDBits[3] |= (1<<4); - AWIDBits[3] += (uBits<<5); - uBits = ((fcode & 0x3)<<1) + ((cnum & 0x8000)>>15); // Grab/shift 2 LSBs from facility code and add shifted MSB from cardnum - if (!parityTest(uBits,3,1)) - AWIDBits[3]++; // Set LSB for parity - AWIDBits[3]+= (uBits<<1); - uBits = (cnum & 0x7000)>>12; - AWIDBits[4] = uBits<<5; - if (!parityTest(uBits,3,1)) - AWIDBits[4] |= (1<<4); - uBits = (cnum & 0x0E00)>>9; - AWIDBits[4] += (uBits<<1); - if (!parityTest(uBits,3,1)) - AWIDBits[4]++; // Set LSB for parity - uBits = (cnum & 0x1C0)>>6; // Next bits from card number - AWIDBits[5]=(uBits<<5); - if (!parityTest(uBits,3,1)) - AWIDBits[5] |= (1<<4); // Set odd parity bit as needed - uBits = (cnum & 0x38)>>3; - AWIDBits[5]+= (uBits<<1); - if (!parityTest(uBits,3,1)) - AWIDBits[5]++; // Set odd parity bit as needed - uBits = (cnum & 0x7); // Last three bits from card number! - AWIDBits[6] = (uBits<<5); - if (!parityTest(uBits,3,1)) - AWIDBits[6] |= (1<<4); - uBits = (cnum & 0x0FFF); - if (!parityTest(uBits,12,1)) - AWIDBits[6] |= (1<<3); - else - AWIDBits[6]++; - for (i = 7; i<12; i++) - AWIDBits[i]=0x11; - return 1; + //int i; + uint32_t fcode = (fc & 0x000000FF); + uint32_t cnum = (cn & 0x0000FFFF); + uint32_t uBits = 0; + + if (fcode != fc) + PrintAndLog("NOTE: Facility code truncated for AWID26 format (8-bit facility code)"); + if (cnum!=cn) + PrintAndLog("NOTE: Card number was truncated for AWID26 format (16-bit card number)"); + + uint8_t pre[] = {0x01, 0x1D, 0x80, 0x00,0x00,0x00,0x00, 0x11, 0x11, 0x11, 0x11, 0x11}; + memcpy(AWIDBits, pre , sizeof(pre)); + + // AWIDBits[0] = 0x01; // 6-bit Preamble with 2 parity bits + // AWIDBits[1] = 0x1D; // First byte from card format (26-bit) plus parity bits + // AWIDBits[2] = 0x80; // Set the next two bits as 0b10 to finish card format + + // for (i = 7; i<12; i++) + // AWIDBits[i]=0x11; + + uBits = (fcode<<4) + (cnum>>12); + + if (!parityTest(uBits,12,0)) AWIDBits[2] |= (1<<5); // If not already even parity, set bit to make even + + uBits = AWIDBits[2]>>5; + + if (!parityTest(uBits, 3, 1)) AWIDBits[2] |= (1<<4); + + uBits = fcode>>5; // first 3 bits of facility-code + AWIDBits[2] += (uBits<<1); + + if (!parityTest(uBits, 3, 1)) AWIDBits[2]++; // Set parity bit to make odd parity + + uBits = (fcode & 0x1C)>>2; + AWIDBits[3] = 0; + + if (!parityTest(uBits,3,1)) AWIDBits[3] |= (1<<4); + + AWIDBits[3] += (uBits<<5); + uBits = ((fcode & 0x3)<<1) + ((cnum & 0x8000)>>15); // Grab/shift 2 LSBs from facility code and add shifted MSB from cardnum + + if (!parityTest(uBits,3,1)) AWIDBits[3]++; // Set LSB for parity + + AWIDBits[3]+= (uBits<<1); + uBits = (cnum & 0x7000)>>12; + AWIDBits[4] = uBits<<5; + + if (!parityTest(uBits,3,1)) AWIDBits[4] |= (1<<4); + + uBits = (cnum & 0x0E00)>>9; + AWIDBits[4] += (uBits<<1); + + if (!parityTest(uBits,3,1)) AWIDBits[4]++; // Set LSB for parity + + uBits = (cnum & 0x1C0)>>6; // Next bits from card number + AWIDBits[5]=(uBits<<5); + + if (!parityTest(uBits,3,1)) AWIDBits[5] |= (1<<4); // Set odd parity bit as needed + + uBits = (cnum & 0x38)>>3; + AWIDBits[5]+= (uBits<<1); + + if (!parityTest(uBits,3,1)) AWIDBits[5]++; // Set odd parity bit as needed + + uBits = (cnum & 0x7); // Last three bits from card number! + AWIDBits[6] = (uBits<<5); + + if (!parityTest(uBits,3,1)) AWIDBits[6] |= (1<<4); + + uBits = (cnum & 0x0FFF); + + if (!parityTest(uBits,12,1)) + AWIDBits[6] |= (1<<3); + else + AWIDBits[6]++; + + return 1; } int CmdAWIDSim(const char *Cmd) { - uint32_t fcode = 0, cnum = 0, fc=0, cn=0, i=0; - uint8_t *BS, BitStream[12]; - uint64_t arg1 = (10<<8) + 8; // fcHigh = 10, fcLow = 8 - uint64_t arg2 = 50; // clk RF/50 invert=0 - BS = BitStream; - if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) { - return usage_lf_awid_sim(); - } - - fcode=(fc & 0x000000FF); - cnum=(cn & 0x0000FFFF); - if (fc!=fcode) - PrintAndLog("Facility-Code (%u) truncated to 8-bits: %u",fc,fcode); - if (cn!=cnum) - PrintAndLog("Card number (%u) truncated to 16-bits: %u",cn,cnum); - PrintAndLog("Emulating AWID26 -- FC: %u; CN: %u\n",fcode,cnum); - PrintAndLog("Press pm3-button to abort simulation or run another command"); - // AWID uses: fcHigh: 10, fcLow: 8, clk: 50, invert: 0 - if (getAWIDBits(fc, cn, BS)) { - PrintAndLog("Running 'lf simfsk c 50 H 10 L 8 d %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x'", - BS[0],BS[1],BS[2],BS[3],BS[4],BS[5],BS[6], - BS[7],BS[8],BS[9],BS[10],BS[11]); - } else - PrintAndLog("Error with tag bitstream generation."); - UsbCommand c; - c.cmd = CMD_FSK_SIM_TAG; - c.arg[0] = arg1; // fcHigh<<8 + fcLow - c.arg[1] = arg2; // Inversion and clk setting - c.arg[2] = 96; // Bitstream length: 96-bits == 12 bytes - for (i=0; i < 96; i++) - c.d.asBytes[i] = (BS[i/8] & (1<<(7-(i%8))))?1:0; - clearCommandBuffer(); - SendCommand(&c); - return 0; + uint32_t fcode = 0, cnum = 0, fc=0, cn=0, i=0; + uint8_t bits[12]; + uint8_t *bs=bits; + + uint64_t arg1 = (10<<8) + 8; // fcHigh = 10, fcLow = 8 + uint64_t arg2 = 50; // clk RF/50 invert=0 + + if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) return usage_lf_awid_sim(); + + fcode = (fc & 0x000000FF); + cnum = (cn & 0x0000FFFF); + + if (fc!=fcode) PrintAndLog("Facility-Code (%u) truncated to 8-bits: %u", fc, fcode); + if (cn!=cnum) PrintAndLog("Card number (%u) truncated to 16-bits: %u", cn, cnum); + + PrintAndLog("Emulating AWID26 -- FC: %u; CN: %u\n", fcode, cnum); + PrintAndLog("Press pm3-button to abort simulation or run another command"); + + if (!getAWIDBits(fc, cn, bs)) { + PrintAndLog("Error with tag bitstream generation."); + return 1; + } + // AWID uses: fcHigh: 10, fcLow: 8, clk: 50, invert: 0 + PrintAndLog("Running 'lf simfsk c 50 H 10 L 8 d %s'", sprint_hex(bs, sizeof(bs))); + + // arg1 --- fcHigh<<8 + fcLow + // arg2 --- Inversion and clk setting + // 96 --- Bitstream length: 96-bits == 12 bytes + UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, 96}}; + + for (i=0; i < 96; i++) + c.d.asBytes[i] = (bs[i/8] & (1<<(7-(i%8)))) ? 1 : 0; + + clearCommandBuffer(); + SendCommand(&c); + return 0; } int CmdAWIDClone(const char *Cmd) { - clearCommandBuffer(); - uint32_t fc=0,cn=0,blocks[4] = {0x00107060, 0, 0, 0x11111111}, i=0; - uint8_t BitStream[12]; - uint8_t *BS=BitStream; - UsbCommand c, resp; - - if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) { - return usage_lf_awid_clone(); - } + uint32_t blocks[4] = {0x00107060, 0, 0, 0x11111111}; + uint32_t fc=0, cn=0, i=0; + uint8_t bits[12]; + uint8_t *bs=bits; + + if (sscanf(Cmd, "%u %u", &fc, &cn ) != 2) return usage_lf_awid_clone(); if ((fc & 0xFF) != fc) { fc &= 0xFF; @@ -194,26 +212,36 @@ int CmdAWIDClone(const char *Cmd) cn &= 0xFFFF; PrintAndLog("Card Number Truncated to 16-bits (AWID26): %u", cn); } + + if ( !getAWIDBits(fc, cn, bs)) { + PrintAndLog("Error with tag bitstream generation."); + return 1; + } + + PrintAndLog("Preparing to clone AWID26 to T55x7 with FC: %u, CN: %u ", fc, cn); + PrintAndLog("Raw: %s", sprint_hex(bs, sizeof(bs))); + + blocks[1] = (bs[0]<<24) + (bs[1]<<16) + (bs[2]<<8) + (bs[3]); + blocks[2] = (bs[4]<<24) + (bs[5]<<16) + (bs[6]<<8) + (bs[7]); + + PrintAndLog("Blk | Data "); + PrintAndLog("----+------------"); + PrintAndLog(" 00 | 0x%08x", blocks[0]); + PrintAndLog(" 01 | 0x%08x", blocks[1]); + PrintAndLog(" 02 | 0x%08x", blocks[2]); + PrintAndLog(" 03 | 0x%08x", blocks[3]); + + UsbCommand resp; + UsbCommand c = {CMD_T55XX_WRITE_BLOCK, {0,0,0}}; - if (getAWIDBits(fc,cn,BS)) { - PrintAndLog("Preparing to clone AWID26 to T55x7 with FC: %u, CN: %u (Raw: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x)", - fc,cn, BS[0],BS[1],BS[2],BS[3],BS[4],BS[5],BS[6],BS[7],BS[8],BS[9],BS[10],BS[11]); - blocks[1] = (BS[0]<<24) + (BS[1]<<16) + (BS[2]<<8) + (BS[3]); - blocks[2] = (BS[4]<<24) + (BS[5]<<16) + (BS[6]<<8) + (BS[7]); - PrintAndLog("Block 0: 0x%08x", blocks[0]); - PrintAndLog("Block 1: 0x%08x", blocks[1]); - PrintAndLog("Block 2: 0x%08x", blocks[2]); - PrintAndLog("Block 3: 0x%08x", blocks[3]); - for (i=0; i<4; i++) { - c.cmd = CMD_T55XX_WRITE_BLOCK; - c.arg[0] = blocks[i]; - c.arg[1] = i; - c.arg[2] = 0; - SendCommand(&c); - if (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)){ - PrintAndLog("Error occurred, device did not respond during write operation."); - return -1; - } + for (i=0; i<4; i++) { + c.arg[0] = blocks[i]; + c.arg[1] = i; + clearCommandBuffer(); + SendCommand(&c); + if (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)){ + PrintAndLog("Error occurred, device did not respond during write operation."); + return -1; } } return 0; diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 31958eea..21406fc8 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -461,14 +461,14 @@ bool tryDetectModulation(){ } else { clk = GetAskClock("", FALSE, FALSE); if (clk>0) { - if ( ASKDemod("0 0 1", TRUE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ( ASKDemod("0 0 1", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_ASK; tests[hits].bitrate = bitRate; tests[hits].inverted = FALSE; tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer); ++hits; } - if ( ASKDemod("0 1 1", TRUE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { + if ( ASKDemod("0 1 1", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) { tests[hits].modulation = DEMOD_ASK; tests[hits].bitrate = bitRate; tests[hits].inverted = TRUE; @@ -862,19 +862,21 @@ int CmdT55xxWriteBlock(const char *Cmd) { UsbCommand resp; c.d.asBytes[0] = (page1) ? 0x2 : 0; - PrintAndLog("Writing to page: %d block: %d data : 0x%08X", page1, block, data); + char pwdStr[16] = {0}; + snprintf(pwdStr, sizeof(pwdStr), "pwd: 0x%08X", password); + + PrintAndLog("Writing page %d block: %02d data: 0x%08X %s", page1, block, data, (usepwd) ? pwdStr : "" ); //Password mode if (usepwd) { c.arg[2] = password; c.d.asBytes[0] |= 0x1; - PrintAndLog("pwd : 0x%08X", password); } clearCommandBuffer(); SendCommand(&c); if (!WaitForResponseTimeout(CMD_ACK, &resp, 1000)){ PrintAndLog("Error occurred, device did not ACK write operation. (May be due to old firmware)"); - return 0; + return 0; } return 1; } @@ -1230,26 +1232,24 @@ char * GetSelectedModulationStr( uint8_t id){ } void t55x7_create_config_block( int tagtype ){ - //switch? - - -} -/* -uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bits){ + /* + T55X7_DEFAULT_CONFIG_BLOCK, T55X7_RAW_CONFIG_BLOCK + T55X7_EM_UNIQUE_CONFIG_BLOCK, T55X7_FDXB_CONFIG_BLOCK, + T55X7_FDXB_CONFIG_BLOCK, T55X7_HID_26_CONFIG_BLOCK, T55X7_INDALA_64_CONFIG_BLOCK, T55X7_INDALA_224_CONFIG_BLOCK + T55X7_GUARDPROXII_CONFIG_BLOCK, T55X7_VIKING_CONFIG_BLOCK, T55X7_NORALYS_CONFIG_BLOCK, T55X7_IOPROX_CONFIG_BLOCK + */ + static char buf[60]; + char *retStr = buf; - int i = start; - int j = len-1; - - if (len > 32) return 0; - - uint32_t tmp = 0; - for (; j >= 0; --j, ++i) - tmp |= bits[i] << j; - - return tmp; + switch (id){ + case 0: snprintf(retStr, sizeof(buf),"%08X - T55X7 Default", T55X7_DEFAULT_CONFIG_BLOCK); break; + case 1: snprintf(retStr, sizeof(buf),"%08X - T55X7 Raw", T55X7_RAW_CONFIG_BLOCK); break; + default: + break; + } + PrintAndLog(buf); } -*/ int CmdResetRead(const char *Cmd) { UsbCommand c = {CMD_T55XX_RESET_READ, {0,0,0}}; @@ -1271,19 +1271,23 @@ int CmdResetRead(const char *Cmd) { int CmdT55xxWipe(const char *Cmd) { char writeData[20] = {0}; char *ptrData = writeData; - uint8_t blk = 0; + PrintAndLog("\nBeginning Wipe of a T55xx tag (assuming the tag is not password protected)\n"); + //try with the default password to reset block 0 (with a pwd should work even if pwd bit not set) - snprintf(ptrData,sizeof(writeData),"b %d d 00088040 p 0", blk); - if (!CmdT55xxWriteBlock(ptrData)){ - PrintAndLog("Error writing blk %d", blk); - } - blk = 1; - for (; blk<8; blk++) { + snprintf(ptrData,sizeof(writeData),"b 0 d 000880E0 p 0"); + + if (!CmdT55xxWriteBlock(ptrData)) + PrintAndLog("Error writing blk 0"); + + for (uint8_t blk = 1; blk<8; blk++) { + snprintf(ptrData,sizeof(writeData),"b %d d 0", blk); - if (!CmdT55xxWriteBlock(ptrData)){ + + if (!CmdT55xxWriteBlock(ptrData)) PrintAndLog("Error writing blk %d", blk); - } + + memset(writeData, sizeof(writeData), 0x00); } return 0; } diff --git a/client/cmdlft55xx.h b/client/cmdlft55xx.h index 79e37cef..a58fa44e 100644 --- a/client/cmdlft55xx.h +++ b/client/cmdlft55xx.h @@ -28,6 +28,7 @@ #define T55X7_GUARDPROXII_CONFIG_BLOCK 0x00150060 // bitrate 64pcb, Direct modulation, Biphase, 3 data blocks #define T55X7_VIKING_CONFIG_BLOCK 0x00088040 // compat mode, data rate 32, Manchester, 2 data blocks #define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // compat mode, (NORALYS - KCP3000) +#define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // maxblock 2 #define T55X7_bin 0b0010