README.md

July 15, 2026 · View on GitHub

NFC 卡片读写工具

方式一:使用微信小程序(推荐)

本项目提供微信小程序版本,无需安装 APP,微信扫码即可使用。

功能特点

  • 无需安装:微信扫码即用,无需下载额外应用
  • 智能扫描:扇区优先扫描,密钥命中率智能排序,找到密钥后自动广播测试其他扇区
  • 断点续扫:卡片离开后自动保存进度,重新贴卡可继续扫描
  • 实时进度:显示扫描速度(次/秒)、已验证扇区数
  • 读取验证:扫描完成后可验证读取权限,确保密钥有效
  • 数据读取:支持读取卡片扇区数据,手动输入密钥测试
  • 多种导出:JSON、文本、MFD、Dump 格式导出
  • 统计记录:记录扫描历史,密钥命中率分析

使用方法

  1. 打开小程序

    • 使用微信扫描下方二维码进入小程序
    小程序二维码
    • 小程序预览截图
    小程序二维码
  2. 开启检测

    • 小程序自动加载密钥库(显示密钥条数)
    • 点击「开启检测」按钮,等待 NFC 监听开启
    • 将 M1 卡片靠近手机背面 NFC 区域
  3. 扫描密钥

    • 检测到卡片后,点击「开始扫描」按钮
    • 实时显示扫描进度、速度、已找到扇区数
    • 找到密钥会自动显示在「已发现」区域
    • 如需暂停,卡片离开会自动保存进度
  4. 验证读取

    • 扫描完成后,点击「验证读卡」按钮
    • 验证所有扇区的实际读取权限
    • 验证成功后自动保存记录
  5. 查看记录

    • 点击「记录管理」查看所有扫描历史
    • 显示每张卡的 UID、类型、验证状态、扫描时间
  6. 读取数据

    • 在记录详情页点击「读取」读取卡片数据
    • 支持手动输入密钥测试特定扇区
    • 显示每个扇区的数据块内容
  7. 导出记录

    • 在记录详情页选择导出格式:
      • JSON 格式:完整结构化数据
      • 文本格式:易读的密钥报告
      • MFD 格式:标准 Mifare Dump 格式
      • Dump 格式:二进制数据文件

扫描策略说明

小程序采用智能扫描策略以提高效率:

  • 扇区优先:优先扫描扇区 0 和高扇区(通常使用默认密钥)
  • 密钥广播:找到密钥后立即测试其他扇区,减少重复测试
  • 命中率排序:根据历史命中率排序密钥,高频密钥优先测试
  • 失败记录:记录失败的密钥-扇区组合,避免重复无效测试

注意事项

  • 仅支持 Android:iOS 不支持 NFC Reader 模式,无法读取实体卡
  • 需要 NFC 支持:手机需支持 NFC 功能并已开启
  • 微信版本要求:需微信版本支持 NFC API(建议 8.0+)
  • 离线模式:网络不可达时使用内置常用密钥(约 8 个)

重要提示

正确操作流程

  1. 扫描过程中如需暂停,让卡片离开即可(自动保存进度)
  2. 重新贴卡后,小程序会自动检测并提示继续
  3. 完成后点击「停止扫描」断开卡片连接

⚠️ 扫描过程中请保持卡片稳定贴在手机背面,频繁移动可能导致连接中断


使用方式

方式二:使用本项目的 Android 扫描 APP

本项目提供了一个独立的 Android 应用,内置密钥库,无需下载额外文件,支持自动扫描 M1 卡密钥。

功能特点

  • 内置密钥库,开箱即用
  • 自动扫描 Mifare Classic 1K/4K 卡片密钥
  • 支持断点续扫(卡片离开后可继续扫描)
  • 扫描记录自动保存
  • 支持多种格式导出(JSON/文本/MFD)
  • 实时显示扫描进度和速度

安装步骤

  1. 打开 Releases 下载最新 APK(Assets 区)
  2. 安装到支持 NFC 的 Android 手机(需 Android 6.0+)
  3. 确保 NFC 功能已开启

使用方法

  1. 开始扫描

    • 打开 APP,点击「开始扫描」按钮
    • 将 M1 卡片靠近手机背面 NFC 区域
    • APP 会自动检测卡片并开始扫描密钥
  2. 扫描过程

    • 实时显示已找到的密钥和扫描进度
    • 显示当前扫描速度(次/秒)
    • 如卡片离开,会自动保存进度
  3. 断点续扫

    • 如果扫描过程中卡片离开,进度会自动保存
    • 重新靠近卡片后,会从上次位置继续扫描
  4. 查看记录

    • 点击右上角「记录」按钮查看所有扫描历史
    • 显示每张卡的 UID、扫描时间、完成状态
  5. 导出记录

    • 在记录页面,点击单条记录的「导出」按钮
    • 选择导出格式:
      • JSON 格式:完整的结构化数据,适合程序处理
      • 文本格式:易读的文本报告
      • MFD 格式:标准 Mifare Classic Dump 格式,可用于复制卡片
  6. 批量导出

    • 在记录页面点击「导出全部」
    • 导出所有卡片记录为 JSON 文件

导出格式说明

JSON 格式示例:

{
  "uid": "A1B2C3D4",
  "scanTime": 1712123456789,
  "cardType": "Mifare Classic",
  "sectorCount": 16,
  "sectorKeys": {
    "0": { "keyA": "FFFFFFFFFFFF", "keyB": "A0A1A2A3A4A5" },
    "1": { "keyA": "FFFFFFFFFFFF", "keyB": null }
  }
}

文本格式示例:

═══════════════════════════════════════
NFC M1 卡片密钥记录
═══════════════════════════════════════

卡片 UID: A1B2C3D4
扫描时间: 2024-04-03 12:34:56
卡片类型: Mifare Classic
扇区数量: 16

───────────────────────────────────────
密钥信息:
───────────────────────────────────────

扇区 0:
  密钥A: FFFFFFFFFFFF
  密钥B: A0A1A2A3A4A5

扇区 1:
  密钥A: FFFFFFFFFFFF
  密钥B: 未找到

Android 扫描 APP 下载地址(Releases):https://github.com/hugh999999/nfc_tool_share_key/releases/latest


方式三:使用官方 NFC Tool APP

  1. 下载密钥txt文件到手机目录
  2. 安装nfc_tool.apk
  3. 打开app -> 一键读写-> 点击使用联动密钥按钮-> 点击加载-> 选择密钥txt文件-> 点击确定-> 开始读卡-> 等待破解完成

其他模拟门禁过程参考官方文档

下载文件建议每8000个密钥一个文件,避免文件过大,加载密钥导致软件崩溃。

分割文件代码可以参考 spliteKey.js, 在node.js 环境下使用

Stargazers over time

Stargazers over time