mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
move functions
This commit is contained in:
parent
b0eef72739
commit
7e2fd2a953
1 changed files with 214 additions and 214 deletions
|
@ -2073,219 +2073,6 @@ static int selectfile(uint8_t *aid, uint8_t fileno, uint8_t *cs) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CmdHF14ADesReadData(const char *Cmd) {
|
|
||||||
CLIParserContext *ctx;
|
|
||||||
CLIParserInit(&ctx, "hf mfdes read",
|
|
||||||
"Read data from File\n"
|
|
||||||
"Make sure to select aid or authenticate aid before running this command.",
|
|
||||||
"hf mfdes read -n 1 -t 0 -o 000000 -l 000000 -a 123456\n"
|
|
||||||
"hf mfdes read -n 1 -t 0 --> Read all data from standard file, fileno 1"
|
|
||||||
);
|
|
||||||
|
|
||||||
void *argtable[] = {
|
|
||||||
arg_param_begin,
|
|
||||||
arg_int0("n", "fileno", "<dec>", "File Number (0 - 31)"),
|
|
||||||
arg_strx0("o", "offset", "<hex>", "File Offset (3 hex bytes, big endian)"),
|
|
||||||
arg_strx0("l", "length", "<hex>", "Length to read (3 hex bytes, big endian -> 000000 = Read all data)"),
|
|
||||||
arg_int0("t", "type", "<dec>", "File Type (0 = Standard / Backup, 1 = Record)"),
|
|
||||||
arg_strx0("a", "aid", "<hex>", "App ID to select (3 hex bytes, big endian)"),
|
|
||||||
arg_param_end
|
|
||||||
};
|
|
||||||
|
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
|
||||||
int fno = arg_get_int_def(ctx, 1, 0);
|
|
||||||
|
|
||||||
int offsetlength = 0;
|
|
||||||
uint8_t offset[3] = {0};
|
|
||||||
int res_offset = CLIParamHexToBuf(arg_get_str(ctx, 2), offset, 3, &offsetlength);
|
|
||||||
|
|
||||||
int flength = 0;
|
|
||||||
uint8_t filesize[3] = {0};
|
|
||||||
int res_flen = CLIParamHexToBuf(arg_get_str(ctx, 3), filesize, 3, &flength);
|
|
||||||
|
|
||||||
int type = arg_get_int(ctx, 4);
|
|
||||||
|
|
||||||
int aidlength = 3;
|
|
||||||
uint8_t aid[3] = {0};
|
|
||||||
CLIGetHexWithReturn(ctx, 5, aid, &aidlength);
|
|
||||||
swap24(aid);
|
|
||||||
CLIParserFree(ctx);
|
|
||||||
|
|
||||||
if (type > 1) {
|
|
||||||
PrintAndLogEx(ERR, "Invalid file type (0 = Standard/Backup, 1 = Record)");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res_offset || (offsetlength != 3 && offsetlength != 0)) {
|
|
||||||
PrintAndLogEx(ERR, "Offset needs 3 hex bytes");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fno > 0x1F) {
|
|
||||||
PrintAndLogEx(ERR, "File number range is invalid (exp 0 - 31), got %d", fno);
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res_flen) {
|
|
||||||
PrintAndLogEx(ERR, "File size input error");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
swap24(filesize);
|
|
||||||
swap24(offset);
|
|
||||||
|
|
||||||
mfdes_data_t ft;
|
|
||||||
memcpy(ft.offset, offset, 3);
|
|
||||||
memcpy(ft.length, filesize, 3);
|
|
||||||
ft.fileno = fno;
|
|
||||||
|
|
||||||
uint32_t bytestoread = (uint32_t)le24toh(filesize);
|
|
||||||
bytestoread &= 0xFFFFFF;
|
|
||||||
|
|
||||||
if (bytestoread == 0)
|
|
||||||
bytestoread = 0xFFFFFF;
|
|
||||||
|
|
||||||
if (aidlength != 3 && aidlength != 0) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" The given aid must have 3 bytes (big endian)."));
|
|
||||||
return PM3_ESOFT;
|
|
||||||
} else if (aidlength == 0) {
|
|
||||||
if (memcmp(&tag->selected_application, aid, 3) == 0) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" You need to select an aid first."));
|
|
||||||
return PM3_ESOFT;
|
|
||||||
}
|
|
||||||
memcpy(aid, (uint8_t *)&tag->selected_application, 3);
|
|
||||||
}
|
|
||||||
uint8_t cs = 0;
|
|
||||||
if (selectfile(aid, ft.fileno, &cs) != PM3_SUCCESS) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" Error on selecting file."));
|
|
||||||
return PM3_ESOFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t *data = (uint8_t *)calloc(bytestoread, sizeof(uint8_t));
|
|
||||||
int res = PM3_ESOFT;
|
|
||||||
if (data != NULL) {
|
|
||||||
ft.data = data;
|
|
||||||
res = handler_desfire_readdata(&ft, type, cs);
|
|
||||||
if (res == PM3_SUCCESS) {
|
|
||||||
uint32_t len = le24toh(ft.length);
|
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "Read %u bytes from file %d", ft.fileno, len);
|
|
||||||
PrintAndLogEx(INFO, "Offset | Data | Ascii");
|
|
||||||
PrintAndLogEx(INFO, "----------------------------------------------------------------------------");
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < len; i += 16) {
|
|
||||||
uint32_t l = len - i;
|
|
||||||
PrintAndLogEx(INFO, "%3d/0x%02X | %s| %s", i, i, sprint_hex(&ft.data[i], l > 16 ? 16 : l), sprint_ascii(&ft.data[i], l > 16 ? 16 : l));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
PrintAndLogEx(ERR, "Couldn't read data. Error %d", res);
|
|
||||||
DropFieldDesfire();
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
DropFieldDesfire();
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int CmdHF14ADesWriteData(const char *Cmd) {
|
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
|
||||||
CLIParserInit(&ctx, "hf mfdes write",
|
|
||||||
"Write data to file\n"
|
|
||||||
"Make sure to select aid or authenticate aid before running this command.",
|
|
||||||
"hf mfdes write -n 01 -t 0 -o 000000 -d 3132333435363738"
|
|
||||||
);
|
|
||||||
|
|
||||||
void *argtable[] = {
|
|
||||||
arg_param_begin,
|
|
||||||
arg_int0("n", "fileno", "<dec>", "File Number (0 - 31)"),
|
|
||||||
arg_strx0("o", "offset", "<hex>", "File Offset (3 hex bytes, big endian), optional"),
|
|
||||||
arg_strx0("d", "data", "<hex>", "Data to write (hex bytes, 256 bytes max)"),
|
|
||||||
arg_int0("t", "type", "<dec>", "File Type (0 = Standard / Backup, 1 = Record)"),
|
|
||||||
arg_strx0("a", "aid", "<hex>", "App ID to select as hex bytes (3 bytes, big endian)"),
|
|
||||||
arg_param_end
|
|
||||||
};
|
|
||||||
|
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
|
||||||
int fno = arg_get_int_def(ctx, 1, 0);
|
|
||||||
|
|
||||||
int offsetlength = 0;
|
|
||||||
uint8_t offset[3] = {0};
|
|
||||||
int res_offset = CLIParamHexToBuf(arg_get_str(ctx, 2), offset, 3, &offsetlength);
|
|
||||||
|
|
||||||
// iceman: we only have a 1024 byte commandline input array. So this is pointlessly large.
|
|
||||||
// with 2char hex, 512bytes could be input.
|
|
||||||
// Instead large binary inputs should be BINARY files and written to card.
|
|
||||||
int dlength = 512;
|
|
||||||
uint8_t data[512] = {0};
|
|
||||||
int res_data = CLIParamHexToBuf(arg_get_str(ctx, 3), data, 512, &dlength);
|
|
||||||
|
|
||||||
int type = arg_get_int(ctx, 4);
|
|
||||||
int aidlength = 3;
|
|
||||||
uint8_t aid[3] = {0};
|
|
||||||
CLIGetHexWithReturn(ctx, 5, aid, &aidlength);
|
|
||||||
swap24(aid);
|
|
||||||
|
|
||||||
CLIParserFree(ctx);
|
|
||||||
|
|
||||||
swap24(offset);
|
|
||||||
|
|
||||||
if (type < 0 || type > 1) {
|
|
||||||
PrintAndLogEx(ERR, "Unknown type (0=Standard/Backup, 1=Record)");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res_data || dlength == 0) {
|
|
||||||
PrintAndLogEx(ERR, "Data needs some hex bytes to write");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res_offset || (offsetlength != 3 && offsetlength != 0)) {
|
|
||||||
PrintAndLogEx(ERR, "Offset needs 3 hex bytes");
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fno > 0x1F) {
|
|
||||||
PrintAndLogEx(ERR, "File number range is invalid (exp 0 - 31), got %d", fno);
|
|
||||||
return PM3_EINVARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
mfdes_data_t ft;
|
|
||||||
|
|
||||||
memcpy(ft.offset, offset, 3);
|
|
||||||
htole24(dlength, ft.length);
|
|
||||||
ft.fileno = fno;
|
|
||||||
|
|
||||||
if (aidlength != 3 && aidlength != 0) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" The given aid must have 3 bytes (big endian)."));
|
|
||||||
return PM3_ESOFT;
|
|
||||||
} else if (aidlength == 0) {
|
|
||||||
if (memcmp(&tag->selected_application, aid, 3) == 0) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" You need to select an aid first."));
|
|
||||||
return PM3_ESOFT;
|
|
||||||
}
|
|
||||||
memcpy(aid, (uint8_t *)&tag->selected_application, 3);
|
|
||||||
}
|
|
||||||
uint8_t cs = 0;
|
|
||||||
if (selectfile(aid, fno, &cs) != PM3_SUCCESS) {
|
|
||||||
PrintAndLogEx(ERR, _RED_(" Error on selecting file."));
|
|
||||||
DropFieldDesfire();
|
|
||||||
return PM3_ESOFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
int res = PM3_ESOFT;
|
|
||||||
ft.data = data;
|
|
||||||
res = handler_desfire_writedata(&ft, type, cs);
|
|
||||||
if (res == PM3_SUCCESS) {
|
|
||||||
PrintAndLogEx(SUCCESS, "Successfully wrote data");
|
|
||||||
} else {
|
|
||||||
PrintAndLogEx(ERR, "Couldn't read data. Error %d", res);
|
|
||||||
}
|
|
||||||
DropFieldDesfire();
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int CmdHF14ADesInfo(const char *Cmd) {
|
static int CmdHF14ADesInfo(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "hf mfdes info",
|
CLIParserInit(&ctx, "hf mfdes info",
|
||||||
|
@ -6443,6 +6230,219 @@ static int CmdHF14ADesClearRecordFile(const char *Cmd) {
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int CmdHF14ADesReadData(const char *Cmd) {
|
||||||
|
CLIParserContext *ctx;
|
||||||
|
CLIParserInit(&ctx, "hf mfdes read",
|
||||||
|
"Read data from File\n"
|
||||||
|
"Make sure to select aid or authenticate aid before running this command.",
|
||||||
|
"hf mfdes read -n 1 -t 0 -o 000000 -l 000000 -a 123456\n"
|
||||||
|
"hf mfdes read -n 1 -t 0 --> Read all data from standard file, fileno 1"
|
||||||
|
);
|
||||||
|
|
||||||
|
void *argtable[] = {
|
||||||
|
arg_param_begin,
|
||||||
|
arg_int0("n", "fileno", "<dec>", "File Number (0 - 31)"),
|
||||||
|
arg_strx0("o", "offset", "<hex>", "File Offset (3 hex bytes, big endian)"),
|
||||||
|
arg_strx0("l", "length", "<hex>", "Length to read (3 hex bytes, big endian -> 000000 = Read all data)"),
|
||||||
|
arg_int0("t", "type", "<dec>", "File Type (0 = Standard / Backup, 1 = Record)"),
|
||||||
|
arg_strx0("a", "aid", "<hex>", "App ID to select (3 hex bytes, big endian)"),
|
||||||
|
arg_param_end
|
||||||
|
};
|
||||||
|
|
||||||
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
int fno = arg_get_int_def(ctx, 1, 0);
|
||||||
|
|
||||||
|
int offsetlength = 0;
|
||||||
|
uint8_t offset[3] = {0};
|
||||||
|
int res_offset = CLIParamHexToBuf(arg_get_str(ctx, 2), offset, 3, &offsetlength);
|
||||||
|
|
||||||
|
int flength = 0;
|
||||||
|
uint8_t filesize[3] = {0};
|
||||||
|
int res_flen = CLIParamHexToBuf(arg_get_str(ctx, 3), filesize, 3, &flength);
|
||||||
|
|
||||||
|
int type = arg_get_int(ctx, 4);
|
||||||
|
|
||||||
|
int aidlength = 3;
|
||||||
|
uint8_t aid[3] = {0};
|
||||||
|
CLIGetHexWithReturn(ctx, 5, aid, &aidlength);
|
||||||
|
swap24(aid);
|
||||||
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
|
if (type > 1) {
|
||||||
|
PrintAndLogEx(ERR, "Invalid file type (0 = Standard/Backup, 1 = Record)");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res_offset || (offsetlength != 3 && offsetlength != 0)) {
|
||||||
|
PrintAndLogEx(ERR, "Offset needs 3 hex bytes");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fno > 0x1F) {
|
||||||
|
PrintAndLogEx(ERR, "File number range is invalid (exp 0 - 31), got %d", fno);
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res_flen) {
|
||||||
|
PrintAndLogEx(ERR, "File size input error");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
swap24(filesize);
|
||||||
|
swap24(offset);
|
||||||
|
|
||||||
|
mfdes_data_t ft;
|
||||||
|
memcpy(ft.offset, offset, 3);
|
||||||
|
memcpy(ft.length, filesize, 3);
|
||||||
|
ft.fileno = fno;
|
||||||
|
|
||||||
|
uint32_t bytestoread = (uint32_t)le24toh(filesize);
|
||||||
|
bytestoread &= 0xFFFFFF;
|
||||||
|
|
||||||
|
if (bytestoread == 0)
|
||||||
|
bytestoread = 0xFFFFFF;
|
||||||
|
|
||||||
|
if (aidlength != 3 && aidlength != 0) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" The given aid must have 3 bytes (big endian)."));
|
||||||
|
return PM3_ESOFT;
|
||||||
|
} else if (aidlength == 0) {
|
||||||
|
if (memcmp(&tag->selected_application, aid, 3) == 0) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" You need to select an aid first."));
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
|
memcpy(aid, (uint8_t *)&tag->selected_application, 3);
|
||||||
|
}
|
||||||
|
uint8_t cs = 0;
|
||||||
|
if (selectfile(aid, ft.fileno, &cs) != PM3_SUCCESS) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" Error on selecting file."));
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t *data = (uint8_t *)calloc(bytestoread, sizeof(uint8_t));
|
||||||
|
int res = PM3_ESOFT;
|
||||||
|
if (data != NULL) {
|
||||||
|
ft.data = data;
|
||||||
|
res = handler_desfire_readdata(&ft, type, cs);
|
||||||
|
if (res == PM3_SUCCESS) {
|
||||||
|
uint32_t len = le24toh(ft.length);
|
||||||
|
|
||||||
|
PrintAndLogEx(SUCCESS, "Read %u bytes from file %d", ft.fileno, len);
|
||||||
|
PrintAndLogEx(INFO, "Offset | Data | Ascii");
|
||||||
|
PrintAndLogEx(INFO, "----------------------------------------------------------------------------");
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < len; i += 16) {
|
||||||
|
uint32_t l = len - i;
|
||||||
|
PrintAndLogEx(INFO, "%3d/0x%02X | %s| %s", i, i, sprint_hex(&ft.data[i], l > 16 ? 16 : l), sprint_ascii(&ft.data[i], l > 16 ? 16 : l));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PrintAndLogEx(ERR, "Couldn't read data. Error %d", res);
|
||||||
|
DropFieldDesfire();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
DropFieldDesfire();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int CmdHF14ADesWriteData(const char *Cmd) {
|
||||||
|
|
||||||
|
CLIParserContext *ctx;
|
||||||
|
CLIParserInit(&ctx, "hf mfdes write",
|
||||||
|
"Write data to file\n"
|
||||||
|
"Make sure to select aid or authenticate aid before running this command.",
|
||||||
|
"hf mfdes write -n 01 -t 0 -o 000000 -d 3132333435363738"
|
||||||
|
);
|
||||||
|
|
||||||
|
void *argtable[] = {
|
||||||
|
arg_param_begin,
|
||||||
|
arg_int0("n", "fileno", "<dec>", "File Number (0 - 31)"),
|
||||||
|
arg_strx0("o", "offset", "<hex>", "File Offset (3 hex bytes, big endian), optional"),
|
||||||
|
arg_strx0("d", "data", "<hex>", "Data to write (hex bytes, 256 bytes max)"),
|
||||||
|
arg_int0("t", "type", "<dec>", "File Type (0 = Standard / Backup, 1 = Record)"),
|
||||||
|
arg_strx0("a", "aid", "<hex>", "App ID to select as hex bytes (3 bytes, big endian)"),
|
||||||
|
arg_param_end
|
||||||
|
};
|
||||||
|
|
||||||
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
int fno = arg_get_int_def(ctx, 1, 0);
|
||||||
|
|
||||||
|
int offsetlength = 0;
|
||||||
|
uint8_t offset[3] = {0};
|
||||||
|
int res_offset = CLIParamHexToBuf(arg_get_str(ctx, 2), offset, 3, &offsetlength);
|
||||||
|
|
||||||
|
// iceman: we only have a 1024 byte commandline input array. So this is pointlessly large.
|
||||||
|
// with 2char hex, 512bytes could be input.
|
||||||
|
// Instead large binary inputs should be BINARY files and written to card.
|
||||||
|
int dlength = 512;
|
||||||
|
uint8_t data[512] = {0};
|
||||||
|
int res_data = CLIParamHexToBuf(arg_get_str(ctx, 3), data, 512, &dlength);
|
||||||
|
|
||||||
|
int type = arg_get_int(ctx, 4);
|
||||||
|
int aidlength = 3;
|
||||||
|
uint8_t aid[3] = {0};
|
||||||
|
CLIGetHexWithReturn(ctx, 5, aid, &aidlength);
|
||||||
|
swap24(aid);
|
||||||
|
|
||||||
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
|
swap24(offset);
|
||||||
|
|
||||||
|
if (type < 0 || type > 1) {
|
||||||
|
PrintAndLogEx(ERR, "Unknown type (0=Standard/Backup, 1=Record)");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res_data || dlength == 0) {
|
||||||
|
PrintAndLogEx(ERR, "Data needs some hex bytes to write");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res_offset || (offsetlength != 3 && offsetlength != 0)) {
|
||||||
|
PrintAndLogEx(ERR, "Offset needs 3 hex bytes");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fno > 0x1F) {
|
||||||
|
PrintAndLogEx(ERR, "File number range is invalid (exp 0 - 31), got %d", fno);
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
mfdes_data_t ft;
|
||||||
|
|
||||||
|
memcpy(ft.offset, offset, 3);
|
||||||
|
htole24(dlength, ft.length);
|
||||||
|
ft.fileno = fno;
|
||||||
|
|
||||||
|
if (aidlength != 3 && aidlength != 0) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" The given aid must have 3 bytes (big endian)."));
|
||||||
|
return PM3_ESOFT;
|
||||||
|
} else if (aidlength == 0) {
|
||||||
|
if (memcmp(&tag->selected_application, aid, 3) == 0) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" You need to select an aid first."));
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
|
memcpy(aid, (uint8_t *)&tag->selected_application, 3);
|
||||||
|
}
|
||||||
|
uint8_t cs = 0;
|
||||||
|
if (selectfile(aid, fno, &cs) != PM3_SUCCESS) {
|
||||||
|
PrintAndLogEx(ERR, _RED_(" Error on selecting file."));
|
||||||
|
DropFieldDesfire();
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int res = PM3_ESOFT;
|
||||||
|
ft.data = data;
|
||||||
|
res = handler_desfire_writedata(&ft, type, cs);
|
||||||
|
if (res == PM3_SUCCESS) {
|
||||||
|
PrintAndLogEx(SUCCESS, "Successfully wrote data");
|
||||||
|
} else {
|
||||||
|
PrintAndLogEx(ERR, "Couldn't read data. Error %d", res);
|
||||||
|
}
|
||||||
|
DropFieldDesfire();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int CmdHF14ADesTest(const char *Cmd) {
|
static int CmdHF14ADesTest(const char *Cmd) {
|
||||||
DesfireTest(true);
|
DesfireTest(true);
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
|
@ -6486,7 +6486,7 @@ static command_t CommandTable[] = {
|
||||||
{"getfilesettings", CmdHF14ADesGetFileSettings, IfPm3Iso14443a, "[new]Get file settings"},
|
{"getfilesettings", CmdHF14ADesGetFileSettings, IfPm3Iso14443a, "[new]Get file settings"},
|
||||||
{"chfilesettings", CmdHF14ADesChFileSettings, IfPm3Iso14443a, "[new]Change file settings"},
|
{"chfilesettings", CmdHF14ADesChFileSettings, IfPm3Iso14443a, "[new]Change file settings"},
|
||||||
{"dump", CmdHF14ADesDump, IfPm3Iso14443a, "Dump all files"},
|
{"dump", CmdHF14ADesDump, IfPm3Iso14443a, "Dump all files"},
|
||||||
{"read", CmdHF14ADesReadData, IfPm3Iso14443a, "Read data from standard/backup/record file"},
|
{"read", CmdHF14ADesReadData, IfPm3Iso14443a, "[new]Read data from standard/backup/record file"},
|
||||||
{"write", CmdHF14ADesWriteData, IfPm3Iso14443a, "Write data to standard/backup/record file"},
|
{"write", CmdHF14ADesWriteData, IfPm3Iso14443a, "Write data to standard/backup/record file"},
|
||||||
{"value", CmdHF14ADesValueOperations, IfPm3Iso14443a, "[new]Operations with value file (get/credit/limited credit/debit/clear)"},
|
{"value", CmdHF14ADesValueOperations, IfPm3Iso14443a, "[new]Operations with value file (get/credit/limited credit/debit/clear)"},
|
||||||
{"clearrecfile", CmdHF14ADesClearRecordFile, IfPm3Iso14443a, "[new]Clear record File"},
|
{"clearrecfile", CmdHF14ADesClearRecordFile, IfPm3Iso14443a, "[new]Clear record File"},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue