@@ -329,9 +329,23 @@ static void nfc_generate_mf_classic_uid(uint8_t* uid, uint8_t length) {
329
329
static void
330
330
nfc_generate_mf_classic_common (MfClassicData * data , uint8_t uid_len , MfClassicType type ) {
331
331
data -> iso14443_3a_data -> uid_len = uid_len ;
332
- data -> iso14443_3a_data -> atqa [0 ] = 0x44 ;
332
+ data -> iso14443_3a_data -> atqa [0 ] = 0x00 ;
333
333
data -> iso14443_3a_data -> atqa [1 ] = 0x00 ;
334
- data -> iso14443_3a_data -> sak = 0x08 ;
334
+ data -> iso14443_3a_data -> sak = 0x00 ;
335
+ // Calculate the proper ATQA and SAK
336
+ if (uid_len == 7 ) {
337
+ data -> iso14443_3a_data -> atqa [0 ] |= 0x40 ;
338
+ }
339
+ if (type == MfClassicType1k ) {
340
+ data -> iso14443_3a_data -> atqa [0 ] |= 0x04 ;
341
+ data -> iso14443_3a_data -> sak = 0x08 ;
342
+ } else if (type == MfClassicType4k ) {
343
+ data -> iso14443_3a_data -> atqa [0 ] |= 0x02 ;
344
+ data -> iso14443_3a_data -> sak = 0x18 ;
345
+ } else if (type == MfClassicTypeMini ) {
346
+ data -> iso14443_3a_data -> atqa [0 ] |= 0x08 ;
347
+ data -> iso14443_3a_data -> sak = 0x09 ;
348
+ }
335
349
data -> type = type ;
336
350
}
337
351
@@ -343,6 +357,11 @@ static void nfc_generate_mf_classic_sector_trailer(MfClassicData* data, uint8_t
343
357
sec_tr -> access_bits .data [2 ] = 0x80 ;
344
358
sec_tr -> access_bits .data [3 ] = 0x69 ; // Nice
345
359
360
+ for (int i = 0 ; i < 6 ; i ++ ) {
361
+ sec_tr -> key_a .data [i ] = 0xFF ;
362
+ sec_tr -> key_b .data [i ] = 0xFF ;
363
+ }
364
+
346
365
mf_classic_set_block_read (data , block , & data -> block [block ]);
347
366
mf_classic_set_key_found (
348
367
data , mf_classic_get_sector_by_block (block ), MfClassicKeyTypeA , 0xFFFFFFFFFFFF );
@@ -396,41 +415,35 @@ static void nfc_generate_mf_classic(NfcDevice* nfc_device, uint8_t uid_len, MfCl
396
415
397
416
uint16_t block_num = mf_classic_get_total_block_num (type );
398
417
if (type == MfClassicType4k ) {
399
- // Set every block to 0xFF
418
+ // Set every block to 0x00
400
419
for (uint16_t i = 1 ; i < block_num ; i ++ ) {
401
420
if (mf_classic_is_sector_trailer (i )) {
402
421
nfc_generate_mf_classic_sector_trailer (mfc_data , i );
403
422
} else {
404
- memset (& mfc_data -> block [i ].data , 0xFF , 16 );
423
+ memset (& mfc_data -> block [i ].data , 0x00 , 16 );
405
424
}
406
425
mf_classic_set_block_read (mfc_data , i , & mfc_data -> block [i ]);
407
426
}
408
- // Set SAK to 18
409
- mfc_data -> iso14443_3a_data -> sak = 0x18 ;
410
427
} else if (type == MfClassicType1k ) {
411
- // Set every block to 0xFF
428
+ // Set every block to 0x00
412
429
for (uint16_t i = 1 ; i < block_num ; i ++ ) {
413
430
if (mf_classic_is_sector_trailer (i )) {
414
431
nfc_generate_mf_classic_sector_trailer (mfc_data , i );
415
432
} else {
416
- memset (& mfc_data -> block [i ].data , 0xFF , 16 );
433
+ memset (& mfc_data -> block [i ].data , 0x00 , 16 );
417
434
}
418
435
mf_classic_set_block_read (mfc_data , i , & mfc_data -> block [i ]);
419
436
}
420
- // Set SAK to 08
421
- mfc_data -> iso14443_3a_data -> sak = 0x08 ;
422
437
} else if (type == MfClassicTypeMini ) {
423
- // Set every block to 0xFF
438
+ // Set every block to 0x00
424
439
for (uint16_t i = 1 ; i < block_num ; i ++ ) {
425
440
if (mf_classic_is_sector_trailer (i )) {
426
441
nfc_generate_mf_classic_sector_trailer (mfc_data , i );
427
442
} else {
428
- memset (& mfc_data -> block [i ].data , 0xFF , 16 );
443
+ memset (& mfc_data -> block [i ].data , 0x00 , 16 );
429
444
}
430
445
mf_classic_set_block_read (mfc_data , i , & mfc_data -> block [i ]);
431
446
}
432
- // Set SAK to 09
433
- mfc_data -> iso14443_3a_data -> sak = 0x09 ;
434
447
}
435
448
436
449
nfc_generate_mf_classic_block_0 (
0 commit comments