找回密码
 立即注册
首页 业界区 业界 macOS下libnfc 1.8.0写卡失败问题及解决方案 ...

macOS下libnfc 1.8.0写卡失败问题及解决方案

赖琳芳 昨天 21:23
摘要

本文记录了在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卡。

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册