一次蜿蜒曲折的RFID破解之路
前言
早一段时间看到一篇看雪论坛关于逻辑嗅探破解接触式IC卡口令的文章,激起鄙人对rfid的兴趣。遂准备拿学校的卡一展身手。
0×00 前期准备
经过初步了解,学校的rfid卡片分为两种。校园卡采用MIFARE Classic 1K,澡卡采用Atmel T5557。之前看过无数M卡的破解文章,于是决定跳过此卡(后通过proxmark3成功破解)转向更为小众更具挑战的T5557卡。
通过阅读T5557的文档,淘宝了如下工具:
- ·T5557读卡模块(加USB转TTL)
- ·T5557白卡
- ·USB 逻辑分析仪
- ·杜邦线若干
0×01 制作T5557卡读写器
本来准备淘宝一个现成的读卡器的,发现价格参差不齐。知网看了几篇T5557读写器设计,大概了解到读写器原理。
读写器 = 读卡模块 + usb转TTL(与电脑通讯模块)
0×02 T5557科普
特征:
- ·非接触方式的读/写数据传输
- ·从100 KHz到150KHz的无线电载波频率
- ·与e5550产品兼容并扩展的应用模式
- ·小容量, 其结构与国际标准 ISO/IEC11784/785相容
- ·在芯片上掩模有75pF的谐振电容
- ·包括32bit密码区在内的7x32bit的E2PROM存储空间
- ·单独开设有64 bit存储空间作为厂商可追溯的数据区
- ·-bit配置寄存器在E2PROM中可作如下设置:
- ·数据速率:RF/ 到RF/128或e5550的固定值(通常使用在RF/32或RF/)
- ·调制/编译码:FSK、PSK、曼彻斯特、双相、NRZ(典型为:曼彻斯特)
- ·其他的选项:密码模式、最大区块特性、按请求回答(AOR)模式(默认值:PASS=、MAXB=、AOR=);反向数据输出、直接访问模式、序列终结符、写保护(每一块完全锁位)、OTP功能等。
- ·存储体结构:存储体是330bit的E2PROM,安排在0和1页的10个块中,每个块(包含被同时规划的bit锁块位)有33 bit。第0页有8个存储块,其中的块0包含配置/控制数据,在正常读操作期间是不被传输的。块7可以被用户当作写保护密码使用,与最大区块的显示值配合,可设置某些块值或第7块密码值不可见,只有知道密码的合法用户才能访问卡片中的数据块。每块存储体的位首,即第0bit,是该块不可查看但可一次性改写的锁块控制位(即OTP特性。为安全起见,一应提供改写各块第0位的OTP功能)。第1页的块1和块2包含可追溯数据,并且被Atmel在制造测试期间进行其数据规划并且锁定。
还有些特征在此不再赘述,具体的在参考给出的链接文档中。
0×03 首战告捷
安装好USB转TTL的驱动,用卖家给的技术文档通过串口助手发送相关指令。后来懒得看指令直接问卖家要了个他写软件(存在卡片与读卡器匹配问题,建议在充分阅读T5557技术文档的情况下操作!)。
撒花O(∩_∩)O哈哈~
通过上图可以初步断定:
- .卡片存在密码,只能进行块读。
- .块二和块四前面2个字节为卡片金额,即为¥8.01。
然后拿张卖家送的白卡把数据一套,抱着试一试的心态拿去澡堂洗澡去了,居然能够使用。这一点我思考了好久,可能是白卡块0区设置的是不需要密码读写,然后澡卡机器采用的是密码写 70 bit (PWD=1),从而忽略了与密码匹配的过程。
0×04 再次深入!
其实到0×03已经达到目的了,但鄙人不是搞黑产的鄙人是Geek啊,本着Geek精神决定再次深入,试着破解相关数据关联。
冷静的分析了下,想出了三个方案:
- ·猜!脑洞大开的猜!
- ·通过充值软件,分析出数据联系。(希望不大)
- ·逻辑分析澡卡机器,得到数据关系。
0×05 脑洞大开的猜!
开始几天死了好多脑细胞,一直在想金额后面2个字节是干啥的。可能是校验码但一直想不到是什么校验。
后来浏览官网发现这样一句话:
- 数据传输过程中CRC校验
刷卡记录
- 1st 2nd
- 00024xxx 00024xxx 可能为学号
- 1111F16C 0810FB30 金额及校验码
- 卡的类型(用户卡、管理卡巴拉巴拉)
- 1111F16C 0810FB30 同上
- 00003D3O 00003D3O 校验数据
- 00003D3O 00003D3O 同上
块1-6通过CRC校验得到相同的校验码,所以 CRC(块二/快四) == CRC(块五/六)。
本来准备通过crc校验码逆向的,后来看看又是移位、异或什么的麻烦的要死,遂正向暴力破解简单粗暴(^__^) 嘻嘻…… 。
草草几行python代码
- import crcmod
- import string
- #create CRC16 calculator
- crc16 = crcmod.predefined.mkCrcFun('crc-16')
- #wait for user input
- hstr = '00 00 8D 7F'
- blah = ''.join(chr(int(c, 16)) for c in hstr.split())
- check = hex(crc16(blah))
- for i in range(0, 255 + 1):
- for j in range(0, 255+1):
- str_hex_i = hex(i)[2:].upper() #format string like 'EE'
- str_hex_j = hex(j)[2:].upper()
- data = '50 00 %s %s'%(str_hex_i, str_hex_j) #format string like '09 13 9F EE'
- blah = ''.join(chr(int(c, 16)) for c in data.split())
- data = hex(crc16(blah))
- if data == check:
- print str_hex_i, str_hex_j
- break
到此已得到金额以及后面2个字节校验码的关系了,但是还是不知道卡密是怎么组成的,到底是一卡一密还是多卡一密。还是本着Geek决定再次深入!!
0×06 Creak官网,拿到软件??
本来设想进官网拿到软件的,准备一展身手的。拿到shell之后发现啥都没有,一大堆客户资料貌似可以社工,算了也不喜欢弄那个遂放弃。邮箱系统可能存在蛛丝马迹,无奈才疏学浅。
此非本文的重点,故拿站过程跳过 。也不存在技术含量,惯用套路而已。
0×07 逻辑分析澡卡机器
是时候亮出下一个奇门遁甲了。
USB 逻辑分析仪
拿到澡卡机器后一番解剖,右下角的红圈的芯片就是我们要逻辑嗅探的对象。通过芯片的文档找到input、output和gnd的针脚。
连接好的效果图
安装好saleae软件后,参考T5557文档给出的数据编码方式以及命令格式
然后在浩如烟海的数据流中找到该序列(此过程需要极大的耐心,需充分了解数据调制方式,因篇幅简化了分析过程)
Protected write:
1p + Password 32 + L + Data 32 + Addr
- 1p :页面选择(10/11)
- Password :32位密码
- L :锁位, 是否锁定该块数据(0/1)
- Data:32位数据
- Addr:块地址位,例如块5(101)
通过保护写的格式再结合数据图得到密码为:92 10 92 40(hex)
0×08后记
破解基本上告一段落,但还是无法通过卡号直接推导出密码。哎!以后有空慢慢分析吧这个也急不来。
前后大约历时3周,说下经验总结吧。
- ·书本上的知识还是有用的!当时破解时计算机组成原理、数字逻辑基本上忘得一干二净,无奈又重读了一遍。要是还记得的话,估计进度可以提前几天。
- ·英语很重要啊!要不然文档都看不懂,中文翻译有时候很水。
- ·基础很重要,这一起都会变得游刃有余。
参考文档
一次蜿蜒曲折的RFID破解之路的更多相关文章
- Office2013版的破解之路
追着潮流,我还是更新了我的所有软件,2013版早就下载了,因为一直破解的问题没有装,这次终于找到必成功的办法. 1.准备工作: 下载office2013的官方版即可,官方版里不包含project和vi ...
- 创见WiFi SD卡破解之路
我最近搞了张Transcend WiFi SD,颇为得意.它可以让我在几秒钟内将单反(奶昔,相当便携)中拍摄的照片传到任何支持wifi的设备上.我很喜欢在旅途中拍摄和分享图片,所以对我而言,可以无线传 ...
- QTP 10 破解 之路
1.下载QTP 10 安装包 2.破解软件(mgn-mqt82.exe) (阿里云云主机里执行不了,一执行CPU就99%,也没有生成lservrc) 手动创建C:\Program Files (x8 ...
- Google POI下载工具破解之路
我是GIS初学者,爱好二次开发,像初恋一样.最近对编译感兴趣,每当成功获取一点信息,就有一种快感,感觉马上就要成功了……其实,还早! 01.初次反编译 今天在微创业工作室找到了Google POI下载 ...
- SWF代码分析与破解之路 (YueTai VIP视频信息获取工具) Socket续篇
引言 上一篇 <Socket与站点保密应用 (隐藏链接的视频下载)>大大咧咧地从 WEB 讲 Socket.再到 TCP/IP 等协议,又再讲到 Wireshark 怎样抓IP包分析.最还 ...
- Mac app 破解之路
6年之前一直做过一些内存挂,脚本挂.都是比较低级的技术. 这几年期间,断断续续利用业余时间学了一些汇编的知识,当时只是想着破解游戏. 所有的黑技术都是业余自学的,没有老师可以问,只能百度和自己领悟,比 ...
- mac App 破解之路六 studio 3t
不想无限使用,直接破解到正版: 输入邮箱 名字之后 还有licence信息之后,处理函数是: this.text.getText() 很明显是你输入的licence. 然后交给父类okPress处 ...
- Ios App破解之路二 JJ斗地主
前提条件: 越狱手机里, 安装了 <JJ斗地主> 使用砸壳工具clutch 下载地址: https://github.com/KJCracks/Clutch/releases dzq:~/ ...
- MAC App破解之路十 Particle Design
这个软件破解非常简单: 修改: [PaddleStatic Yz6nrtNwF4].直接返回1 效果:
随机推荐
- django 2
创建一个管理员用户 首先,我们需要创建一个用户可以登录到管理网站. 运行 下面的命令: $ python manage.py createsuperuser 输入你想要的用户名,按回车. Userna ...
- html 标签总结
<q>标签,短文本引用 例如“聪明秀出为之英,胆略过人为之雄.” <blockquote>标签,长文本引用 <blockquote>标签的解析是缩进样式. 没有HT ...
- jquery和js使用技巧
1. 如何得知图片已加载完毕 这也一个没有很好文档说明的问题(至少在我查找时没看到),但是在创建照片库.旋转灯笼效果等方面,它是相当常见的需求.而这在jQuery中很容易实现. 所有你要做的就是在IM ...
- 20150206读书笔记<深入理解计算机系统>
●第一章 C是系统级编程的首选.C++显示支持抽象,属于应用级程序设计语言. 简单例子: 一个典型系统的硬件组成: 存储器的层次结构: 注:存储器层次结构的设计思想是,该层存储器作为下一层存储器的高速 ...
- 如何处理PHP和MYSQL的并发以及优化
sql优化,数据缓存和页面静态化首先各种优化程序逻辑优化数据库优化硬件横向扩展数据hash.服务器提升性能.表hash.出钱找oraclec出解决方案页面静态化:Php页面静态化有两种,第一,php模 ...
- IO流--切割 合并文件
import java.io.*; import java.util.*; public class io { public static void main(String[] args)throws ...
- vs版本与.net framework 版本对应
vs2002 .net framework 1.0 vs2003 版本号:7.x .net framework 1.1 window server 2003 vs2005 版本号:8.x . ...
- easyui 中重复加载两次url
之前一直在使用easyui中,忽视了官网上的小细节,类似于datagrid.combobox 等组件在使用的时候,它的数据加载方式分为两种: 官网中: ①在html中,比如: <table id ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- Storm(4) - Distributed Remote Procedure Calls
Using DRPC to complete the required processing 1. Create a new branch of your source using the follo ...