zoukankan      html  css  js  c++  java
  • 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

    然后执行下 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

    看见没,上面一部分的密码已经 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文件里面漏了个&的,就是指针出错了,导致编译不成功.

  • 相关阅读:
    Java 简单算法--打印乘法口诀(只使用一次循环)
    Java简单算法--求100以内素数
    ubuntu 16.04 chrome flash player 过期
    java 网络API访问 web 站点
    java scoket (UDP通信模型)简易聊天室
    leetcode1105 Filling Bookcase Shelves
    leetcode1140 Stone Game II
    leetcode1186 Maximum Subarray Sum with One Deletion
    leetcode31 Next Permutation
    leetcode834 Sum of Distances in Tree
  • 原文地址:https://www.cnblogs.com/blackhat520/p/4187505.html
Copyright © 2011-2022 走看看