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
-
cd libnfc-1.6.0-rc1/
-
autoreconf -vis
-
./configure --with-drivers=pn532_uart --enable-serial-autoprobe
-
make clean
-
make
-
make install
-
ldconfig
-
然后执行下 libnfc 里面的 nfc-list 试试看(要把卡放在设备上面哦。)
看上面,成功安装好了。
下面装mfoc-0.10.3.
先到googlecode下个源码吧,然后执行如下命令。
tar xzvf mfoc-0.10.3.tar.gz
-
cd mfoc-0.10.3
-
./configure
-
make
看看成功没,如下图:
下面开始破解.执行命令
-
./mfoc -K -O test.file
-
看见没,上面一部分的密码已经 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
-
cd mfcuk
-
autoreconf -is
-
./configure
-
make
ps:make前修改src/Makefile,将LIBNFC_LIBS的值复制到LIBS后面
忘了提醒大家,那个googlecode因为是开源的,所以很多 mfoc 和 mfcuk 代码都不完全正确。
我记得最新版的mfoc和mfcuk(建立在libnfc 1.7 平台的)好像是在某个c文件里面漏了个&的,就是指针出错了,导致编译不成功.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。