nfc-mfclassic 防止控制位误写 指定读写的块 补丁

博主分享了一次因操作失误导致饭卡部分区域被锁定的经历,为避免类似问题,他们为nfc-mfclassic工具添加了新的功能,即指定读写块和防止控制位误写的功能。通过这个补丁,可以更好地保护卡片数据的安全,确保关键区域不受影响。
摘要由CSDN通过智能技术生成

   昨天悲剧了,把一个不完整的dump写到了饭卡里,控制位全是0,直接导致饭卡的大部分区锁死,万幸的是,关键数据区没损坏,消费,门禁还都好用……

  为了防止悲剧的再次发生,给 nfc-mfclassic 添加了 防止控制位误写 功能,以下是  指定读写的块+防止控制位误写 补丁:


Index: nfc-mfclassic.c
===================================================================
--- nfc-mfclassic.c	(版本 1416)
+++ nfc-mfclassic.c	(工作副本)
@@ -38,6 +38,13 @@
 #  include "config.h"
 #endif // HAVE_CONFIG_H
 
+#define BYTE_HIGH(X)  ( 0XF & (X>>4) )
+#define BYTE_LOW(X)   ( 0XF & X)
+#define BYTE_HIGH_NOT(X) ( 0XF & ~BYTE_HIGH(X) )
+#define BYTE_LOW_NOT(X)  ( 0XF & ~BYTE_LOW(X) )
+
+#define GET_CX_BIT(half_byte,block)   ( 0x1 & (half_byte >> block))
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
@@ -71,6 +78,9 @@
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xab, 0xcd, 0xef, 0x12, 0x34, 0x56
 };
+//Operate block
+static bool blocks[0xFF];
+static bool bSkip = false;
 
 static const nfc_modulation nmMifare = {
   .nmt = NMT_ISO14443A,
@@ -127,11 +137,11 @@
 }
 
 static void
-print_success_or_failure (bool bFailure, uint32_t *uiBlockCounter)
+print_success_or_failure (char bFailure)
 {
-  printf ("%c", (bFailure) ? 'x' : '.');
-  if (uiBlockCounter && !bFailure)
-    *uiBlockCounter += (*uiBlockCounter < 128) ? 4 : 16;
+  printf ("%c", (bFailure) ? (bFailure==true?'x':'-'): '.');
+//  if (uiBlockCounter && !bFailure)
+//    *uiBlockCounter += (*uiBlockCounter < 128) ? 4 : 16;
 }
 
 static  bool
@@ -191,10 +201,10 @@
       memcpy (mp.mpa.abtKey, mtKeys.amb[uiTrailerBlock].mbt.abtKeyA, 6);
     else
       memcpy (mp.mpa.abtKey, mtKeys.amb[uiTrailerBlock].mbt.abtKeyB, 6);
-
     // Try to authenticate for the current sector
     if (nfc_initiator_mifare_cmd (pnd, mc, uiBlock, &mp))
       return true;
+    nfc_initiator_select_passive_target (pnd, nmMifare, nt.nti.nai.abtUid, nt.nti.nai.szUidLen, NULL);
   } else {
     // Try to guess the right key
     for (key_index = 0; key_index < num_keys; key_index++) {
@@ -259,7 +269,7 @@
 read_card (int read_unlocked)
 {
   int32_t iBlock;
-  bool    bFailure = false;
+  char    bFailure = false;
   uint3
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值