mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-26 16:15:25 -07:00
plain read works
This commit is contained in:
parent
a7b132a620
commit
9d6567edce
5 changed files with 18 additions and 11 deletions
|
@ -4461,6 +4461,9 @@ static int DesfileReadFileAndPrint(DesfireContext *dctx, uint8_t fnum, int filet
|
|||
int res = 0;
|
||||
// length of record for record file
|
||||
size_t reclen = 0;
|
||||
|
||||
// iso chaining works in the lrp mode
|
||||
dctx->isoChaining = (dctx->secureChannel == DACLRP);
|
||||
|
||||
// get file settings
|
||||
if (filetype == RFTAuto) {
|
||||
|
@ -4502,7 +4505,7 @@ static int DesfileReadFileAndPrint(DesfireContext *dctx, uint8_t fnum, int filet
|
|||
if (fsettings.fileCommMode != 0 && noauth)
|
||||
PrintAndLogEx(WARNING, "File needs communication mode `%s` but there is no authentication", CLIGetOptionListStr(DesfireCommunicationModeOpts, fsettings.commMode));
|
||||
|
||||
if ((fsettings.rAccess < 0x0e && fsettings.rAccess != dctx->keyNum) || (fsettings.rwAccess < 0x0e && fsettings.rwAccess != dctx->keyNum))
|
||||
if ((fsettings.rAccess < 0x0e && fsettings.rAccess != dctx->keyNum) && (fsettings.rwAccess < 0x0e && fsettings.rwAccess != dctx->keyNum))
|
||||
PrintAndLogEx(WARNING, "File needs to be authenticated with key 0x%02x or 0x%02x but current authentication key is 0x%02x", fsettings.rAccess, fsettings.rwAccess, dctx->keyNum);
|
||||
|
||||
if (fsettings.rAccess == 0x0f && fsettings.rwAccess == 0x0f)
|
||||
|
@ -4630,7 +4633,8 @@ static int CmdHF14ADesReadData(const char *Cmd) {
|
|||
"hf mfdes read --aid 123456 --fileisoid 1000 --type data -c iso -> read file via ISO channel: app=123456, iso id=1000, offset=0. Select via native ISO wrapper\n"
|
||||
"hf mfdes read --appisoid 0102 --fileisoid 1000 --type data -c iso -> read file via ISO channel: app iso id=0102, iso id=1000, offset=0. Select via ISO commands\n"
|
||||
"hf mfdes read --appisoid 0102 --fileisoid 1100 --type record -c iso --offset 000005 --length 000001 -> get one record (number 5) from file 1100 via iso commands\n"
|
||||
"hf mfdes read --appisoid 0102 --fileisoid 1100 --type record -c iso --offset 000005 --length 000000 -> get all record (from 5 to 1) from file 1100 via iso commands");
|
||||
"hf mfdes read --appisoid 0102 --fileisoid 1100 --type record -c iso --offset 000005 --length 000000 -> get all record (from 5 to 1) from file 1100 via iso commands\n"
|
||||
"hf mfdes read --appisoid df01 --fid 00 -s lrp -t aes -> read via lrp");
|
||||
|
||||
void *argtable[] = {
|
||||
arg_param_begin,
|
||||
|
|
|
@ -2083,7 +2083,7 @@ int DesfireReadFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_
|
|||
Uint3byteToMemLe(&data[1], offset);
|
||||
Uint3byteToMemLe(&data[4], len);
|
||||
|
||||
return DesfireCommand(dctx, MFDES_READ_DATA, data, 7, resp, resplen, -1);
|
||||
return DesfireCommand(dctx, (dctx->isoChaining) ? MFDES_READ_DATA2 : MFDES_READ_DATA, data, 7, resp, resplen, -1);
|
||||
}
|
||||
|
||||
int DesfireWriteFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *data) {
|
||||
|
@ -2093,7 +2093,7 @@ int DesfireWriteFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32
|
|||
Uint3byteToMemLe(&xdata[4], len);
|
||||
memcpy(&xdata[7], data, len);
|
||||
|
||||
return DesfireCommandTxData(dctx, MFDES_WRITE_DATA, xdata, 7 + len);
|
||||
return DesfireCommandTxData(dctx, (dctx->isoChaining) ? MFDES_WRITE_DATA2 : MFDES_WRITE_DATA, xdata, 7 + len);
|
||||
}
|
||||
|
||||
int DesfireValueFileOperations(DesfireContext *dctx, uint8_t fid, uint8_t operation, uint32_t *value) {
|
||||
|
@ -2119,7 +2119,7 @@ int DesfireReadRecords(DesfireContext *dctx, uint8_t fnum, uint32_t recnum, uint
|
|||
Uint3byteToMemLe(&data[1], recnum);
|
||||
Uint3byteToMemLe(&data[4], reccount);
|
||||
|
||||
return DesfireCommand(dctx, MFDES_READ_RECORDS, data, 7, resp, resplen, -1);
|
||||
return DesfireCommand(dctx, (dctx->isoChaining) ? MFDES_READ_RECORDS2 : MFDES_READ_RECORDS, data, 7, resp, resplen, -1);
|
||||
}
|
||||
|
||||
int DesfireWriteRecord(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *data) {
|
||||
|
@ -2129,7 +2129,7 @@ int DesfireWriteRecord(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint
|
|||
Uint3byteToMemLe(&xdata[4], len);
|
||||
memcpy(&xdata[7], data, len);
|
||||
|
||||
return DesfireCommandTxData(dctx, MFDES_WRITE_RECORD, xdata, 7 + len);
|
||||
return DesfireCommandTxData(dctx, (dctx->isoChaining) ? MFDES_WRITE_RECORD2 : MFDES_WRITE_RECORD, xdata, 7 + len);
|
||||
}
|
||||
|
||||
int DesfireUpdateRecord(DesfireContext *dctx, uint8_t fnum, uint32_t recnum, uint32_t offset, uint32_t len, uint8_t *data) {
|
||||
|
@ -2140,7 +2140,7 @@ int DesfireUpdateRecord(DesfireContext *dctx, uint8_t fnum, uint32_t recnum, uin
|
|||
Uint3byteToMemLe(&xdata[7], len);
|
||||
memcpy(&xdata[10], data, len);
|
||||
|
||||
return DesfireCommandTxData(dctx, MFDES_UPDATE_RECORD, xdata, 10 + len);
|
||||
return DesfireCommandTxData(dctx, (dctx->isoChaining) ? MFDES_UPDATE_RECORD2 : MFDES_UPDATE_RECORD, xdata, 10 + len);
|
||||
}
|
||||
|
||||
static void PrintKeySettingsPICC(uint8_t keysettings, uint8_t numkeys, bool print2ndbyte) {
|
||||
|
|
|
@ -37,12 +37,11 @@ void DesfireClearContext(DesfireContext *ctx) {
|
|||
ctx->keyType = T_DES;
|
||||
memset(ctx->key, 0, sizeof(ctx->key));
|
||||
|
||||
LRPClearContext(&ctx->lrpCtx);
|
||||
|
||||
ctx->secureChannel = DACNone;
|
||||
ctx->cmdSet = DCCNative;
|
||||
ctx->commMode = DCMNone;
|
||||
|
||||
ctx->isoChaining = false;
|
||||
ctx->appSelected = false;
|
||||
ctx->selectedAID = 0;
|
||||
|
||||
|
|
|
@ -78,8 +78,6 @@ typedef struct DesfireContextS {
|
|||
uint8_t key[DESFIRE_MAX_KEY_SIZE];
|
||||
uint8_t masterKey[DESFIRE_MAX_KEY_SIZE]; // source for kdf
|
||||
|
||||
LRPContext lrpCtx;
|
||||
|
||||
// KDF finction
|
||||
uint8_t kdfAlgo;
|
||||
uint8_t kdfInputLen;
|
||||
|
@ -89,6 +87,7 @@ typedef struct DesfireContextS {
|
|||
DesfireCommandSet cmdSet; // native/nativeiso/iso
|
||||
DesfireCommunicationMode commMode; // plain/mac/enc
|
||||
|
||||
bool isoChaining;
|
||||
bool appSelected; // for iso auth
|
||||
uint32_t selectedAID;
|
||||
|
||||
|
|
|
@ -25,11 +25,16 @@
|
|||
static const uint8_t CommandsCanUseAnyChannel[] = {
|
||||
MFDES_S_ADDITIONAL_FRAME,
|
||||
MFDES_READ_DATA,
|
||||
MFDES_READ_DATA2,
|
||||
MFDES_WRITE_DATA,
|
||||
MFDES_WRITE_DATA2,
|
||||
MFDES_GET_VALUE,
|
||||
MFDES_READ_RECORDS,
|
||||
MFDES_READ_RECORDS2,
|
||||
MFDES_WRITE_RECORD,
|
||||
MFDES_WRITE_RECORD2,
|
||||
MFDES_UPDATE_RECORD,
|
||||
MFDES_UPDATE_RECORD2,
|
||||
};
|
||||
|
||||
static bool CommandCanUseAnyChannel(uint8_t cmd) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue