首页 > 代码库 > RFID之linux下利用PN532对M1卡(饭卡,

RFID之linux下利用PN532对M1卡(饭卡,

 

2014-12-20

技术分享

这篇文章主要是讲 linux下的对IC卡(M1卡)的无线hack技术。

设备:硬件方面,PC机一台,PN532开发板一套。

软件方面:mfoc,mfcuk。

本文用不到mfcuk的,我还是给大家科普下吧。
原理这些我不讲啦,讲应用吧。
mfoc,知道卡的一个密码,以超短时间破解其他所有密码。
mfcuk,通过随机数,暴力破解密码(别认为是随机数充当密码),一般30分钟内能破解,不能破解的话说明你运气不够,换个时间

忍不住还是说说M1卡吧。
M1卡,一般国内喜欢用1K卡,1K卡里面有16个扇区,每个扇区有4个块,每个块有16个字节。

第0块,第1块,第2块都是数据区域。

第3块是keyA,控制段,keyB的存储区域,分别是6个字节,4个字节,6个字节。

 

特别的,第0个扇区的第0个块是比较特殊的,里面是只读的,不可改的,存储的是厂家的一些信息。

(有些卡就是通过这个区域产生随机密码然后让普通的M1空白卡不能复制,因为要复制只能复制除第0扇区第0块的东西啊。除非有神一般的第0扇区,第0块可写的M1卡,楼主有一张哦。)

因为这个无线破解楼主已经在很长一段时间搞了,所以一些软件的编译截图我没有,在下面先把代码贴出来吧。

1.因为楼主用的PC和PN532开发板要相连,而PN532用的是UART的串口.

所以我用了一个USB转UART的板子,把两个东西连起来了。

然后装些必要的驱动。

安装:libpcsclite-dev 和 libusb-dev

apt-get install libpcsclite-dev libusb-dev

安装:libccid 和 pcscd

apt-get install libusb-0.1-4 libpcsclite1 libccid pcscd

到googlecode里面下载libnfc-1.6.0-rc1.tar.gz
然后一条条执行下面命令,搞个sh也可以。

 

下面这些指令不懂的话补补基础吧。

tar xzvf libnfc-1.6.0-rc1.tar.gz

  1. cd libnfc-1.6.0-rc1/

  2. autoreconf -vis

  3. ./configure --with-drivers=pn532_uart --enable-serial-autoprobe

  4. make clean

  5. make

  6. make install

  7. ldconfig

  8.  

然后执行下 libnfc 里面的 nfc-list 试试看(要把卡放在设备上面哦。)技术分享

看上面,成功安装好了。

下面装mfoc-0.10.3.

先到googlecode下个源码吧,然后执行如下命令。

tar xzvf mfoc-0.10.3.tar.gz

  1. cd mfoc-0.10.3

  2. ./configure

  3. make

看看成功没,如下图:

技术分享

下面开始破解.执行命令

 

  1. ./mfoc -K -O test.file

  2.  

看见没,上面一部分的密码已经 FOUND了,因为卡里面有一些没用到的区域用了默认密码.
这个卡的一个默认密码是 ffffffffffff

(所以大家也可用 ./mfoc -k ffffffffffff -O test.file 这个命令,感兴趣的朋友可以google一下).

很多卡都有这个默认密码.

下面在用探针探索中,很快就有结果了.

技术分享

结果出来了

技术分享

技术分享

有了结果我们可以怎样?

有两种行径.第一,复制卡;第二,修改卡.


复制卡是最简单的。

因为一般的 M1卡都不检索第0扇区第0块的数据.所以复制可行.

 

如果你有一张10元的水卡,校园卡,工卡,或者门禁卡其他七七八八的卡(反正国内就那样都基本是1K的M1卡).

你复制到另一张卡里面可以,你自己把数据导出来(有密码不就可以导出了吗...).

用完10块,再把数据写进卡里面就可以了...

当然这种是最没有技术含量的...我们是要数据分析的.

所以我们来到了第二种方式:数据分析,修改数据.
如果你们玩过单击游戏,用过修改器,作弊器,你们就会知道,我们分析数据大概的原理,就是看看哪里变了,刷刷卡,看看哪里变了.就大概可以了.

只能说大概,变的数据不一定是我们的有用数据啊,因为做卡的厂家哪会这么笨啊,肯定会加点冗余数据来校验的啊.

当然一般这些校验的数据都是通过有用的数据的加、与、或、非、异或形成的,CRC貌似比较少.

然后有些是固定冗余,不用理.

对于上面那个图.我发现了数据段,那个有密码的那个扇区的控制块我就不说了。

那个控制块的4个字节说明了整个扇区有keyA控制.

要理解更多东西,大家还是要懂M1的原理的啊.可以看下M1的文档哈.

上面那个图的红色画圈圈的区域是数据段
我们可以通过修改数据段改变卡的金额值.

楼主确实是成功了....从10几块数据变成了99块.

当然,一切都是测试,不要干坏事哈.(楼主用的什么卡大家就不要猜了.)

下面是数据的导入:
命令是

nfc-mfclassic w a test.file test.file

注意,前面那个 test.file 是代表你的含有密钥的文件,可以认为是 mfoc 导出来的文件.

后面那个test.file 是你要写入的文件.

两个文件是一样的,不过代表的意义不同.


下面是导入成功的图片.(get20是我修改后的导出来的文件,相当于text.file修改后的文件)

技术分享

 

破解到这里结束吧.
下面给个安装mfcuk的方法吧.

tar xzvf mfcuk

  1. cd mfcuk

  2. autoreconf -is

  3. ./configure

  4. make

ps:make前修改src/Makefile,将LIBNFC_LIBS的值复制到LIBS后面

忘了提醒大家,那个googlecode因为是开源的,所以很多 mfoc 和 mfcuk 代码都不完全正确。

我记得最新版的mfoc和mfcuk(建立在libnfc 1.7 平台的)好像是在某个c文件里面漏了个&的,就是指针出错了,导致编译不成功.

RFID之linux下利用PN532对M1卡(饭卡,