macOS下libnfc 1.8.0写卡失败问题及解决方案
摘要
本文记录了在mac下使用1.8.0版本的libnfc时写卡失败的问题,并给出了使用1.7.1版本libnfc的解决方案。本文同时在文末记录了使用libnfc对NFC卡片进行复制和编辑的操作步骤。
问题描述
最近笔者在折腾nfc相关的应用,为此购入了一个型号为ACR122U的NFC读写卡器,但是在mac上使用libnfc进行nfc写操作时遇到了问题,具体表现为:当某个扇区的密码和原密码不同时,该扇区实际写入失败,但是nfc-mfclassic指令并没有报错。
具体而言,使用mfoc指令读入一张nfc白卡的数据为old.dump,其中某个扇区的key默认是FFFFFFFFFFFF,如果我们把这个key改成0A1B2C3D4E5F,存储为new.dump,然后使用nfc-mfclassic w a old.dump new.dump写入,指令没有报错。但是如果这时候再使用mfoc去尝试读取卡片,就会发现那个扇区的key并没有发生变化,也就是说,可以直接使用FFFFFFFFFFFF解密,这就说明写入操作实际是失败的。如果是复制门禁卡等场景,这一点还可以通过实际去刷这张写入后的卡来验证。
解决方案
参考了github上的这个 https://github.com/nfc-tools/libnfc/issues/684 issue之后,发现是libnfc的版本有问题。我们通过brew install mfoc安装的libnfc是1.8.0版本的,issue里面有大佬指出可以通过切换到1.7.1版本的libnfc来解决此问题。
具体操作方式为:通过这个链接 https://github.com/nfc-tools/libnfc/files/12026826/libnfc-1.7.1.zip 下载1.7.1版本的源码
然后运行./configure,sudo make && sudo make install
最后执行nfc-list,查看当前的版本,如果为1.7.1则表示安装成功。
如果查看到的版本号仍然是1.8.0,则可能是homebrew安装的libnfc在PATH里的优先级比我们安装的高,可以通过which nfc-list来查看nfc-list的目录,如果是homebrew下的,则需要编辑~/.zshrc,在PATH环境变量后面加上PATH_TO_NFC_1_7_1/utils(其中PATH_TO_NFC_1_7_1就是你解压的libnfc-1.7.1文件夹的绝对路径)
添加完成之后执行 source ~/.zshrc,然后再使用nfc-list查看版本号,此时应该就会显示版本号为1.7.1。
附:使用libnfc进行NFC卡复制&编辑的操作流程
首先把需要复制的NFC卡放在读卡器上,执行mfoc -O target.dump,把旧卡数据dump下来。如果原卡是有加密的,则还需要进行密码破解的步骤,这里的具体原理不再赘述。
然后把新卡放在读卡器上,执行mfoc -O white.dump,这一步是为了获取包含白卡密码的dump,用于后续写入。
最后执行nfc-mfclassic w a target.dump white.dump即可把原卡的数据写入新卡中,完成复制。如果是需要保留原卡ID的场景,则需要使用nfc-mfclassic W a u target.dump white.dump来覆写第0扇区里的ID部分(仅部分NFC卡片支持此功能)。
如果需要修改卡内容,只需要使用vim -b target.dump打开dump文件(注意,一定要使用-b参数,如果只是用vim打开二进制文件会导致vim对换行符进行特殊处理,会影响后面转文本和转回二进制),然后输入:%!xxd,将二进制文件转为文本文件,编辑中间的十六进制数字区域,编辑完成后再使用:%!xxd -r将文本文件转回二进制,最后:wq保存。然后使用nfc-mfclassic w a target.dump key.dump写入即可,这里的key.dump就是即将写入的NFC卡的dump,里面包含的密码会用于解锁当前要写入的NFC卡。
macOS下libnfc 1.8.0写卡失败问题及解决方案的更多相关文章
- macOS 下的 MySQL 8.0.17 安装与简易配置
如果我写的这篇你看不懂,可能网上也没有你能看懂的教程了 虽然这篇针对的是8.0.x版本,但是关于MySQL配置之类的方法还是通用的 环境信息与适用范围 环境信息 环境/软件 版本 macOS macO ...
- macOS下MySQL 8.0 安装与配置教程
一.前言 1.本教程主要内容 适用Homebrew安装MySQL MySQL 8.0 基础适用于配置 MySQL shell管理常用语法示例(用户.权限等) MySQL字符编码配置 MySQL远程访问 ...
- cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project
下面是子龙山人录制的关于cocos2d-x3.0的视频教程,macOS下配置Android开发环境.使用cocos2d-console来新建执行project.怎样执行cocos2d-x 3.0win ...
- MIT6.828课程JOS在macOS下的环境配置
本文将介绍如何在macOS下配置MIT6.828 JOS实验的环境. 写JOS之前,在网上搜寻JOS的开发环境,很多博客和文章都提到"不是32位linux就不好配置,会浪费大量时间在配置环境 ...
- MacOS下Rails+Nginx+SSL环境的搭建(上)
这里把主要的步骤写下来,反正我是走了不少弯路,希望由此需求的朋友们别再走类似的弯路.虽说环境是在MacOS下搭建,但是基本上和linux下的很相像,大家可以举一反三. 一.安装Rails 这个是最简单 ...
- Android NFC近场通信02----读写卡的准备工作
Android NFC近场通信02----读写卡的准备工作 因为公司接了一个听上去感觉比較NB的项目.给某油田做派工系统 .并由小女子负责Androi ...
- MacOS下制作linux启动盘
在Windows下,我们经常使用软碟通来制作各种系统的启动盘,那么在MacOS下,如何做到呢?MacOS跟Linux的做法基本一致.如果你只想快速地制作好启动盘,请看下面的快速版 首先,你需要以下两样 ...
- MIT6.828准备:MacOS下搭建xv6和risc-v环境
本文介绍在MacOS下搭建Mit6.828/6.S081 fall2019实验环境的详细过程,包括riscv工具链.qemu和xv6,对于Linux系统同样可以参考. 介绍 只有了解底层原理才能写好上 ...
- MacOS下如何优雅的使用冰蝎
因为冰蝎也是使用 JAVA 写的跨平台应用程序,我们可以借助 macOS 自带的 自动操作 automator.app 来创建一个应用程序. 前言: 冰蝎是一种新型的Webshell连接工具,在日常的 ...
- 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NE ...
随机推荐
- HarmonyOS NEXT仓颉开发语言实战案例:外卖App
各位周末好,今天为大家来仓颉语言外卖App的实战分享. 我们可以先分析一下页面的布局结构,它是由导航栏和List容器组成的.幽蓝君目前依然没有找到仓颉语言导航栏的系统组件,还是要自定义,这个导航栏有三 ...
- 9.Java SDK源码分析系列笔记-LinkedHashMap
目录 1. 是什么 2. 使用 3. 实现 3.1. uml 3.2. 构造方法 3.3. put 3.3.1. 创建LinkedHashMap增强的节点--Entry[既是Node数组的节点又是双向 ...
- Elastic学习之旅 (6) Query DSL
大家好,我是Edison.首先说声抱歉,这个ES学习系列很久没更新了,现在继续吧. 上一篇:ES的倒排索引和Analyzer 什么是Query DSL DSL是Domain Specific Lang ...
- 放弃Cursor,拥抱Claude code(白嫖100美金余额,可以用Claude Sonnet 4)
前言 之前一直在使用Cursor,但是最近Cursor一直偷偷改价降智,不是那么好用了,Claude的公司Anthropic自己推出AI编程工具Claude code体验了一下,感觉非常的丝滑,主要是 ...
- 洛谷P2357
这仅仅是过去写的一个记录,更详细请见树状数组详解,本题是作为例题讲解的. 洛谷同步链接 题目传送门 与普通树状数组不同的是,这次既需要单点修改.区间查询,又需要区间修改.单点查询. 对于数组 $a$ ...
- windows 11正式版如何设置使用双屏幕的问题
有雨林木风官网的朋友,因为工作需要在使用电脑时,要用到双屏幕来分开操作不同的软件,但是连接第二个显示器后,却没有办法使用这个显示器,这是什么原因呢?其实,因为Windows 11系统未进行相对应的设定 ...
- PHP反序列化例题以及Bypass总结
unseping 题目源码 <?php highlight_file(__FILE__); class ease{ private $method; private $args; functio ...
- 单片机和罗克韦尔Micro850实现Modbus\DF1\Ethernet/IP协议通信视频教程
单片机和罗克韦尔Micro850实现Modbus\DF1\Ethernet/IP协议通信视频教程 1.单片机+RS485模块和罗克韦尔AB Micro850实现Modbus RTU协议串口通信视频讲解 ...
- consul命令行
consul命令行 advertise:广告地址用于将我们通告的地址更改为群集中的其他节点.默认情况下,-bind通告地址.但是,在某些情况下,可能存在无法绑定的可路由地址.此标志允许闲聊不同的地址以 ...
- Gin框架介绍
Gin框架介绍 介绍 Gin 是一个用 Go (Golang) 编写的 Web 框架. 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍. 快速 ...