mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 13:23:51 -07:00
Make clear current FDX in Pm3 is FDX-B only
This commit is contained in:
parent
8693083747
commit
76701af8a7
15 changed files with 61 additions and 61 deletions
|
@ -248,7 +248,7 @@ set (TARGET_SOURCES
|
||||||
${PM3_ROOT}/client/src/cmdlfcotag.c
|
${PM3_ROOT}/client/src/cmdlfcotag.c
|
||||||
${PM3_ROOT}/client/src/cmdlfem4x.c
|
${PM3_ROOT}/client/src/cmdlfem4x.c
|
||||||
${PM3_ROOT}/client/src/cmdlfem4x50.c
|
${PM3_ROOT}/client/src/cmdlfem4x50.c
|
||||||
${PM3_ROOT}/client/src/cmdlffdx.c
|
${PM3_ROOT}/client/src/cmdlffdxb.c
|
||||||
${PM3_ROOT}/client/src/cmdlfgallagher.c
|
${PM3_ROOT}/client/src/cmdlfgallagher.c
|
||||||
${PM3_ROOT}/client/src/cmdlfguard.c
|
${PM3_ROOT}/client/src/cmdlfguard.c
|
||||||
${PM3_ROOT}/client/src/cmdlfhid.c
|
${PM3_ROOT}/client/src/cmdlfhid.c
|
||||||
|
|
|
@ -443,7 +443,7 @@ SRCS = aidsearch.c \
|
||||||
cmdlfcotag.c \
|
cmdlfcotag.c \
|
||||||
cmdlfem4x.c \
|
cmdlfem4x.c \
|
||||||
cmdlfem4x50.c \
|
cmdlfem4x50.c \
|
||||||
cmdlffdx.c \
|
cmdlffdxb.c \
|
||||||
cmdlfguard.c \
|
cmdlfguard.c \
|
||||||
cmdlfgallagher.c \
|
cmdlfgallagher.c \
|
||||||
cmdlfhid.c \
|
cmdlfhid.c \
|
||||||
|
|
|
@ -127,7 +127,7 @@ add_library(pm3rrg_rdv4 SHARED
|
||||||
${PM3_ROOT}/client/src/cmdlfcotag.c
|
${PM3_ROOT}/client/src/cmdlfcotag.c
|
||||||
${PM3_ROOT}/client/src/cmdlfem4x.c
|
${PM3_ROOT}/client/src/cmdlfem4x.c
|
||||||
${PM3_ROOT}/client/src/cmdlfem4x50.c
|
${PM3_ROOT}/client/src/cmdlfem4x50.c
|
||||||
${PM3_ROOT}/client/src/cmdlffdx.c
|
${PM3_ROOT}/client/src/cmdlffdxb.c
|
||||||
${PM3_ROOT}/client/src/cmdlfgallagher.c
|
${PM3_ROOT}/client/src/cmdlfgallagher.c
|
||||||
${PM3_ROOT}/client/src/cmdlfguard.c
|
${PM3_ROOT}/client/src/cmdlfguard.c
|
||||||
${PM3_ROOT}/client/src/cmdlfhid.c
|
${PM3_ROOT}/client/src/cmdlfhid.c
|
||||||
|
|
|
@ -18,7 +18,7 @@ desc = [[
|
||||||
\ / \ /
|
\ / \ /
|
||||||
`---' `---'
|
`---' `---'
|
||||||
|
|
||||||
*SUPPORTED TAGS: pyramid, awid, fdx, jablotron, noralsy, presco, visa2000, 14a, hid
|
*SUPPORTED TAGS: pyramid, awid, fdxb, jablotron, noralsy, presco, visa2000, 14a, hid
|
||||||
|
|
||||||
This script uses the Proxmark3 implementations of simulation to bruteforce given ranges of id.
|
This script uses the Proxmark3 implementations of simulation to bruteforce given ranges of id.
|
||||||
It uses both LF and HF simulations.
|
It uses both LF and HF simulations.
|
||||||
|
@ -42,7 +42,7 @@ arguments = [[
|
||||||
-r *see below RFID Tag: the RFID tag to emulate
|
-r *see below RFID Tag: the RFID tag to emulate
|
||||||
pyramid
|
pyramid
|
||||||
awid
|
awid
|
||||||
fdx
|
fdxb
|
||||||
jablotron
|
jablotron
|
||||||
noralsy
|
noralsy
|
||||||
presco
|
presco
|
||||||
|
@ -180,8 +180,8 @@ local function main(args)
|
||||||
consolecommand = 'lf awid sim'
|
consolecommand = 'lf awid sim'
|
||||||
rfidtagname = 'AWID'
|
rfidtagname = 'AWID'
|
||||||
facilityrequired = 1
|
facilityrequired = 1
|
||||||
elseif rfidtag == 'fdx' then -- I'm not sure why you would need to bruteforce this ¯\_(ツ)_/¯
|
elseif rfidtag == 'fdxb' then -- I'm not sure why you would need to bruteforce this ¯\_(ツ)_/¯
|
||||||
consolecommand = 'lf fdx sim'
|
consolecommand = 'lf fdxb sim'
|
||||||
rfidtagname = 'FDX-B'
|
rfidtagname = 'FDX-B'
|
||||||
facilityrequired = 1
|
facilityrequired = 1
|
||||||
elseif rfidtag == 'jablotron' then
|
elseif rfidtag == 'jablotron' then
|
||||||
|
|
|
@ -60,7 +60,7 @@ int CmdPlot(const char *Cmd);
|
||||||
int CmdSave(const char *Cmd); // used by cmd auto
|
int CmdSave(const char *Cmd); // used by cmd auto
|
||||||
int CmdTuneSamples(const char *Cmd); // used by cmd lf hw
|
int CmdTuneSamples(const char *Cmd); // used by cmd lf hw
|
||||||
|
|
||||||
int ASKbiphaseDemod(int offset, int clk, int invert, int maxErr, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx
|
int ASKbiphaseDemod(int offset, int clk, int invert, int maxErr, bool verbose); // used by cmd lf em4x, lf fdxb, lf guard, lf jablotron, lf nedap, lf t55xx
|
||||||
int ASKDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking
|
int ASKDemod(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking
|
||||||
int ASKDemod_ext(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType, bool *stCheck); // used by cmd lf, lf em4x, lf noralsy, le presco, lf securekey, lf t55xx, lf visa2k
|
int ASKDemod_ext(int clk, int invert, int maxErr, size_t maxLen, bool amplify, bool verbose, bool emSearch, uint8_t askType, bool *stCheck); // used by cmd lf, lf em4x, lf noralsy, le presco, lf securekey, lf t55xx, lf visa2k
|
||||||
int FSKrawDemod(uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow, bool verbose); // used by cmd lf, lf em4x, lf t55xx
|
int FSKrawDemod(uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow, bool verbose); // used by cmd lf, lf em4x, lf t55xx
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include "cmdlfidteck.h" // for idteck menu
|
#include "cmdlfidteck.h" // for idteck menu
|
||||||
#include "cmdlfio.h" // for ioprox menu
|
#include "cmdlfio.h" // for ioprox menu
|
||||||
#include "cmdlfcotag.h" // for COTAG meny
|
#include "cmdlfcotag.h" // for COTAG meny
|
||||||
#include "cmdlffdx.h" // for fdx-b menu
|
#include "cmdlffdxb.h" // for FDX-B menu
|
||||||
#include "cmdlfgallagher.h" // for GALLAGHER menu
|
#include "cmdlfgallagher.h" // for GALLAGHER menu
|
||||||
#include "cmdlfguard.h" // for gproxii menu
|
#include "cmdlfguard.h" // for gproxii menu
|
||||||
#include "cmdlfindala.h" // for indala menu
|
#include "cmdlfindala.h" // for indala menu
|
||||||
|
@ -1454,7 +1454,7 @@ int CmdLFfind(const char *Cmd) {
|
||||||
if (demodNexWatch(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;}
|
if (demodNexWatch(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("NexWatch ID") " found!"); goto out;}
|
||||||
if (demodIndala(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;}
|
if (demodIndala(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Indala ID") " found!"); goto out;}
|
||||||
if (demodEM410x(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;}
|
if (demodEM410x(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("EM410x ID") " found!"); goto out;}
|
||||||
if (demodFDX(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;}
|
if (demodFDXB(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("FDX-B ID") " found!"); goto out;}
|
||||||
if (demodGuard(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; }
|
if (demodGuard(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Guardall G-Prox II ID") " found!"); goto out; }
|
||||||
if (demodIdteck(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;}
|
if (demodIdteck(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Idteck ID") " found!"); goto out;}
|
||||||
if (demodJablotron(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;}
|
if (demodJablotron(true) == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Jablotron ID") " found!"); goto out;}
|
||||||
|
@ -1527,7 +1527,7 @@ static command_t CommandTable[] = {
|
||||||
{"awid", CmdLFAWID, AlwaysAvailable, "{ AWID RFIDs... }"},
|
{"awid", CmdLFAWID, AlwaysAvailable, "{ AWID RFIDs... }"},
|
||||||
{"cotag", CmdLFCOTAG, AlwaysAvailable, "{ COTAG CHIPs... }"},
|
{"cotag", CmdLFCOTAG, AlwaysAvailable, "{ COTAG CHIPs... }"},
|
||||||
{"em", CmdLFEM4X, AlwaysAvailable, "{ EM4X CHIPs & RFIDs... }"},
|
{"em", CmdLFEM4X, AlwaysAvailable, "{ EM4X CHIPs & RFIDs... }"},
|
||||||
{"fdx", CmdLFFdx, AlwaysAvailable, "{ FDX-B RFIDs... }"},
|
{"fdxb", CmdLFFdxB, AlwaysAvailable, "{ FDX-B RFIDs... }"},
|
||||||
{"gallagher", CmdLFGallagher, AlwaysAvailable, "{ GALLAGHER RFIDs... }"},
|
{"gallagher", CmdLFGallagher, AlwaysAvailable, "{ GALLAGHER RFIDs... }"},
|
||||||
{"gproxii", CmdLFGuard, AlwaysAvailable, "{ Guardall Prox II RFIDs... }"},
|
{"gproxii", CmdLFGuard, AlwaysAvailable, "{ Guardall Prox II RFIDs... }"},
|
||||||
{"hid", CmdLFHID, AlwaysAvailable, "{ HID Prox RFIDs... }"},
|
{"hid", CmdLFHID, AlwaysAvailable, "{ HID Prox RFIDs... }"},
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
// Differential Biphase, rf/32, 128 bits (known)
|
// Differential Biphase, rf/32, 128 bits (known)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#include "cmdlffdx.h"
|
#include "cmdlffdxb.h"
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -48,9 +48,9 @@
|
||||||
|
|
||||||
static int CmdHelp(const char *Cmd);
|
static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
static int usage_lf_fdx_clone(void) {
|
static int usage_lf_fdxb_clone(void) {
|
||||||
PrintAndLogEx(NORMAL, "Clone a FDX-B animal tag to a T55x7 or Q5/T5555 tag.");
|
PrintAndLogEx(NORMAL, "Clone a FDX-B animal tag to a T55x7 or Q5/T5555 tag.");
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf fdx clone [h] [c <country code>] [a <national code>] [e <extended>] <s> <Q5>");
|
PrintAndLogEx(NORMAL, "Usage: lf fdxb clone [h] [c <country code>] [a <national code>] [e <extended>] <s> <Q5>");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h : This help");
|
PrintAndLogEx(NORMAL, " h : This help");
|
||||||
PrintAndLogEx(NORMAL, " c <country> : (dec) Country code");
|
PrintAndLogEx(NORMAL, " c <country> : (dec) Country code");
|
||||||
|
@ -60,15 +60,15 @@ static int usage_lf_fdx_clone(void) {
|
||||||
PrintAndLogEx(NORMAL, " <Q5> : Specify writing to Q5/T5555 tag");
|
PrintAndLogEx(NORMAL, " <Q5> : Specify writing to Q5/T5555 tag");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone c 999 n 112233 s"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdxb clone c 999 n 112233 s"));
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx clone c 999 n 112233 e 16a"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdxb clone c 999 n 112233 e 16a"));
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage_lf_fdx_read(void) {
|
static int usage_lf_fdxb_read(void) {
|
||||||
PrintAndLogEx(NORMAL, "Read FDX-B animal tag");
|
PrintAndLogEx(NORMAL, "Read FDX-B animal tag");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf fdx read [h] [@]");
|
PrintAndLogEx(NORMAL, "Usage: lf fdxb read [h] [@]");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h : This help");
|
PrintAndLogEx(NORMAL, " h : This help");
|
||||||
PrintAndLogEx(NORMAL, " @ : run continuously until a key is pressed (optional)");
|
PrintAndLogEx(NORMAL, " @ : run continuously until a key is pressed (optional)");
|
||||||
|
@ -76,11 +76,11 @@ static int usage_lf_fdx_read(void) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage_lf_fdx_sim(void) {
|
static int usage_lf_fdxb_sim(void) {
|
||||||
PrintAndLogEx(NORMAL, "Enables simulation of FDX-B animal tag");
|
PrintAndLogEx(NORMAL, "Enables simulation of FDX-B animal tag");
|
||||||
PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued.");
|
PrintAndLogEx(NORMAL, "Simulation runs until the button is pressed or another USB command is issued.");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Usage: lf fdx sim [h] [c <country code>] [n <national code>] [e <extended>] <s> <Q5>");
|
PrintAndLogEx(NORMAL, "Usage: lf fdxb sim [h] [c <country code>] [n <national code>] [e <extended>] <s> <Q5>");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h : This help");
|
PrintAndLogEx(NORMAL, " h : This help");
|
||||||
PrintAndLogEx(NORMAL, " c <country> : (dec) Country code");
|
PrintAndLogEx(NORMAL, " c <country> : (dec) Country code");
|
||||||
|
@ -90,8 +90,8 @@ static int usage_lf_fdx_sim(void) {
|
||||||
PrintAndLogEx(NORMAL, " <Q5> : Specify writing to Q5/T5555 tag");
|
PrintAndLogEx(NORMAL, " <Q5> : Specify writing to Q5/T5555 tag");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim c 999 n 112233 s"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdxb sim c 999 n 112233 s"));
|
||||||
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdx sim c 999 n 112233 e 16a"));
|
PrintAndLogEx(NORMAL, _YELLOW_(" lf fdxb sim c 999 n 112233 e 16a"));
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ static int CmdFDXBdemodBI(const char *Cmd) {
|
||||||
|
|
||||||
//see ASKDemod for what args are accepted
|
//see ASKDemod for what args are accepted
|
||||||
//almost the same demod as cmddata.c/CmdFDXBdemodBI
|
//almost the same demod as cmddata.c/CmdFDXBdemodBI
|
||||||
int demodFDX(bool verbose) {
|
int demodFDXB(bool verbose) {
|
||||||
//Differential Biphase / di-phase (inverted biphase)
|
//Differential Biphase / di-phase (inverted biphase)
|
||||||
//get binary from ask wave
|
//get binary from ask wave
|
||||||
if (ASKbiphaseDemod(0, 32, 1, 100, false) != PM3_SUCCESS) {
|
if (ASKbiphaseDemod(0, 32, 1, 100, false) != PM3_SUCCESS) {
|
||||||
|
@ -321,12 +321,12 @@ int demodFDX(bool verbose) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdFdxDemod(const char *Cmd) {
|
static int CmdFdxBDemod(const char *Cmd) {
|
||||||
(void)Cmd; // Cmd is not used so far
|
(void)Cmd; // Cmd is not used so far
|
||||||
return demodFDX(true);
|
return demodFDXB(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdFdxRead(const char *Cmd) {
|
static int CmdFdxBRead(const char *Cmd) {
|
||||||
sample_config config;
|
sample_config config;
|
||||||
memset(&config, 0, sizeof(sample_config));
|
memset(&config, 0, sizeof(sample_config));
|
||||||
int retval = lf_getconfig(&config);
|
int retval = lf_getconfig(&config);
|
||||||
|
@ -341,7 +341,7 @@ static int CmdFdxRead(const char *Cmd) {
|
||||||
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
||||||
switch (tolower(param_getchar(Cmd, cmdp))) {
|
switch (tolower(param_getchar(Cmd, cmdp))) {
|
||||||
case 'h':
|
case 'h':
|
||||||
return usage_lf_fdx_read();
|
return usage_lf_fdxb_read();
|
||||||
case '@':
|
case '@':
|
||||||
continuous = true;
|
continuous = true;
|
||||||
cmdp++;
|
cmdp++;
|
||||||
|
@ -354,7 +354,7 @@ static int CmdFdxRead(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Validations
|
//Validations
|
||||||
if (errors) return usage_lf_fdx_read();
|
if (errors) return usage_lf_fdxb_read();
|
||||||
int16_t tmp_div = config.divisor;
|
int16_t tmp_div = config.divisor;
|
||||||
if (tmp_div != LF_DIVISOR_134) {
|
if (tmp_div != LF_DIVISOR_134) {
|
||||||
config.divisor = LF_DIVISOR_134;
|
config.divisor = LF_DIVISOR_134;
|
||||||
|
@ -375,7 +375,7 @@ static int CmdFdxRead(const char *Cmd) {
|
||||||
PrintAndLogEx(ERR, "failed to get LF read from device");
|
PrintAndLogEx(ERR, "failed to get LF read from device");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
ret = demodFDX(!continuous); // be verbose only if not in continuous mode
|
ret = demodFDXB(!continuous); // be verbose only if not in continuous mode
|
||||||
if (kbd_enter_pressed()) {
|
if (kbd_enter_pressed()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -392,7 +392,7 @@ static int CmdFdxRead(const char *Cmd) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdFdxClone(const char *Cmd) {
|
static int CmdFdxBClone(const char *Cmd) {
|
||||||
|
|
||||||
uint32_t country_code = 0, extended = 0;
|
uint32_t country_code = 0, extended = 0;
|
||||||
uint64_t national_code = 0;
|
uint64_t national_code = 0;
|
||||||
|
@ -402,7 +402,7 @@ static int CmdFdxClone(const char *Cmd) {
|
||||||
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
||||||
switch (tolower(param_getchar(Cmd, cmdp))) {
|
switch (tolower(param_getchar(Cmd, cmdp))) {
|
||||||
case 'h':
|
case 'h':
|
||||||
return usage_lf_fdx_clone();
|
return usage_lf_fdxb_clone();
|
||||||
case 'c': {
|
case 'c': {
|
||||||
country_code = param_get32ex(Cmd, cmdp + 1, 0, 10);
|
country_code = param_get32ex(Cmd, cmdp + 1, 0, 10);
|
||||||
cmdp += 2;
|
cmdp += 2;
|
||||||
|
@ -436,7 +436,7 @@ static int CmdFdxClone(const char *Cmd) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errors || strlen(Cmd) == 0) return usage_lf_fdx_clone();
|
if (errors || strlen(Cmd) == 0) return usage_lf_fdxb_clone();
|
||||||
|
|
||||||
verify_values(&national_code, &country_code, &extended, &is_animal);
|
verify_values(&national_code, &country_code, &extended, &is_animal);
|
||||||
|
|
||||||
|
@ -448,7 +448,7 @@ static int CmdFdxClone(const char *Cmd) {
|
||||||
PrintAndLogEx(INFO, " RFU 0");
|
PrintAndLogEx(INFO, " RFU 0");
|
||||||
|
|
||||||
uint8_t *bits = calloc(128, sizeof(uint8_t));
|
uint8_t *bits = calloc(128, sizeof(uint8_t));
|
||||||
if (getFDXBits(national_code, country_code, is_animal, has_extended, extended, bits) != PM3_SUCCESS) {
|
if (getFDXBBits(national_code, country_code, is_animal, has_extended, extended, bits) != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
||||||
free(bits);
|
free(bits);
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
|
@ -473,11 +473,11 @@ static int CmdFdxClone(const char *Cmd) {
|
||||||
|
|
||||||
int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks));
|
int res = clone_t55xx_tag(blocks, ARRAYLEN(blocks));
|
||||||
PrintAndLogEx(SUCCESS, "Done");
|
PrintAndLogEx(SUCCESS, "Done");
|
||||||
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf fdx read`") " to verify");
|
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf fdxb read`") " to verify");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdFdxSim(const char *Cmd) {
|
static int CmdFdxBSim(const char *Cmd) {
|
||||||
|
|
||||||
uint32_t country_code = 0, extended = 0;
|
uint32_t country_code = 0, extended = 0;
|
||||||
uint64_t national_code = 0;
|
uint64_t national_code = 0;
|
||||||
|
@ -487,7 +487,7 @@ static int CmdFdxSim(const char *Cmd) {
|
||||||
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
|
||||||
switch (tolower(param_getchar(Cmd, cmdp))) {
|
switch (tolower(param_getchar(Cmd, cmdp))) {
|
||||||
case 'h':
|
case 'h':
|
||||||
return usage_lf_fdx_sim();
|
return usage_lf_fdxb_sim();
|
||||||
case 'c': {
|
case 'c': {
|
||||||
country_code = param_get32ex(Cmd, cmdp + 1, 0, 10);
|
country_code = param_get32ex(Cmd, cmdp + 1, 0, 10);
|
||||||
cmdp += 2;
|
cmdp += 2;
|
||||||
|
@ -516,7 +516,7 @@ static int CmdFdxSim(const char *Cmd) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errors) return usage_lf_fdx_sim();
|
if (errors) return usage_lf_fdxb_sim();
|
||||||
|
|
||||||
verify_values(&national_code, &country_code, &extended, &is_animal);
|
verify_values(&national_code, &country_code, &extended, &is_animal);
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ static int CmdFdxSim(const char *Cmd) {
|
||||||
PrintAndLogEx(SUCCESS, "Simulating FDX-B animal ID: " _GREEN_("%04u-%"PRIu64), country_code, national_code);
|
PrintAndLogEx(SUCCESS, "Simulating FDX-B animal ID: " _GREEN_("%04u-%"PRIu64), country_code, national_code);
|
||||||
|
|
||||||
uint8_t *bits = calloc(128, sizeof(uint8_t));
|
uint8_t *bits = calloc(128, sizeof(uint8_t));
|
||||||
if (getFDXBits(national_code, country_code, is_animal, (extended > 0), extended, bits) != PM3_SUCCESS) {
|
if (getFDXBBits(national_code, country_code, is_animal, (extended > 0), extended, bits) != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
PrintAndLogEx(ERR, "Error with tag bitstream generation.");
|
||||||
free(bits);
|
free(bits);
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
|
@ -562,10 +562,10 @@ static int CmdFdxSim(const char *Cmd) {
|
||||||
|
|
||||||
static command_t CommandTable[] = {
|
static command_t CommandTable[] = {
|
||||||
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
{"help", CmdHelp, AlwaysAvailable, "this help"},
|
||||||
{"demod", CmdFdxDemod, AlwaysAvailable, "demodulate a FDX-B ISO11784/85 tag from the GraphBuffer"},
|
{"demod", CmdFdxBDemod, AlwaysAvailable, "demodulate a FDX-B ISO11784/85 tag from the GraphBuffer"},
|
||||||
{"read", CmdFdxRead, IfPm3Lf, "attempt to read at 134kHz and extract tag data"},
|
{"read", CmdFdxBRead, IfPm3Lf, "attempt to read at 134kHz and extract tag data"},
|
||||||
{"clone", CmdFdxClone, IfPm3Lf, "clone animal ID tag to T55x7 or Q5/T5555"},
|
{"clone", CmdFdxBClone, IfPm3Lf, "clone animal ID tag to T55x7 or Q5/T5555"},
|
||||||
{"sim", CmdFdxSim, IfPm3Lf, "simulate Animal ID tag"},
|
{"sim", CmdFdxBSim, IfPm3Lf, "simulate Animal ID tag"},
|
||||||
{NULL, NULL, NULL, NULL}
|
{NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -575,7 +575,7 @@ static int CmdHelp(const char *Cmd) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdLFFdx(const char *Cmd) {
|
int CmdLFFdxB(const char *Cmd) {
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
return CmdsParse(CommandTable, Cmd);
|
return CmdsParse(CommandTable, Cmd);
|
||||||
}
|
}
|
||||||
|
@ -594,7 +594,7 @@ int detectFDXB(uint8_t *dest, size_t *size) {
|
||||||
return (int)startIdx;
|
return (int)startIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits) {
|
int getFDXBBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits) {
|
||||||
|
|
||||||
// add preamble ten 0x00 and one 0x01
|
// add preamble ten 0x00 and one 0x01
|
||||||
memset(bits, 0x00, 10);
|
memset(bits, 0x00, 10);
|
||||||
|
@ -634,7 +634,7 @@ int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal,
|
||||||
raw[i] = bytebits_to_byte(bits + 11 + i * 9, 8);
|
raw[i] = bytebits_to_byte(bits + 11 + i * 9, 8);
|
||||||
|
|
||||||
init_table(CRC_11784);
|
init_table(CRC_11784);
|
||||||
uint16_t crc = crc16_fdx(raw, 8);
|
uint16_t crc = crc16_fdxb(raw, 8);
|
||||||
num_to_bytebitsLSBF(crc >> 0, 8, bits + 83);
|
num_to_bytebitsLSBF(crc >> 0, 8, bits + 83);
|
||||||
num_to_bytebitsLSBF(crc >> 8, 8, bits + 92);
|
num_to_bytebitsLSBF(crc >> 8, 8, bits + 92);
|
||||||
|
|
|
@ -6,15 +6,15 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Low frequency fdx-b tag commands
|
// Low frequency fdx-b tag commands
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
#ifndef CMDLFFDX_H__
|
#ifndef CMDLFFDXB_H__
|
||||||
#define CMDLFFDX_H__
|
#define CMDLFFDXB_H__
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
int CmdLFFdx(const char *Cmd);
|
int CmdLFFdxB(const char *Cmd);
|
||||||
int detectFDXB(uint8_t *dest, size_t *size);
|
int detectFDXB(uint8_t *dest, size_t *size);
|
||||||
int demodFDX(bool verbose);
|
int demodFDXB(bool verbose);
|
||||||
int getFDXBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits);
|
int getFDXBBits(uint64_t national_code, uint16_t country_code, uint8_t is_animal, uint8_t is_extended, uint32_t extended, uint8_t *bits);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -383,7 +383,7 @@ static int usage_t55xx_clonehelp(void) {
|
||||||
// todo: implement restore
|
// todo: implement restore
|
||||||
// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x05_write"));
|
// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x05_write"));
|
||||||
// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x50_write"));
|
// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x50_write"));
|
||||||
PrintAndLogEx(NORMAL, _GREEN_("lf fdx clone"));
|
PrintAndLogEx(NORMAL, _GREEN_("lf fdxb clone"));
|
||||||
PrintAndLogEx(NORMAL, _GREEN_("lf gallagher clone"));
|
PrintAndLogEx(NORMAL, _GREEN_("lf gallagher clone"));
|
||||||
PrintAndLogEx(NORMAL, _GREEN_("lf gproxii clone"));
|
PrintAndLogEx(NORMAL, _GREEN_("lf gproxii clone"));
|
||||||
PrintAndLogEx(NORMAL, _GREEN_("lf hid clone"));
|
PrintAndLogEx(NORMAL, _GREEN_("lf hid clone"));
|
||||||
|
|
|
@ -191,7 +191,7 @@ void compute_crc(CrcType_t ct, const uint8_t *d, size_t n, uint8_t *first, uint8
|
||||||
crc = crc16_kermit(d, n);
|
crc = crc16_kermit(d, n);
|
||||||
break;
|
break;
|
||||||
case CRC_11784:
|
case CRC_11784:
|
||||||
crc = crc16_fdx(d, n);
|
crc = crc16_fdxb(d, n);
|
||||||
break;
|
break;
|
||||||
case CRC_LEGIC:
|
case CRC_LEGIC:
|
||||||
// TODO
|
// TODO
|
||||||
|
@ -225,7 +225,7 @@ uint16_t Crc16ex(CrcType_t ct, const uint8_t *d, size_t n) {
|
||||||
case CRC_KERMIT:
|
case CRC_KERMIT:
|
||||||
return crc16_kermit(d, n);
|
return crc16_kermit(d, n);
|
||||||
case CRC_11784:
|
case CRC_11784:
|
||||||
return crc16_fdx(d, n);
|
return crc16_fdxb(d, n);
|
||||||
case CRC_LEGIC:
|
case CRC_LEGIC:
|
||||||
// TODO
|
// TODO
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -270,7 +270,7 @@ bool check_crc(CrcType_t ct, const uint8_t *d, size_t n) {
|
||||||
case CRC_KERMIT:
|
case CRC_KERMIT:
|
||||||
return (crc16_kermit(d, n) == 0);
|
return (crc16_kermit(d, n) == 0);
|
||||||
case CRC_11784:
|
case CRC_11784:
|
||||||
return (crc16_fdx(d, n) == 0);
|
return (crc16_fdxb(d, n) == 0);
|
||||||
case CRC_LEGIC:
|
case CRC_LEGIC:
|
||||||
// TODO
|
// TODO
|
||||||
return false;
|
return false;
|
||||||
|
@ -288,7 +288,7 @@ uint16_t crc16_ccitt(uint8_t const *d, size_t n) {
|
||||||
|
|
||||||
// FDX-B ISO11784/85) uses KERMIT/CCITT
|
// FDX-B ISO11784/85) uses KERMIT/CCITT
|
||||||
// poly 0x xx init=0x000 refin=false refout=true xorout=0x0000 ...
|
// poly 0x xx init=0x000 refin=false refout=true xorout=0x0000 ...
|
||||||
uint16_t crc16_fdx(uint8_t const *d, size_t n) {
|
uint16_t crc16_fdxb(uint8_t const *d, size_t n) {
|
||||||
return crc16_fast(d, n, 0x0000, false, true);
|
return crc16_fast(d, n, 0x0000, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ bool check_crc(CrcType_t ct, const uint8_t *d, size_t n);
|
||||||
uint16_t crc16_ccitt(uint8_t const *d, size_t n);
|
uint16_t crc16_ccitt(uint8_t const *d, size_t n);
|
||||||
|
|
||||||
// Calculate CRC-16/KERMIT (FDX-B ISO11784/85) LF
|
// Calculate CRC-16/KERMIT (FDX-B ISO11784/85) LF
|
||||||
uint16_t crc16_fdx(uint8_t const *d, size_t n);
|
uint16_t crc16_fdxb(uint8_t const *d, size_t n);
|
||||||
|
|
||||||
// Calculate CRC-16/KERMIT
|
// Calculate CRC-16/KERMIT
|
||||||
uint16_t crc16_kermit(uint8_t const *d, size_t n);
|
uint16_t crc16_kermit(uint8_t const *d, size_t n);
|
||||||
|
|
|
@ -342,7 +342,7 @@ while true; do
|
||||||
if ! CheckExecute "lf EM410x test" "$CLIENTBIN -c 'data load -f traces/lf_EM4102-1.pm3;lf search 1'" "EM410x ID found"; then break; fi
|
if ! CheckExecute "lf EM410x test" "$CLIENTBIN -c 'data load -f traces/lf_EM4102-1.pm3;lf search 1'" "EM410x ID found"; then break; fi
|
||||||
if ! CheckExecute "lf EM4x05 test" "$CLIENTBIN -c 'data load -f traces/lf_EM4x05.pm3;lf search 1'" "FDX-B ID found"; then break; fi
|
if ! CheckExecute "lf EM4x05 test" "$CLIENTBIN -c 'data load -f traces/lf_EM4x05.pm3;lf search 1'" "FDX-B ID found"; then break; fi
|
||||||
if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load -f traces/lf_HomeAgain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi
|
if ! CheckExecute "lf FDX-B test" "$CLIENTBIN -c 'data load -f traces/lf_HomeAgain1600.pm3;lf search 1'" "FDX-B ID found"; then break; fi
|
||||||
if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load -f traces/lf_FDX_Bio-Thermo.pm3; lf fdx demod'" "95.2 F / 35.1 C"; then break; fi
|
if ! CheckExecute "lf FDX/BioThermo test" "$CLIENTBIN -c 'data load -f traces/lf_FDX_Bio-Thermo.pm3; lf fdxb demod'" "95.2 F / 35.1 C"; then break; fi
|
||||||
if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load -f traces/lf_GProx_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi
|
if ! CheckExecute "lf GPROXII test" "$CLIENTBIN -c 'data load -f traces/lf_GProx_36_30_14489.pm3; lf search 1'" "Guardall G-Prox II ID found"; then break; fi
|
||||||
if ! CheckExecute "lf HID Prox test" "$CLIENTBIN -c 'data load -f traces/lf_HID-proxCardII-05512-11432784-1.pm3;lf search 1'" "HID Prox ID found"; then break; fi
|
if ! CheckExecute "lf HID Prox test" "$CLIENTBIN -c 'data load -f traces/lf_HID-proxCardII-05512-11432784-1.pm3;lf search 1'" "HID Prox ID found"; then break; fi
|
||||||
if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load -f traces/lf_IDTECK_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi
|
if ! CheckExecute "lf IDTECK test" "$CLIENTBIN -c 'data load -f traces/lf_IDTECK_4944544BAC40E069.pm3; lf search 1'" "Idteck ID found"; then break; fi
|
||||||
|
@ -364,11 +364,11 @@ while true; do
|
||||||
if ! CheckExecute slow "lf T55 em410x test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_em410x.pm3; lf search 1'" "EM410x ID found"; then break; fi
|
if ! CheckExecute slow "lf T55 em410x test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_em410x.pm3; lf search 1'" "EM410x ID found"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 em410x test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_em410x.pm3; lf em 410x_demod demod'" \
|
if ! CheckExecute slow "lf T55 em410x test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_em410x.pm3; lf em 410x_demod demod'" \
|
||||||
"EM TAG ID : 0F0368568B"; then break; fi
|
"EM TAG ID : 0F0368568B"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 fdx_animal test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdx_animal.pm3; lf search 1'" "FDX-B ID found"; then break; fi
|
if ! CheckExecute slow "lf T55 fdxb_animal test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdxb_animal.pm3; lf search 1'" "FDX-B ID found"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 fdx_animal test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdx_animal.pm3; lf fdx demod'" \
|
if ! CheckExecute slow "lf T55 fdxb_animal test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdxb_animal.pm3; lf fdxb demod'" \
|
||||||
"Animal ID 0999-000000112233"; then break; fi
|
"Animal ID 0999-000000112233"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 fdx_extended test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdx_extended.pm3; lf search 1'" "FDX-B ID found"; then break; fi
|
if ! CheckExecute slow "lf T55 fdxb_extended test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdxb_extended.pm3; lf search 1'" "FDX-B ID found"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 fdx_extended test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdx_extended.pm3; lf fdx demod'" \
|
if ! CheckExecute slow "lf T55 fdxb_extended test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_fdxb_extended.pm3; lf fdxb demod'" \
|
||||||
"temperature 95.2 F / 35.1 C"; then break; fi
|
"temperature 95.2 F / 35.1 C"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi
|
if ! CheckExecute slow "lf T55 gallagher test" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_gallagher.pm3; lf search 1'" "GALLAGHER ID found"; then break; fi
|
||||||
if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_gallagher.pm3; lf gallagher demod'" \
|
if ! CheckExecute slow "lf T55 gallagher test2" "$CLIENTBIN -c 'data load -f traces/lf_ATA5577_gallagher.pm3; lf gallagher demod'" \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue