基于树莓派实现的便携式NFC破解工具

by LauCyun Aug 27,2018 21:28:59 23,276 views

前段时间从某宝上入手了一个NFC读卡器,通过一些可视化的工具实验了一番,但是效果不太满意。正好前几天在HACKADAY看到一玩意儿,如图1所示:


图1 NFC中继攻击

突然勾起了我的兴趣,谷歌了下相关资料,找到2篇北邮的论文:

本文主要介绍如何利用树莓派打造成一个便携式的NFC工具。

0x0 准备

思路是利用树莓派2B作为介质,通过ACR122U型号的NFC读卡器,读取(libnfc)或破解(mfoc)IC卡。

硬件:

  • 树莓派2B
  • 龙杰ACR122U读卡器


图2 树莓派2B和ACR122U

软件:

0x1 烧写系统

先将SD卡插入到电脑上,查看当前已挂载的卷,判断SD卡是否被读取,如图3所示:


图3 磁盘信息

可以通过相关属性判断,从而得知当前disk2s1就是我们SD卡的分区在系统里对应的文件,如果你的SD卡有多个分区,那么可能还会有disk2s2disk2s3

在烧写系统之前,先执行命令diskutil unmount /dev/disk2s1将SD卡的disk2s1分区卸载,然后执行命令sudo dd bs=8m if=Desktop/nfc/2018-06-27-raspbian-stretch-lite.img of=/dev/disk2进行系统的烧写。

说明:
sudo dd bs=8m if=xxxx of=yyyy

  • “xxxx”代表镜像的名称
  • “yyyy”代表要烧写的sd卡

稍等几分钟,如果出现如图4所示的信息,则表明系统烧写成功了。


图4 树莓派的系统烧写过程

最后,就是执行命令diskutil unmountDisk /dev/disk2卸载SD卡。

0x2 配置

1 开启SSH服务

将刷好系统的SD卡在电脑上打开,进入SD卡根目录并创建一个名为ssh的文件或目录,如图5所示:

图5 创建ssh文件或目录

创建完成后,即可将SD卡从电脑上弹出,然后把SD卡插入树莓派中即可上电开机。

2 更换软件源

用USB转TTL串口线连接电脑,而另一端连接到树莓派GPIO上,其接线如图6所示:


图5 USB转TTL串口接线图

红线(VCC)接排针外面一排,靠近显示灯一端的第一针
黑线(GND)接排针外面一排,靠近显示灯一端的第三针
白线(TXD)接排针外面一排,靠近显示灯一端的第四针
绿线(RTX)接排针外面一排,靠近显示灯一端的第五针

如果电脑是Windows系统,请参考笔记本通过USB转TTL来登陆树莓派 raspberry;如果是macOS系统,请参考Mac OS X上使用USB转串口线连接树莓派

通过USB转TTL线连接上树莓派后,输入用户名是pi,密码是raspberry即可登录树莓派。

接下来,设置树莓派的软件源,将/etc/apt/sources.list文件中默认的源地址http://raspbian.raspberrypi.org/替换为http://mirrors.ustc.edu.cn/raspbian/即可。

raspbian 2018-04-19之后的镜像默认源已经更改,用如下命令替换:

sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list

旧版的系统可以用以下命令替换:

sudo sed -i 's|mirrordirector.raspbian.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list
sudo sed -i 's|archive.raspbian.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list

编辑镜像站后,使用sudo apt-get update命令更新软件源列表,同时检查您的编辑是否正确。

3 安装ACR122U驱动

https://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/下载ACR122U最新版本的驱动文件,如下:

sudo wget https://www.acs.com.hk/download-driver-unified/9184/ACS-Unified-Driver-Lnx-Mac-115-P.zip

下载完成后,先解压,然后编译安装:

# 解压
$ sudo unzip ACS-Unified-Driver-Lnx-Mac-115-P.zip Archive:  ACS-Unified-Driver-Lnx-Mac-115-P.zip
   creating: ACS-Unified-Driver-Lnx-Mac-115-P/
  inflating: ACS-Unified-Driver-Lnx-Mac-115-P/acsccid-1.1.5.tar.bz2  
  inflating: ACS-Unified-Driver-Lnx-Mac-115-P/INSTALL  
  inflating: ACS-Unified-Driver-Lnx-Mac-115-P/README  
$ ls -al
total 468
drwxrwsr-x  3 root staff   4096 Aug 24 05:14 .
drwxrwsr-x 10 root staff   4096 Jun 27 00:03 ..
drwxr-sr-x  2 root staff   4096 Nov  2  2017 ACS-Unified-Driver-Lnx-Mac-115-P
-rw-r--r--  1 root staff 465600 Aug 24 05:11 ACS-Unified-Driver-Lnx-Mac-115-P.zip
$ cd ACS-Unified-Driver-Lnx-Mac-115-P/
$ sudo tar -jxvf acsccid-1.1.5.tar.bz2 
# 安装
$ cd acsccid-1.1.5/
$ sudo ./configure
$ sudo make
$ sudo make install

如果安装过程中出现以下错误:

4 安装libnfc

libnfc是NFC的一个基础SDK库,其官方介绍如下:

libnfc is the first libre low level NFC SDK and Programmers API released under the GNU Lesser General Public License. 
It provides complete transparency and royalty-free use for everyone. 

由于libnfc依赖libusb、libpcsclite,所以需要安装编译环境:

sudo apt-get install -y make gcc libusb-dev libpcsclite-dev

下载libnfc-1.7.1.tar.bz2、解压、编译安装:

# 下载
$ sudo wget https://github.com/nfc-tools/libnfc/releases/download/libnfc-1.7.1/libnfc-1.7.1.tar.bz2
# 解压
$ sudo tar -jxvf libnfc-1.7.1.tar.bz2
# 安装
$ cd libnfc-1.7.1/
$ sudo ./configure --with-drivers=acr122_usb --prefix=/usr --sysconfdir=/etc
$ sudo make
$ sudo make install

5 安装mfoc

先安装mfoc编译环境:

sudo apt-get install autoconf checkinstall

然后从https://github.com/nfc-tools/mfoc/releases下载最新版安装文件、然后解压、编译安装:

# 下载
$ sudo wget https://github.com/nfc-tools/mfoc/archive/mfoc-0.10.7.tar.gz
# 解压
$ sudo tar -zxvf mfoc-0.10.7.tar.gz
$ cd mfoc-mfoc-0.10.7/
# 编译
$ sudo autoreconf -vis
$ sudo ./configure
$ sudo make
# 安装
$ sudo checkinstall -D -y --install
$ sudo make install

6 禁用pn533内核模块

需要禁用掉pn533的内核模块,不然树莓派是识别不了ACR122U,详细可参考ACR122U NFC USB reader on a Raspberry Pi

/etc/modprobe.d/fbdev-blacklist.conf中添加如下内容:

blacklist nfc
blacklist pn533
blacklist pn533_usb

然后,将ACR122U连接到树莓派,查看一下是否识别,如图6所示:


图6 读取到的NFC设备

0x3 破解演示

随便找了一张卡,然后把卡放到ACR122U上,如图7所示:


图7 待破解的超市卡

执行如下命令开始破解,破解完成之后保存的文件名为test.mfd

sudo mfoc -P 50 -T 30 -O test.mfd

从图8得知,扇区3被加密了:


图8 扇区3已加密

如果对M1卡结构不熟悉的朋友,可以先了解其结构如图9所示:


图9 M1卡结构

大约等了10分钟左右,破解完成!


图10 破解成功

查看一下test.mfd,卡中数据全部都能看到,推荐使用mfdread.py进行可视化查看,如图11所示:

图11 可视化查看卡中数据

如上图11所示,扇区3中的数据为30313030303037393630****,破解得到0100007960**,正好跟卡号一致,所以此卡里存储的数据为卡号。

到这里,如果把卡中的卡号改成他人的卡号,你懂的winkwinkwink

 0x4 参考

Tags