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文件里面漏了个&的,就是指针出错了,导致编译不成功.

  • 相关阅读:
    Codeforces Round #647 (Div. 2) E Johnny and Grandmaster
    Codeforces1363E Tree Shuffling
    洛谷P6583 回首过去
    Codeforces 817D Imbalanced Array
    Codeforces 213E Two Permutations
    hdu6312 Game
    树算法笔记(三):Prim最小生成树
    基础数学(四):充分与必要条件
    树算法笔记(二):Kruskal最小生成树
    树算法笔记(一):并查集
  • 原文地址:https://www.cnblogs.com/blackhat520/p/4187505.html
Copyright © 2011-2022 走看看