RF卡,主要有三种频率的射频,125kHz左右的低频,13.56MHZ的第二代射频标准协议,以及最新的900MHz的新标准。现在的门禁卡,银行卡,身份证大多是13.56MHz的ISO1443A/ISO1443B协议。而最新的900MHz附近频率的RFID卡我们在超市常常见到,超市用来防偷的ID卡就是这种新标准,新标准读取数据距离远,一般都在4米以上。
转自:http://ams.eefocus.com/module/forum/forum.php?mod=viewthread&tid=665

网上看了很多RFID破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内radiowar也同样没有看到过特别介绍原理性的文章。
建议大家还是多看看外文原版的资料说明,会理解的更透彻些,才能更快的加入到RFID安全研究及测试中。 
        这篇文章就当是我自以为是的普及性介绍,我想应该还是会给很多人解惑。
        首先,先说说目前RFID破解涉及到的几种方法,我尽量以最直白的语言描述。
        1、最简单ID卡破解
        常见破解办法:ID卡复制,ID卡除了复制也没有其他研究的了,毕竟太简单了。
        基本原理介绍:
        ID卡属于大家常说的低频卡,一般大部分情况下作为门禁卡或者大部分大学里使用的饭卡,一般为厚一些的卡,是只读的,卡里面只保存有一串唯一的数字序号ID,可以把这串数字理解为你的身份证号,刷卡的时候,读卡器只能读到ID号,然后通过跟后台数据库进行匹配,如果是门禁卡,那么数据库里面就是存在这样的ID号,如果匹配上门就开了,匹配不上门就开不了。
        如果是学校的饭卡,刷卡的时候,实际上操作的是你对应ID号相关的数据库中的数据。ID卡本身不存在任何其他数据,所以,学校使用的ID卡饭卡,只能复制卡,刷别人的钱(数据库中的钱),再没有其他办法。
        破解方法:通过ID卡读卡器,读取卡内的ID号,然后把这串ID号写入到ID卡空卡中即可,各类工具特别多,需要一个ID卡读卡器。最简单的淘宝有卖的工具,两节7号电池,按读卡按钮读要复制的卡的ID,然后再按写卡按钮,把读到的ID号写入到空白卡中,即完成了卡复制工作,优点就是方便,缺点就是我们看不到整个过程,对我们安全研究来说作用不大。 
        2、射频IC卡破解
        写在前面的技术铺垫:
        射频IC卡种类繁多,标准也繁多,这些不在介绍范围内,但是以下攻击介绍的原理类似,下面不特别说明就是指的M1 S50卡,这也是目前广泛使用的,并且大家做测试时最常见的IC卡。
        常见的破解方法:

1)跟ID卡一样,复制IC卡的UID号码写入到新的空白IC卡中。
2)破解IC卡的密码,从而改写IC卡中的数据。
3)破解IC卡的密码之后,把所有数据导出再写入到一个新的空白IC卡中,也就是 IC卡全卡复制(NFC手机及PM3等设备也支持把自己模拟成一个IC卡,实际上也属于卡复制一类)。

IC 卡 (S50) 分为16个扇区(0-15),每个扇区又分为4个区域块(0-63), 每个扇区都有独立的一对密码keyA和keyB(先记着独立两个字,后面要思考问题)负责控制对每个扇区数据的读写操作,keyA和keyB分布在每个扇区的第四块中,第0扇区的第一个数据块,存储着IC卡的UID号(想成身份证号),其他扇区可以存储其他的数据,如钱等数据。
        一般IC卡的UID是唯一的也是写死的不能更改,其他块的数据是可以更改的,所以也就有了普通IC空白卡以及UID可写空白卡(可以认为是不遵守规范的商家制作的)。
        现在我们开始想象破解的几种环境:
1)读卡器把IC卡当成ID卡一样只识别UID正确即可,不管IC卡内其他数据,这时候,只需要把卡的UID读出来,并使用一个UID可写的空白卡,把UID写入即可。
2)读卡器首先识别UID是否正确,然后再识别其他扇区的数据,通过keyA或者keyB对数据进行读写操作。这样首先UID得正确,其次,keyA或者keyB得正确(后面为了说的方便,我们就不说keyA或者keyB,直接说IC卡密码)。
这样如果知道了IC卡密码,我们也不需要复制新卡,那么就可以更改IC卡中的数据,比如更改饭卡中的钱数。如果我们想复制一张一模一样的卡,那么就把原卡的所有扇区的数据全面导出来,再写入新的UID可写卡中即可。
3)读卡器不识别UID,只管对扇区的密码进行验证,如果验证成功则允许对卡内数据操作等。(如某“XX快捷酒店”的门卡,就不管UID,只要扇区密码正确即可),那我们可以通过扇区密码更改门卡中的数据,如房号,住宿的时间等,也可以通过一个普通的IC卡(uid不能更改)复制一张门卡(跟原卡UID不同),也可以通过一个UID可写的卡,复制一张跟原卡完全相同的卡(跟原卡UID也相同)。

基本上也就是以上几种环境,改写UID、通过扇区密码改写扇区数据、通过把原卡数据导出重新导入到新的IC卡中复制一张卡。
        IC卡的UID是不通过密码控制的,可以直接通过读卡器获得,后面讲IC卡的通信过程会说明。那么我们做IC卡破解时,主要的问题就是破解IC卡每个扇区的控制密码,如果密码破解了,那要怎么操作都随便了。 
        IC卡密码破解的几种方法:
        1)  使用默认的密码攻击
        很多应用IC卡都没有更改默认密码,所以导致可以直接使用默认密码来尝试接入IC卡,常见的默认密码有:
ffffffffffff
000000000000
a0a1a2a3a4a5
b0b1b2b3b4b5
aabbccddeeff
4d3a99c351dd
1a982c7e459a
d3f7d3f7d3f7
714c5c886e97
587ee5f9350f
a0478cc39091
533cb6c723f6
8fd0a4f256e9
FFzzzzzzzzzz
A0zzzzzzzzzz
2)  nested authentication 攻击(大家常说的验证漏洞攻击)
        前面讲到每个扇区都有独立的密码,一些情况下,比如某饭卡,扇区3中存储着钱等数据,扇区3的更改了默认密码,扇区5中也存储着一些数据,扇区5也更改了密码,其他扇区没有更改默认密码。我们要操作扇区3跟5,不知道密码怎么办?使用nested authentication 攻击,这种攻击方式是在已知了16个扇区中任意一个扇区的密码之后,采用的攻击方式,可以获得其他扇区的密码。我们前面都提到了,16个扇区的密码都是独立的,那么怎么能通过某个扇区的密码获得其他扇区的密码呢?如果可以,那说明扇区就不是独立的呀,有人会说,由于M1卡的加密算法被破解了,我只能说那是还没有理解,具体算法不讲,只说明一下,算法只是使得猜解密码的时间变短,使得猜解密码成为可能。
        这是什么样的原理呢?首先先了解,这是一个对等加密算法,也就是读卡器跟tag中都保存着同样的密码,也都是用同样的算法加密,然后看rfid的验证过程:开始交互的时候,tag就已经把uid给reader说了,主要牵扯到防冲撞机制,之后才开始验证。
第一次验证时,读卡器首先验证0扇区的密码,tag给读卡器发送一个随机数nt(明文),然后读卡器通过跟密码相关的加密算法加密nt,同时自己产生一个随机数nr,(密文)发送给tag,tag用自己的密码解密之后,如果解密出来的nt就是自己之前发送的nt,则认为正确,然后通过自己的密码相关的算法加密读卡器的随机数nr(密文)发送给读卡器,读卡器解密之后,如果跟自己之前发送的随机数nr相同,则认为验证通过,之后所有的数据都通过此算法加密传输。
        首先记住这里面只有第一次的nt是明文,之后都是密文,而且nt是tag发送的,也就是验证过程中,tag是主动先发随机数的。我们破解的时候,读卡器中肯定没有密码(如果有就不用破解了),那么tag发送一个nt给读卡器之后,读卡器用错误的密码加密之后发送给tag,tag肯定解密错误,然后验证中断,这个过程中,我们只看到tag发送的明文随机数,tag根本没有把自己保存的密码相关的信息发送出来,那怎么破解呢?
        所以,要已知一个扇区的密码,第一次验证的时候,使用这个扇区验证成功之后,后面所有的数据交互都是密文,读其他扇区数据的时候,也需要验证,也是tag首先发送随机数nt,这个nt是个加密的数据,我们前面也说过每个扇区的密码是独立的,那么加密实际上就是通过tag这个扇区的密码相关的算法加密的nt,这个数据中就包含了这个扇区的密码信息,所以我们才能够通过算法漏洞继续分析出扇区的密码是什么。
        这也是为什么nested authentication攻击必须要知道某一个扇区的密码,然后才能破解其他扇区的密码。
        3)  darkside攻击
        假设某个IC卡的所有扇区都不存在默认密码怎么办?暴力破解根本不可能,那这时候就是算法的问题导致的darkside攻击,我们照样不说具体算法什么漏洞之类,同样,我们考虑首先要把tag中的key相关的数据骗出来,也就是让tag发送出来一段加密的数据,我们通过这段加密的数据才能把key破解出来,如果tag不发送加密的数据给我们,那没法破解了。
        前面我们也说了,第一次验证的时候tag会发送明文的随机数给读卡器,然后验证读卡器发送加密数据给tag,tag验证失败就停止,不会发送任何数据了,这样看,根本就没有办法破解密码。
        实际上经过研究人员大量的测试之后,发现算法还存在这样一个漏洞,当读卡器发送的加密数据中的某8bit全部正确的时候tag会给读卡器发送一个加密的4bit的数据回复NACK,其他任何情况下tag都会直接停止交互。
        那么这个4bit的加密的NACK就相当于把tag中的key带出来了,然后再结合算法的漏洞破解出key,如果一个扇区的key破解出来,就可以再使用nested authentication 攻击破解其他扇区密码。
        4)  正常验证过程获得key
        1-3都是通过一般的读卡器,把tag中的密码破解出来,破解的原理中,不管密码破解算法的漏洞,实际上都是要让tag中发送出来一段密文。
        那如果读卡器本身就保存有密码,卡也是授权的卡,也就是说卡和读卡器都是正确授权的,那么他们之间的加密数据交换就可以直接使用PM3等监控下来,然后通过“XOR效验与算Key”程序算出密码来。
        这种情况下一般都是内部人员做案,或者把读卡器中的SAM偷出来,SAM实际上就是保存读卡器中密码的一个模块,然后通过另外的读卡器插入SAM,用正常的授权的卡刷卡,然后监控交换数据,从而算出密码。
        5)  另一个方面
        前面4类方法基本上把目前的rfid卡破解讲清楚了,文字太多,所以也就没有截图,还有一个地方大家不知道考虑了么?
        我们提到的都是卡和读卡器之间的数据交换,这是加密的数据,但是有没有想过读卡器跟电脑相连这块,电脑中肯定没有加密芯片,所以这块肯定是明文传输,在某种环境中,比如通过电脑的控制程序导入密码(假设是二进制等不能直接观看的密码文件)到读卡器的时候,我们通过监控USB口(串口)数据通信,是不是就能明文看到密码呢?

软件装载密码到读卡器

使用USB监控抓到的明文数据,包含了导入到读卡器中的密码明文。 
        常用工具说明:
1)mfoc  mfocgui 以及目前网络上,淘宝上充斥的各类破解工具都是基于nested authentication攻击原理,就是内置了一些默认密码,首先使用默认密码对每个扇区进行测试,如果某个扇区存在默认密码,然后就是用nested authentication攻击获得其他扇区的密码。
2)PM3的darkside攻击,Mfcuk等为darkside攻击工具,一个扇区密码都不知道的情况下破解用的,由于破解算法的原理本身就不是100%成功的,所以如果长时间破解不出来,就停了重新换个nt,重新选个时间破解,跟运气也有些关系。
不要别人几个小时,甚至几十分钟就破解成功了,你几天都没有破解出来,还一直傻傻的等,不如暂停换个nt,过一会再试。
3)Libnfc工具,目前用的比较多的是radiowar的nfcgui,radiowar网站上也说了,就是给nfc-list  nfc-mfsetuid  nfc-mfclassic  这三个工具写了个gui界面,你也可以使用命令行模式,或者你也可以自己写个gui界面调用这三个程序即可,这些都是操作卡或者读卡数据的工具,国内不同的IC卡读卡器都附带有一些读写卡程序,我用的一个比这个要方便的多。

nfclib相关开源项目:
https://github.com/nfc-tools/libnfc

nfclib官网:

http://nfc-tools.org
13.56MHz的RFID模块与树莓派结合:

http://www.geek-workshop.com/thread-10042-1-1.html

RFID破解三两事(转)相关推荐

  1. RFID破解三两事(原作者:YunFree)

    网上看了很多RFID破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内radio ...

  2. 浅谈AutoCAD下载安装的那些三两事!

    很多人在一开始学习CAD的软件时,最关心的问题就是AutoCAD下载安装的这些事.比如电脑选择问题.显卡的问题等等.今天就来以AutoCAD 2022版本为例,聊一聊下载安装的这些事. 首先是硬件方面 ...

  3. 分享OMS系统实战的三两事

    OMS系统实战 1. 前言 2. 架构设计 2.1 业务架构 2.2 系统架构 3. 功能演进 3.1 单据业务演进 3.2 库存管理演进 4. 一般功能设计 4.1 关联数据映射 4.2 状态数据隔 ...

  4. Win32 API 三两事

    学习下一些底层的API调用,所有内容来自网络 1.APIENTRY,WINAPI,CALLBACK等是什么东西? 通常在函数名前面(返回值后面)会有APIENTRY或WINAPI或CALLBACK修饰 ...

  5. nodeJS与npx之间的三两事

    Node.js 是一个基于V8 JavaScript 引擎却又运行在浏览器之外的.开源的.跨平台的 JavaScript 运行时环境.前端开发的同学都很熟悉,在安装了NodeJS之后,除了node命令 ...

  6. 深信服上网行为管理(AC)部署三两事

    AC又被我们成为上网行为管理,如下图 上图是两种不同大小与型号的AC,分别是1U和2U的两款不同的AC,不同的上网行为管理具备的扩展性以及功能上也是略有区别的. 从上面的两台设备上,我们可以看出,1U ...

  7. Google Protocol Buffers三两事【知识笔记】

    目录 一.亮点简介 二.使用指南1.定义.proto文件2.编译.proto文件3.读写数据 三.本文总结 四.参考资料 一.亮点简介 Protocol Buffers一种结构化数据存储格式.特点:快 ...

  8. Linux使用三两事

    修改文件名:mv xx xxx 重构,抽象,不断优化自己的代码 开放端口 firewall-cmd --zone=public --permanent --add-port=8080/tcp 以808 ...

  9. 行高和高度的三两事:行高 > 高度 文字靠下;行高 < 高度 文字靠上

    先明白行高的原理,行高包含内容区域的高度.上半行间距和下班行间距.如果line-heigt:300px; font-size:20px;算出间距280px,上下半行间距都为140px.chrome默认 ...

最新文章

  1. C++中const char*, string 与char*的转化
  2. 【PC工具】复制翻译神器!有了这个开源免费的翻译软件,阅读英文文档变得再也不困难了...
  3. r 多元有序logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...
  4. Cambridge career service
  5. 【Qt5.8】Qt5.8中串口信息类QSerialPortInfo
  6. 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集...
  7. Python学习笔记:序列之字符串
  8. mysql存储过程if多命令_MySQL存储过程if-存储过程中的if-db2存储过程if多条件
  9. Debug gradle task
  10. pla3d打印材料密度_FDM 3D打印机最常用的耗材PLA的密度 创想三维
  11. GenericObjectPoolConfig属性
  12. 树莓派-10-安装jupyter并控制SG90舵机
  13. nginx过滤HttpHeader的 中划线
  14. Apple芯片Mac安装ARM版Win10完美教程(结尾附视频)
  15. openlayers4+中台风路径播放优化
  16. QStringList去除重复项
  17. C++中的全局变量声明和定义
  18. [bowtie2, libtbb.so.2]error while loading shared libraries: libtbb.so.2: cannot open shared object
  19. POI 不支持函数XIRR
  20. java 限制发送频率_java发送短信如何限制发送频率例子代码

热门文章

  1. 借助android uiautomator+情迁工具箱自动朗读实现语音红包自动发送语音,自动领取...
  2. 以太坊RLP编码详解
  3. 王者荣耀:达摩长头发了?星座皮肤再添大将,后羿CP皮肤来袭!
  4. 从中台模式的式微,到ChatGPT的兴起
  5. c++面试题(数据结构篇)
  6. 一篇看懂QVector
  7. 第8课:彻底实战详解使用IDE开发Spark程序--集群模式运行
  8. Unity Physics2D 2d物理引擎游戏 笔记
  9. 没有version.sh,如何查看tomcat版本
  10. Linux mkfs命令详解