mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
Add basic structure for hf gallagher
This commit is contained in:
parent
f0b82c6311
commit
a1db683673
7 changed files with 165 additions and 0 deletions
|
@ -255,6 +255,7 @@ set (TARGET_SOURCES
|
|||
${PM3_ROOT}/client/src/cmdhfepa.c
|
||||
${PM3_ROOT}/client/src/cmdhffelica.c
|
||||
${PM3_ROOT}/client/src/cmdhffido.c
|
||||
${PM3_ROOT}/client/src/cmdhfgallagher.c
|
||||
${PM3_ROOT}/client/src/cmdhfcipurse.c
|
||||
${PM3_ROOT}/client/src/cmdhficlass.c
|
||||
${PM3_ROOT}/client/src/cmdhfjooki.c
|
||||
|
|
|
@ -506,6 +506,7 @@ SRCS = mifare/aiddesfire.c \
|
|||
cmdhfemrtd.c \
|
||||
cmdhffelica.c \
|
||||
cmdhffido.c \
|
||||
cmdhfgallagher.c \
|
||||
cmdhfksx6924.c \
|
||||
cmdhfcipurse.c \
|
||||
cmdhficlass.c \
|
||||
|
|
|
@ -120,6 +120,7 @@ add_library(pm3rrg_rdv4 SHARED
|
|||
${PM3_ROOT}/client/src/cmdhfepa.c
|
||||
${PM3_ROOT}/client/src/cmdhffelica.c
|
||||
${PM3_ROOT}/client/src/cmdhffido.c
|
||||
${PM3_ROOT}/client/src/cmdhfgallagher.c
|
||||
${PM3_ROOT}/client/src/cmdhfcipurse.c
|
||||
${PM3_ROOT}/client/src/cmdhficlass.c
|
||||
${PM3_ROOT}/client/src/cmdhfjooki.c
|
||||
|
|
|
@ -254,6 +254,7 @@ set (TARGET_SOURCES
|
|||
${PM3_ROOT}/client/src/cmdhfepa.c
|
||||
${PM3_ROOT}/client/src/cmdhffelica.c
|
||||
${PM3_ROOT}/client/src/cmdhffido.c
|
||||
${PM3_ROOT}/client/src/cmdhfgallagher.c
|
||||
${PM3_ROOT}/client/src/cmdhfcipurse.c
|
||||
${PM3_ROOT}/client/src/cmdhficlass.c
|
||||
${PM3_ROOT}/client/src/cmdhfjooki.c
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "cmdhftopaz.h" // TOPAZ
|
||||
#include "cmdhffelica.h" // ISO18092 / FeliCa
|
||||
#include "cmdhffido.h" // FIDO authenticators
|
||||
#include "cmdhfgallagher.h" // Gallagher DESFire cards
|
||||
#include "cmdhfksx6924.h" // KS X 6924
|
||||
#include "cmdhfcipurse.h" // CIPURSE transport cards
|
||||
#include "cmdhfthinfilm.h" // Thinfilm
|
||||
|
@ -414,6 +415,7 @@ static command_t CommandTable[] = {
|
|||
{"emrtd", CmdHFeMRTD, AlwaysAvailable, "{ Machine Readable Travel Document... }"},
|
||||
{"felica", CmdHFFelica, AlwaysAvailable, "{ ISO18092 / FeliCa RFIDs... }"},
|
||||
{"fido", CmdHFFido, AlwaysAvailable, "{ FIDO and FIDO2 authenticators... }"},
|
||||
{"gallagher", CmdHFGallagher, AlwaysAvailable, "{ Gallagher DESFire RFIDs... }"},
|
||||
{"ksx6924", CmdHFKSX6924, AlwaysAvailable, "{ KS X 6924 (T-Money, Snapper+) RFIDs }"},
|
||||
{"jooki", CmdHF_Jooki, AlwaysAvailable, "{ Jooki RFIDs... }"},
|
||||
{"iclass", CmdHFiClass, AlwaysAvailable, "{ ICLASS RFIDs... }"},
|
||||
|
|
139
client/src/cmdhfgallagher.c
Normal file
139
client/src/cmdhfgallagher.c
Normal file
|
@ -0,0 +1,139 @@
|
|||
/**
|
||||
* Matt Moran (@DarkMatterMatt), 2021
|
||||
* -----------------------------------------------------------------------------
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
* -----------------------------------------------------------------------------
|
||||
* High frequency GALLAGHER tag commands.
|
||||
* MIFARE DESFire, AIDs 2081F4-2F81F4
|
||||
*/
|
||||
|
||||
#include "cmdhfgallagher.h"
|
||||
#include "mifare/gallaghercore.h"
|
||||
#include <stdio.h>
|
||||
#include "common.h"
|
||||
#include "cmdparser.h"
|
||||
#include "cliparser.h"
|
||||
#include "ui.h"
|
||||
|
||||
static int CmdHelp(const char *Cmd);
|
||||
|
||||
static int CmdGallagherReader(const char *Cmd) {
|
||||
CLIParserContext *ctx;
|
||||
CLIParserInit(&ctx, "hf gallagher reader",
|
||||
"read a GALLAGHER tag",
|
||||
"hf gallagher reader -@ -> continuous reader mode"
|
||||
);
|
||||
|
||||
void *argtable[] = {
|
||||
arg_param_begin,
|
||||
arg_lit0("@", NULL, "optional - continuous reader mode"),
|
||||
arg_param_end
|
||||
};
|
||||
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
||||
bool cm = arg_get_lit(ctx, 1);
|
||||
CLIParserFree(ctx);
|
||||
|
||||
if (cm) {
|
||||
PrintAndLogEx(INFO, "Press " _GREEN_("<Enter>") " to exit");
|
||||
}
|
||||
|
||||
do {
|
||||
// read
|
||||
} while (cm && !kbd_enter_pressed());
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
static int CmdGallagherClone(const char *Cmd) {
|
||||
CLIParserContext *ctx;
|
||||
CLIParserInit(&ctx, "hf gallagher clone",
|
||||
"clone a GALLAGHER card to a blank DESFire card.",
|
||||
"hf gallagher clone --rc 1 --fc 22 --cn 3333 --il 4"
|
||||
);
|
||||
|
||||
void *argtable[] = {
|
||||
arg_param_begin,
|
||||
arg_u64_1(NULL, "rc", "<decimal>", "Region code. 4 bits max"),
|
||||
arg_u64_1(NULL, "fc", "<decimal>", "Facility code. 2 bytes max"),
|
||||
arg_u64_1(NULL, "cn", "<decimal>", "Card number. 3 bytes max"),
|
||||
arg_u64_1(NULL, "il", "<decimal>", "Issue level. 4 bits max"),
|
||||
arg_param_end
|
||||
};
|
||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||
|
||||
uint64_t region_code = arg_get_u64(ctx, 1); // uint16, will be validated later
|
||||
uint64_t facility_code = arg_get_u64(ctx, 2); // uint32, will be validated later
|
||||
uint64_t card_number = arg_get_u64(ctx, 3); // uint64
|
||||
uint64_t issue_level = arg_get_u64(ctx, 4); // uint32, will be validated later
|
||||
CLIParserFree(ctx);
|
||||
|
||||
if (!isValidGallagherCredentials(region_code, facility_code, card_number, issue_level)) {
|
||||
return PM3_EINVARG;
|
||||
}
|
||||
|
||||
// TODO: create data
|
||||
|
||||
PrintAndLogEx(INFO, "Preparing to clone Gallagher from specified data.");
|
||||
|
||||
// TODO: write data
|
||||
|
||||
PrintAndLogEx(SUCCESS, "Done");
|
||||
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf gallagher reader`") " to verify");
|
||||
return PM3_ENOTIMPL;
|
||||
}
|
||||
|
||||
static int CmdGallagherSim(const char *Cmd) {
|
||||
CLIParserContext *ctx;
|
||||
CLIParserInit(&ctx, "hf gallagher sim",
|
||||
"Enables simulation of GALLAGHER card with specified card number.\n"
|
||||
"Simulation runs until the button is pressed or another USB command is issued.\n",
|
||||
"hf gallagher sim --rc 1 --fc 22 --cn 3333 --il 4"
|
||||
);
|
||||
|
||||
void *argtable[] = {
|
||||
arg_param_begin,
|
||||
arg_u64_1(NULL, "rc", "<decimal>", "Region code. 4 bits max"),
|
||||
arg_u64_1(NULL, "fc", "<decimal>", "Facility code. 2 bytes max"),
|
||||
arg_u64_1(NULL, "cn", "<decimal>", "Card number. 3 bytes max"),
|
||||
arg_u64_1(NULL, "il", "<decimal>", "Issue level. 4 bits max"),
|
||||
arg_param_end
|
||||
};
|
||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||
|
||||
uint64_t region_code = arg_get_u64(ctx, 1); // uint16, will be validated later
|
||||
uint64_t facility_code = arg_get_u64(ctx, 2); // uint32, will be validated later
|
||||
uint64_t card_number = arg_get_u64(ctx, 3); // uint64
|
||||
uint64_t issue_level = arg_get_u64(ctx, 4); // uint32, will be validated later
|
||||
CLIParserFree(ctx);
|
||||
|
||||
if (!isValidGallagherCredentials(region_code, facility_code, card_number, issue_level)) {
|
||||
return PM3_EINVARG;
|
||||
}
|
||||
|
||||
// TODO: create data
|
||||
|
||||
// TODO: simulate
|
||||
|
||||
return PM3_ENOTIMPL;
|
||||
}
|
||||
|
||||
static command_t CommandTable[] = {
|
||||
{"help", CmdHelp, AlwaysAvailable, "This help"},
|
||||
{"reader", CmdGallagherReader, IfPm3Iso14443, "attempt to read and extract tag data"},
|
||||
{"clone", CmdGallagherClone, IfPm3Iso14443, "clone GALLAGHER tag to a blank DESFire card"},
|
||||
{"sim", CmdGallagherSim, IfPm3Iso14443, "simulate GALLAGHER tag"},
|
||||
{NULL, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
static int CmdHelp(const char *Cmd) {
|
||||
(void) Cmd; // Cmd is not used so far
|
||||
CmdsHelp(CommandTable);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
int CmdHFGallagher(const char *Cmd) {
|
||||
clearCommandBuffer();
|
||||
return CmdsParse(CommandTable, Cmd);
|
||||
}
|
20
client/src/cmdhfgallagher.h
Normal file
20
client/src/cmdhfgallagher.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* Matt Moran (@DarkMatterMatt), 2021
|
||||
* -----------------------------------------------------------------------------
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
* -----------------------------------------------------------------------------
|
||||
* High frequency GALLAGHER tag commands.
|
||||
* MIFARE DESFire, AIDs 2081F4-2F81F4
|
||||
*/
|
||||
#ifndef CMDHFGALLAGHER_H__
|
||||
#define CMDHFGALLAGHER_H__
|
||||
|
||||
#include "common.h"
|
||||
|
||||
int CmdHFGallagher(const char *Cmd);
|
||||
|
||||
#endif
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue