From 4653da43318d7b0ac4de7d313ee7c017af4914cb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 27 Jan 2017 10:49:34 +0100 Subject: [PATCH] ADD: `lf cotag` - added first try at basic functionality to read samples from Cotag. In lfops.c is the startup sequence that needs to be tested out. --- armsrc/appmain.c | 3 +++ armsrc/apps.h | 1 + armsrc/lfops.c | 46 ++++++++++++++++++++++++++++++++++++ client/Makefile | 1 + client/cmdlf.c | 1 + client/cmdlf.h | 1 + client/cmdlfcotag.c | 41 ++++++++++++++++++++++++++++++++ client/cmdlfcotag.h | 22 +++++++++++++++++ client/hid-flasher/usb_cmd.h | 3 ++- client/lualibs/commands.lua | 1 + include/usb_cmd.h | 1 + 11 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 client/cmdlfcotag.c create mode 100644 client/cmdlfcotag.h diff --git a/armsrc/appmain.c b/armsrc/appmain.c index d4b22465..905fd320 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1009,6 +1009,9 @@ void UsbPacketReceived(uint8_t *packet, int len) case CMD_VIKING_CLONE_TAG: CopyVikingtoT55xx(c->arg[0], c->arg[1], c->arg[2]); break; + case CMD_COTAG: + Cotag(); + break; #endif #ifdef WITH_HITAG diff --git a/armsrc/apps.h b/armsrc/apps.h index 6289223b..6ea9d5ea 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -98,6 +98,7 @@ void T55xxWakeUp(uint32_t Pwd); void TurnReadLFOn(uint32_t delay); void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode); void EM4xWriteWord(uint32_t Data, uint8_t Address, uint32_t Pwd, uint8_t PwdMode); +void Cotag(); /// iso14443b.h void SimulateIso14443bTag(uint32_t pupi); diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 71d9ba95..28927c33 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1737,3 +1737,49 @@ void EM4xWriteWord(uint32_t Data, uint8_t Address, uint32_t Pwd, uint8_t PwdMode FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off LED_D_OFF(); } + +void Cotag() { + +#define WAIT2200 { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); WaitUS(2200); } + + LED_A_ON(); + + //clear buffer now so it does not interfere with timing later + BigBuf_Clear_keep_EM(); + + // Set up FPGA, 132kHz to power up the tag + FpgaDownloadAndGo(FPGA_BITSTREAM_LF); + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 89); + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); + + // Connect the A/D to the peak-detected low-frequency path. + SetAdcMuxFor(GPIO_MUXSEL_LOPKD); + + // 50ms for the resonant antenna to settle. + SpinDelay(50); + + // Now set up the SSC to get the ADC samples that are now streaming at us. + FpgaSetupSsc(); + // start a 1.5ticks is 1us + StartTicks(); + + //send start pulse + TurnReadLFOn(800); + WAIT2200 + TurnReadLFOn(3600); + WAIT2200 + TurnReadLFOn(800); + WAIT2200 + TurnReadLFOn(3600); + + // Turn field on to read the response + TurnReadLFOn(READ_GAP); + + // Acquisition + doT55x7Acquisition(20000); + + // Turn the field off + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off + cmd_send(CMD_ACK,0,0,0,0,0); + LED_A_OFF(); +} diff --git a/client/Makefile b/client/Makefile index 7da69d73..0191ff25 100644 --- a/client/Makefile +++ b/client/Makefile @@ -143,6 +143,7 @@ CMDSRCS = mifarehost.c \ cmdlfvisa2000.c \ cmdlfnoralsy.c \ cmdlffdx.c \ + cmdlfcotag.c \ pm3_binlib.c \ scripting.c \ cmdscript.c \ diff --git a/client/cmdlf.c b/client/cmdlf.c index 43131428..2daa46ab 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -1192,6 +1192,7 @@ static command_t CommandTable[] = {"help", CmdHelp, 1, "This help"}, {"animal", CmdLFFdx, 1, "{ Animal RFIDs... }"}, {"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"}, + {"cotag", CmdLFCOTAG, 1, "{ COTAG RFIDs... }"}, {"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"}, {"guard", CmdLFGuard, 1, "{ Guardall RFIDs... }"}, {"hid", CmdLFHID, 1, "{ HID RFIDs... }"}, diff --git a/client/cmdlf.h b/client/cmdlf.h index f8f048a1..80297532 100644 --- a/client/cmdlf.h +++ b/client/cmdlf.h @@ -40,6 +40,7 @@ #include "cmdlfvisa2000.h" // for VISA2000 menu #include "cmdlfnoralsy.h" // for NORALSY meny #include "cmdlffdx.h" // for FDX-B meny +#include "cmdlfcotag.h" // for COTAG meny #define T55XX_WRITE_TIMEOUT 1500 diff --git a/client/cmdlfcotag.c b/client/cmdlfcotag.c new file mode 100644 index 00000000..e200e834 --- /dev/null +++ b/client/cmdlfcotag.c @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Authored by Iceman +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency COTAG commands +//----------------------------------------------------------------------------- +#include "cmdlfcotag.h" // COTAG function declarations + +static int CmdHelp(const char *Cmd); + +int CmdCOTAGRead(const char *Cmd) { + +// if (Cmd[0] == 'h' || Cmd[0] == 'H') return usage_lf_cotag_read(); + + UsbCommand c = {CMD_COTAG, {0, 0, 0}}; + clearCommandBuffer(); + SendCommand(&c); + + getSamples("20000", TRUE); + return CmdFSKdemodAWID(Cmd); +} + +static command_t CommandTable[] = { + {"help", CmdHelp, 1, "This help"}, + {"read", CmdCOTAGRead, 0, "Attempt to read and extract tag data"}, + {NULL, NULL, 0, NULL} +}; + +int CmdLFCOTAG(const char *Cmd) { + clearCommandBuffer(); + CmdsParse(CommandTable, Cmd); + return 0; +} + +int CmdHelp(const char *Cmd) { + CmdsHelp(CommandTable); + return 0; +} diff --git a/client/cmdlfcotag.h b/client/cmdlfcotag.h new file mode 100644 index 00000000..9bf7407e --- /dev/null +++ b/client/cmdlfcotag.h @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2010 iZsh +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency AWID commands +//----------------------------------------------------------------------------- + +#ifndef CMDLFCOTAG_H__ +#define CMDLFCOTAG_H__ + +#include "proxmark3.h" // Definitions, USB controls, etc +#include "cmddata.h" // getSamples +#include "cmdparser.h" // CmdsParse, CmdsHelp +#include "cmdmain.h" + +int CmdLFCOTAG(const char *Cmd); +int CmdCOTAGRead(const char *Cmd); + +#endif diff --git a/client/hid-flasher/usb_cmd.h b/client/hid-flasher/usb_cmd.h index 82e4cecb..4d0f5e8e 100644 --- a/client/hid-flasher/usb_cmd.h +++ b/client/hid-flasher/usb_cmd.h @@ -95,7 +95,8 @@ typedef struct { #define CMD_PSK_SIM_TAG 0x0220 #define CMD_AWID_DEMOD_FSK 0x0221 #define CMD_VIKING_CLONE_TAG 0x0222 - +#define CMD_T55XX_WAKEUP 0x0224 +#define CMD_COTAG 0x0225 /* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */ diff --git a/client/lualibs/commands.lua b/client/lualibs/commands.lua index 2347ffe5..7aaa1745 100644 --- a/client/lualibs/commands.lua +++ b/client/lualibs/commands.lua @@ -62,6 +62,7 @@ local _commands = { CMD_AWID_DEMOD_FSK = 0x0221, CMD_VIKING_CLONE_TAG = 0x0222, CMD_T55XX_WAKEUP = 0x0224, + CMD_COTAG = 0x0225, --/* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */ diff --git a/include/usb_cmd.h b/include/usb_cmd.h index 53ac18e7..e312f93a 100644 --- a/include/usb_cmd.h +++ b/include/usb_cmd.h @@ -105,6 +105,7 @@ typedef struct{ #define CMD_AWID_DEMOD_FSK 0x0221 #define CMD_VIKING_CLONE_TAG 0x0222 #define CMD_T55XX_WAKEUP 0x0224 +#define CMD_COTAG 0x0225 /* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */ -- 2.39.2