From 4ed295b730a69641b2ca2509a27b1a5fcb4b9627 Mon Sep 17 00:00:00 2001 From: iceman1001 <iceman@iuse.se> Date: Thu, 26 Sep 2019 20:32:33 +0200 Subject: [PATCH] chg reworked t55x7 clone function --- client/cmdlfpyramid.c | 66 ++++++++++++++++--------------------------- client/cmdlfpyramid.h | 15 ---------- 2 files changed, 25 insertions(+), 56 deletions(-) diff --git a/client/cmdlfpyramid.c b/client/cmdlfpyramid.c index 216e0834e..fa93a395c 100644 --- a/client/cmdlfpyramid.c +++ b/client/cmdlfpyramid.c @@ -8,6 +8,23 @@ // FSK2a, rf/50, 128 bits (complete) //----------------------------------------------------------------------------- #include "cmdlfpyramid.h" +#include "common.h" +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> + +#include "commonutil.h" // ARRAYLEN +#include "cmdparser.h" // command_t +#include "comms.h" +#include "ui.h" +#include "graph.h" +#include "cmddata.h" +#include "cmdlf.h" +#include "protocols.h" // for T55xx config register definitions +#include "lfdemod.h" // parityTest +#include "crc.h" +#include "cmdlft55xx.h" // verifywrite static int CmdHelp(const char *Cmd); @@ -203,8 +220,10 @@ static int CmdPyramidClone(const char *Cmd) { uint32_t facilitycode = 0, cardnumber = 0, fc = 0, cn = 0; uint32_t blocks[5]; - uint8_t bs[128]; - memset(bs, 0x00, sizeof(bs)); + uint8_t *bs = calloc(128, sizeof(uint8_t)); + if (bs == NULL) { + return PM3_EMALLOC; + } if (sscanf(Cmd, "%u %u", &fc, &cn) != 2) return usage_lf_pyramid_clone(); @@ -228,47 +247,12 @@ static int CmdPyramidClone(const char *Cmd) { blocks[3] = bytebits_to_byte(bs + 64, 32); blocks[4] = bytebits_to_byte(bs + 96, 32); + free(bs); + PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to T55x7 with Facility Code: %u, Card Number: %u", facilitycode, cardnumber); - print_blocks(blocks, 5); + print_blocks(blocks, ARRAYLEN(blocks)); - uint8_t res = 0; - PacketResponseNG resp; - - // fast push mode - conn.block_after_ACK = true; - for (int8_t i = 0; i < 5; i++) { - if (i == 4) { - // Disable fast mode on last packet - conn.block_after_ACK = false; - } - clearCommandBuffer(); - t55xx_write_block_t ng; - ng.data = blocks[i]; - ng.pwd = 0; - ng.blockno = i; - ng.flags = 0; - - SendCommandNG(CMD_LF_T55XX_WRITEBL, (uint8_t *)&ng, sizeof(ng)); - if (!WaitForResponseTimeout(CMD_LF_T55XX_WRITEBL, &resp, T55XX_WRITE_TIMEOUT)) { - PrintAndLogEx(ERR, "Error occurred, device did not respond during write operation."); - return PM3_ETIMEOUT; - } - - if (i == 0) { - SetConfigWithBlock0(blocks[0]); - if (t55xxAquireAndCompareBlock0(false, 0, blocks[0], false)) - continue; - } - - if (t55xxVerifyWrite(i, 0, false, false, 0, 0xFF, blocks[i]) == false) - res++; - - } - - if (res == 0) - PrintAndLogEx(SUCCESS, "Success writing to tag"); - - return PM3_SUCCESS; + return clone_t55xx_tag(blocks, ARRAYLEN(blocks)); } static int CmdPyramidSim(const char *Cmd) { diff --git a/client/cmdlfpyramid.h b/client/cmdlfpyramid.h index 0a9e2674a..2d717fbb3 100644 --- a/client/cmdlfpyramid.h +++ b/client/cmdlfpyramid.h @@ -10,21 +10,6 @@ #define CMDLFPYRAMID_H__ #include "common.h" -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> - -#include "cmdparser.h" // command_t -#include "comms.h" -#include "ui.h" -#include "graph.h" -#include "cmddata.h" -#include "cmdlf.h" -#include "protocols.h" // for T55xx config register definitions -#include "lfdemod.h" // parityTest -#include "crc.h" -#include "cmdlft55xx.h" // verifywrite int CmdLFPyramid(const char *Cmd);