mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-22 06:13:27 -07:00
commit perso sketch. https://github.com/Proxmark/proxmark3/blob/master/client/scripts/mifarePlus.lua#L184
not tested...
This commit is contained in:
parent
1b4e5e0ecc
commit
d76856aeed
2 changed files with 51 additions and 0 deletions
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#define arg_getsize(a) (sizeof(a) / sizeof(a[0]))
|
#define arg_getsize(a) (sizeof(a) / sizeof(a[0]))
|
||||||
#define arg_get_lit(n)(((struct arg_lit*)argtable[n])->count)
|
#define arg_get_lit(n)(((struct arg_lit*)argtable[n])->count)
|
||||||
|
#define arg_get_int_count(n)(((struct arg_int*)argtable[n])->count)
|
||||||
#define arg_get_int(n)(((struct arg_int*)argtable[n])->ival[0])
|
#define arg_get_int(n)(((struct arg_int*)argtable[n])->ival[0])
|
||||||
#define arg_get_str(n)((struct arg_str*)argtable[n])
|
#define arg_get_str(n)((struct arg_str*)argtable[n])
|
||||||
#define arg_get_str_len(n)(strlen(((struct arg_str*)argtable[n])->sval[0]))
|
#define arg_get_str_len(n)(strlen(((struct arg_str*)argtable[n])->sval[0]))
|
||||||
|
|
|
@ -51,6 +51,12 @@ int MFPWritePerso(uint8_t *keyNum, uint8_t *key, bool activateField, bool leaveS
|
||||||
return intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen);
|
return intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MFPCommitPerso(uint8_t mode, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) {
|
||||||
|
uint8_t rcmd[2] = {0xaa, mode};
|
||||||
|
|
||||||
|
return intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen);
|
||||||
|
}
|
||||||
|
|
||||||
int CmdHFMFPInfo(const char *cmd) {
|
int CmdHFMFPInfo(const char *cmd) {
|
||||||
|
|
||||||
if (cmd && strlen(cmd) > 0)
|
if (cmd && strlen(cmd) > 0)
|
||||||
|
@ -200,6 +206,50 @@ int CmdHFMFPInitPerso(const char *cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdHFMFPCommitPerso(const char *cmd) {
|
int CmdHFMFPCommitPerso(const char *cmd) {
|
||||||
|
CLIParserInit("hf mfp commitp",
|
||||||
|
"Executes Commit Perso command. Can be used in SL0 mode only.",
|
||||||
|
"Usage:\n\thf mfp commitp 01 -> \n");
|
||||||
|
|
||||||
|
void* argtable[] = {
|
||||||
|
arg_param_begin,
|
||||||
|
arg_lit0("vV", "verbose", "show internal data."),
|
||||||
|
arg_int0(NULL, NULL, "SL mode", NULL),
|
||||||
|
arg_param_end
|
||||||
|
};
|
||||||
|
CLIExecWithReturn(cmd, argtable, true);
|
||||||
|
|
||||||
|
bool verbose = arg_get_lit(1);
|
||||||
|
uint32_t mode = 1; // SL1
|
||||||
|
if (arg_get_int_count(2) > 0)
|
||||||
|
mode = arg_get_int(2);
|
||||||
|
CLIParserFree();
|
||||||
|
|
||||||
|
if (mode > 0xff) {
|
||||||
|
PrintAndLog("Mode must not more 255 instead of: %d", mode);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetVerboseMode(verbose);
|
||||||
|
|
||||||
|
uint8_t data[250] = {0};
|
||||||
|
int datalen = 0;
|
||||||
|
|
||||||
|
int res = MFPCommitPerso(mode, true, false, data, sizeof(data), &datalen);
|
||||||
|
if (res) {
|
||||||
|
PrintAndLog("Exchange error: %d", res);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (datalen != 3) {
|
||||||
|
PrintAndLog("Command must return 3 bytes instead of: %d", datalen);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data[0] != 0x90) {
|
||||||
|
PrintAndLog("Command error: %02x", data[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
PrintAndLog("Write OK.");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue