mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 05:13:46 -07:00
Add - automatic try LF and HF search and if both fail, try lf read and save a trace file
This commit is contained in:
parent
6ba85af199
commit
f094e8fd50
3 changed files with 61 additions and 15 deletions
|
@ -1872,7 +1872,7 @@ int CmdPlot(const char *Cmd) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdSave(const char *Cmd) {
|
int CmdSave(const char *Cmd) {
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
char filename[FILE_PATH_SIZE] = {0x00};
|
char filename[FILE_PATH_SIZE] = {0x00};
|
||||||
|
|
|
@ -53,6 +53,7 @@ int CmdHpf(const char *Cmd);
|
||||||
int CmdLtrim(const char *Cmd); // used by cmd lf em4x, lf t55xx
|
int CmdLtrim(const char *Cmd); // used by cmd lf em4x, lf t55xx
|
||||||
int CmdNorm(const char *Cmd); // used by cmd lf data (!)
|
int CmdNorm(const char *Cmd); // used by cmd lf data (!)
|
||||||
int CmdPlot(const char *Cmd); // used by cmd lf cotag
|
int CmdPlot(const char *Cmd); // used by cmd lf cotag
|
||||||
|
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(const char *Cmd, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx
|
int ASKbiphaseDemod(const char *Cmd, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx
|
||||||
int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking
|
int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <time.h> // MingW
|
#include <time.h> // MingW
|
||||||
|
#include <stdlib.h> // calloc
|
||||||
|
|
||||||
#include "comms.h"
|
#include "comms.h"
|
||||||
#include "cmdhf.h"
|
#include "cmdhf.h"
|
||||||
|
@ -38,20 +39,6 @@
|
||||||
|
|
||||||
static int CmdHelp(const char *Cmd);
|
static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
int CmdRem(const char *Cmd) {
|
|
||||||
char buf[22] = {0};
|
|
||||||
struct tm *ct, tm_buf;
|
|
||||||
time_t now = time(NULL);
|
|
||||||
#if defined(_WIN32)
|
|
||||||
ct = gmtime_s(&tm_buf, &now) == 0 ? &tm_buf : NULL;
|
|
||||||
#else
|
|
||||||
ct = gmtime_r(&now, &tm_buf);
|
|
||||||
#endif
|
|
||||||
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", ct); // ISO8601
|
|
||||||
PrintAndLogEx(NORMAL, "%s remark: %s", buf, Cmd);
|
|
||||||
return PM3_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int usage_msleep(void) {
|
static int usage_msleep(void) {
|
||||||
PrintAndLogEx(NORMAL, "Sleep for given amount of milliseconds");
|
PrintAndLogEx(NORMAL, "Sleep for given amount of milliseconds");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
@ -65,6 +52,63 @@ static int usage_msleep(void) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int usage_auto(void) {
|
||||||
|
PrintAndLogEx(NORMAL, "Run LF SEARCH / HF SEARCH / DATA PLOT / DATA SAVE ");
|
||||||
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
PrintAndLogEx(NORMAL, "Usage: auto <ms>");
|
||||||
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
|
PrintAndLogEx(NORMAL, " h This help");
|
||||||
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
|
PrintAndLogEx(NORMAL, " auto");
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AppendDate(char *s, size_t slen, char *fmt) {
|
||||||
|
struct tm *ct, tm_buf;
|
||||||
|
time_t now = time(NULL);
|
||||||
|
#if defined(_WIN32)
|
||||||
|
ct = gmtime_s(&tm_buf, &now) == 0 ? &tm_buf : NULL;
|
||||||
|
#else
|
||||||
|
ct = gmtime_r(&now, &tm_buf);
|
||||||
|
#endif
|
||||||
|
if (fmt == NULL)
|
||||||
|
strftime(s, slen, "%Y-%m-%dT%H:%M:%SZ", ct); // ISO8601
|
||||||
|
else
|
||||||
|
strftime(s, slen, fmt, ct);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int CmdAuto(const char *Cmd) {
|
||||||
|
char ctmp = tolower(param_getchar(Cmd, 0));
|
||||||
|
if (ctmp == 'h') return usage_auto();
|
||||||
|
|
||||||
|
int ret = CmdLFfind("");
|
||||||
|
if (ret == PM3_SUCCESS)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = CmdHFSearch("");
|
||||||
|
if (ret == PM3_SUCCESS)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
PrintAndLogEx(INFO, "Failed both LF / HF SEARCH,");
|
||||||
|
PrintAndLogEx(INFO, "Trying 'lf read' and save a trace for you...");
|
||||||
|
|
||||||
|
CmdPlot("");
|
||||||
|
lf_read(true, 40000);
|
||||||
|
char *fname = calloc(100, sizeof(uint8_t));
|
||||||
|
AppendDate(fname, 100, "lf_unknown_%Y-%m-%d_%H:%M.pm3");
|
||||||
|
CmdSave(fname);
|
||||||
|
free(fname);
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CmdRem(const char *Cmd) {
|
||||||
|
char buf[22] = {0};
|
||||||
|
AppendDate(buf, sizeof(buf), NULL);
|
||||||
|
PrintAndLogEx(NORMAL, "%s remark: %s", buf, Cmd);
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int CmdMsleep(const char *Cmd) {
|
static int CmdMsleep(const char *Cmd) {
|
||||||
uint32_t ms = 0;
|
uint32_t ms = 0;
|
||||||
char ctmp = tolower(param_getchar(Cmd, 0));
|
char ctmp = tolower(param_getchar(Cmd, 0));
|
||||||
|
@ -90,6 +134,7 @@ static int CmdRev(const char *Cmd) {
|
||||||
|
|
||||||
static command_t CommandTable[] = {
|
static command_t CommandTable[] = {
|
||||||
{"help", CmdHelp, AlwaysAvailable, "This help. Use '<command> help' for details of a particular command."},
|
{"help", CmdHelp, AlwaysAvailable, "This help. Use '<command> help' for details of a particular command."},
|
||||||
|
{"auto", CmdAuto, IfPm3Present, "Automated detection process for unknown tags"},
|
||||||
{"analyse", CmdAnalyse, AlwaysAvailable, "{ Analyse utils... }"},
|
{"analyse", CmdAnalyse, AlwaysAvailable, "{ Analyse utils... }"},
|
||||||
{"data", CmdData, AlwaysAvailable, "{ Plot window / data buffer manipulation... }"},
|
{"data", CmdData, AlwaysAvailable, "{ Plot window / data buffer manipulation... }"},
|
||||||
{"emv", CmdEMV, AlwaysAvailable, "{ EMV ISO-14443 / ISO-7816... }"},
|
{"emv", CmdEMV, AlwaysAvailable, "{ EMV ISO-14443 / ISO-7816... }"},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue