15

通过手机的 NFC 功能模拟加密的门禁卡

 2 years ago
source link: https://sxy91.com/posts/nfc-ic-card/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在macbook下攻击和模拟 Mifare NFC 加密卡的简明指南

2021-09-04 宋洋葱 宋洋葱

换了一个新的住址,社区给了一张门禁卡,刚好小米手机支持模拟实体门禁卡,试了一下,只能开小区的大门,单元门没法开,电梯没法开。好奇为什么,索性研究了下如何解决这个问题。网上找了一圈,没有发现 mac 电脑上的教程,经过一番研究,实现了在 mac os x 下破解加密卡,在此记录一下破解过程。

本教程所用的硬件:

  • CUID 空白卡
  • PN532 读卡器
  • 小米8 手机(支持 NFC 功能)
  • macbook air (系统 10.15.7)

本教程所用到的软件:

其他可能需要的软件:

一、编译 mfoc 并安装

git clone https://github.com/nfc-tools/mfoc.git
cd mfoc 
brew install libnfc pkg-config automake autoconf
./configure
make && sudo make install
mfoc -h

二、mac osx 连接到 pn532

$> nfc-list
No NFC device found.

打开调试模式

$> LIBNFC_LOG_LEVEL=3 nfc-list
# 输出如下:
debug	libnfc.config	Unable to open directory: /usr/local/Cellar/libnfc/1.8.0/etc/nfc/devices.d
debug	libnfc.general	log_level is set to 3
debug	libnfc.general	allow_autoscan is set to true
debug	libnfc.general	allow_intrusive_scan is set to false
debug	libnfc.general	0 device(s) defined by user
nfc-list uses libnfc 1.8.0
debug	libnfc.general	0 device(s) found using acr122_usb driver
debug	libnfc.general	0 device(s) found using acr122_pcsc driver
debug	libnfc.general	0 device(s) found using pcsc driver
debug	libnfc.general	0 device(s) found using pn53x_usb driver
No NFC device found.

查看配置文件 cat /usr/local/Cellar/libnfc/1.8.0/etc/nfc/ 需要配置成:

allow_intrusive_scan=yes
allow_autoscan = true

再次执行 nfc-list 结果为

nfc-list uses libnfc 1.8.0
NFC device: pn532_uart:/dev/tty.usbserial-14120 opened

这就表示已经连接上 pn532 了,把卡片放到 pn532 后再次执行 nfc-list 如果识别到卡片,会出现

nfc-list uses libnfc 1.8.0
NFC device: pn532_uart:/dev/tty.usbserial-14120 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
       UID (NFCID1): ca  9e  cf  18  
      SAK (SEL_RES): 08  

看到 UID 就证明已经识别到卡片了,没有看到就多试试角度,或者换个钥匙扣类型的卡片。

三、破解密钥

执行 mfoc -P 500 -O mycard.mfd 会看到以下输出:

  Found Key: A [1ed2dfd37623]
  Data read with Key A revealed Key B: [1ed2dfd37623] - checking Auth: OK
Auth with all sectors succeeded, dumping keys to a file!

四、把数据写入手环

4.1 复制 UID

MifareClassicTool -> 克隆 UID -> 门禁卡 –> 计算0块并克隆 –> 空白卡

使用手环的模拟功能把这张空白卡模拟一下

4.2 获取解密数据

打开 MifareClassicTool -> 编辑/新建密钥,新建一个密钥,把刚刚破解出来的密钥和默认密钥粘贴进去。

# Standard Keys
FFFFFFFFFFFF
# your card
1ed2dfd3762

然后点击【读标签】选择刚刚创建的密钥文件,门禁卡靠近手机,点击【开始映射并读取标签】读取成功后【保存】转储文件。

4.3 把数据写入手环

手环靠近手机,然后 MifareClassicTool -> 编辑/分析转储文件 –> 刚保存的文件 -> 打开转储文件 -> 写转储 。

取消 0 扇区。

五、把数据写入手机

5.1 复制 UID

MifareClassicTool -> 克隆 UID -> 门禁卡 –> 计算0块并克隆 –> 空白卡

使用手机的模拟功能把这张空白卡模拟一下

5.2 获取空白卡密钥

把手机刚刚模拟成功的卡片放到 nfc 读卡器上,然后执行

mfoc -O blank_cuid.mfd

5.3 把数据写入手机

nfc-mfclassic w a u mycard.mfd blank_cuid.mfd f

编译过程中的问题记录。

mfoc 安装失败的解决方法

# 问题1
autoreconf: command not found
# 解决办法:安装 autoconf
brew install autoconf

# 问题2
Can't exec "aclocal": No such file or directory at
# 解决问题,安装 automake
brew install automake

# 问题3
configure.ac:17: error: possibly undefined macro: AC_MSG_ERROR
# 解决办法 安装 pkg-config 
brew install pkg-config 

# 问题4
configure: error: libnfc >= 1.7.0 is mandatory.
# 解决办法 安装 libnfc
brew install libnfc

mfoc 破解失败的解决办法

执行mfoc -O mycard.mfd命令后,mfoc 会以每次20的探测数探测数据,并会检测出加密情况。

Sector 00 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
Sector 01 - Unknown Key A               Unknown Key B
Sector 02 - Found   Key A: ffffffffffff Found   Key B: ffffffffffff
...

其中出现“Found Key”的行证明是发现了默认密钥,如果所有扇区的密钥都是 ffffffffffff 默认密钥的话,证明此卡没加密。

“Unknown Key”的行就是没发现密钥,如果全都是“Unknown Key”,那么此卡就是全加密卡,使用 mfoc 工具就无法破解。

如果有 “Found Key” 也有 “Unknown Key” 证明是半加密卡,mfoc 可以破解这种卡。

不加参数的情况下,一般需要等很久才能看到结果,甚至执行 20 分钟后发现失败。

mfoc: ERROR: No success, maybe you should increase the probes

可以改成 mfoc -P 500 -O mycard.mfd 加快速度。不出意外的话就可以看到成功字样了。

如何对比两个 mfd 文件的差异。

这里用别人写好的 Python 脚本查看破解的数据

pip install bitstring
git clone [email protected]:zhovner/mfdread.git
python mfdread/mfdread.py mycard.mfd

疑问,为什么 mfoc 和 mfcuk 没有安卓版本?既然手机相当于读卡器,为什么直接用手机破解呢?

mfoc 知道一张卡的一个密钥(部分加密) mfcuk 一个也不知道(全加密)

16的12次方=16*10^12≈2.8e+14≈两百八十万亿。

PN532 是高度集成的收发器模块,用于非接触式通信 13.56 MHz 基于 80C51 微控制器内核。

80C51:单片机、微控制器

80C51 单片机属于MCS-51系列单片机,由Intel公司开发.

参考文献:

扩展阅读:

来发评论吧~
Powered By Valine
v1.4.18

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK