|
@@ -651,7 +651,12 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u
|
|
|
if(!key_a_found) break;
|
|
if(!key_a_found) break;
|
|
|
FURI_LOG_D(TAG, "Try to read blocks with key A");
|
|
FURI_LOG_D(TAG, "Try to read blocks with key A");
|
|
|
key = nfc_util_bytes2num(sec_tr->key_a, sizeof(sec_tr->key_a));
|
|
key = nfc_util_bytes2num(sec_tr->key_a, sizeof(sec_tr->key_a));
|
|
|
- if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyA, &crypto, false, 0)) break;
|
|
|
|
|
|
|
+ if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyA, &crypto, false, 0)) {
|
|
|
|
|
+ mf_classic_set_key_not_found(data, sec_num, MfClassicKeyA);
|
|
|
|
|
+ FURI_LOG_D(TAG, "Key %dA not found in read", sec_num);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
for(size_t i = start_block; i < start_block + total_blocks; i++) {
|
|
for(size_t i = start_block; i < start_block + total_blocks; i++) {
|
|
|
if(!mf_classic_is_block_read(data, i)) {
|
|
if(!mf_classic_is_block_read(data, i)) {
|
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
@@ -660,7 +665,11 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u
|
|
|
} else if(i > start_block) {
|
|
} else if(i > start_block) {
|
|
|
// Try to re-auth to read block in case prevous block was protected from read
|
|
// Try to re-auth to read block in case prevous block was protected from read
|
|
|
furi_hal_nfc_sleep();
|
|
furi_hal_nfc_sleep();
|
|
|
- if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyA, &crypto, false, 0)) break;
|
|
|
|
|
|
|
+ if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyA, &crypto, false, 0)) {
|
|
|
|
|
+ mf_classic_set_key_not_found(data, sec_num, MfClassicKeyA);
|
|
|
|
|
+ FURI_LOG_D(TAG, "Key %dA not found in read", sec_num);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
|
mf_classic_set_block_read(data, i, &block_tmp);
|
|
mf_classic_set_block_read(data, i, &block_tmp);
|
|
|
blocks_read++;
|
|
blocks_read++;
|
|
@@ -680,7 +689,12 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u
|
|
|
}
|
|
}
|
|
|
FURI_LOG_D(TAG, "Try to read blocks with key B");
|
|
FURI_LOG_D(TAG, "Try to read blocks with key B");
|
|
|
key = nfc_util_bytes2num(sec_tr->key_b, sizeof(sec_tr->key_b));
|
|
key = nfc_util_bytes2num(sec_tr->key_b, sizeof(sec_tr->key_b));
|
|
|
- if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyB, &crypto, false, 0)) break;
|
|
|
|
|
|
|
+ if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyB, &crypto, false, 0)) {
|
|
|
|
|
+ mf_classic_set_key_not_found(data, sec_num, MfClassicKeyB);
|
|
|
|
|
+ FURI_LOG_D(TAG, "Key %dB not found in read", sec_num);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
for(size_t i = start_block; i < start_block + total_blocks; i++) {
|
|
for(size_t i = start_block; i < start_block + total_blocks; i++) {
|
|
|
if(!mf_classic_is_block_read(data, i)) {
|
|
if(!mf_classic_is_block_read(data, i)) {
|
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
@@ -689,7 +703,11 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u
|
|
|
} else if(i > start_block) {
|
|
} else if(i > start_block) {
|
|
|
// Try to re-auth to read block in case prevous block was protected from read
|
|
// Try to re-auth to read block in case prevous block was protected from read
|
|
|
furi_hal_nfc_sleep();
|
|
furi_hal_nfc_sleep();
|
|
|
- if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyB, &crypto, false, 0)) break;
|
|
|
|
|
|
|
+ if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyB, &crypto, false, 0)) {
|
|
|
|
|
+ mf_classic_set_key_not_found(data, sec_num, MfClassicKeyB);
|
|
|
|
|
+ FURI_LOG_D(TAG, "Key %dB not found in read", sec_num);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) {
|
|
|
mf_classic_set_block_read(data, i, &block_tmp);
|
|
mf_classic_set_block_read(data, i, &block_tmp);
|
|
|
blocks_read++;
|
|
blocks_read++;
|