加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]科大的神人啊……校园一卡通破解研究……

(2013-09-16 14:55:54)
标签:

转载

分类: 电子基础与嵌入式

Let’s Crack It!

 

为响应群众号召,支持“3·15罢餐”行动,本人正在起草另一个行动计划,行动代号“Let’s Crack It!”,主要内容包括:

 

1.     What’s the purpose of our action?

为响应群众号召,支持“3·15罢餐”行动,向相关部门施压,要求降低伙食价格,提高饭菜质量,增大补助力度!

 

2.     What is RFID?

RFID (Radio Frequency Identification)是一种近年来兴起的、广泛应用于人流和物流管理方面的新技术。该技术集编码、载体、非接触自动识别与通信等多种技术于一体,通过射频信号自动识别高速运动对象.并能同时识别多个标签,获取相关数据。主要应用目标是实现信息系统的自动化信息采集,保证被识别对象的信息化管理。

RFID目前有很多频段和标准,最为常见的是集中在13.56MHz频段和900MHz频段的无源射频识别标签应用。短距离识别方面通常采用13.56MHzHF频段,而该频段又包含若干标准,比如较早的香港八达通卡采用的是Sony Felica标准,较新的方案多采用ISO/IEC14443TypeAType B的智能卡标准,比如中国第二代身份证采用了Type B标准,国内许多城市的公交地铁卡也多采用ISO/IEC14443标准。此外,还有比14443距离更远的IS015693标准也是在13.56MHz频段。未来几年该短距离识别技术有望在政府身份识别、小额支付、银行信用卡等领域迎来更多的发展机会。900MHzUHF频段的RFID遵循ISO18006标准,多用于3m~10m的远距离识别,比如车辆管理、铁路运输、仓储物流、门禁、产品防伪等应用领域。随着ISO18006EPC标准的完善,以及标签成本的不断降低,UHF频段的应用也将越来越广泛,有业内人士甚至提出UHF频段有望替代HF频段上的许多应用。

 

3.     How does it work?

RFID技术的基本工作原理并不复杂:标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(Passive Tag,无源标签或被动标签),或者由标签主动发送某一频率的信号(Active Tag,有源标签或主动标签),解读器读取信息并解码后,送至中央信息系统进行有关数据处理。

一套完整的RFID系统, 是由读写器(Reader)与电子标签(TAG)也就是所谓的应答器(Transponder)及应用软件系统三个部份组成, 其工作原理是Reader发射一特定频率的无线电波能量给Transponder,用以驱动Transponder电路将内部的数据送出,此时 Reader便依序接收解读数据,送给应用程序做相应的处理。

RFID 卡片读写器及电子标签之间的通讯及能量感应方式来看大致上可以分成:感应耦合(Inductive Coupling)及后向散射耦合(Backscatter Coupling)两种。一般低频的RFID大都采用第一种式,而较高频大多采用第二种方式。

[转载]科大的神人啊……校园一卡通破解研究……

 

4.     How des our smart card system work?

以下内容参考学校一卡通网页的FAQ

我校的一卡通卡片使用的是IC卡,卡上有存储芯片,上面存储的有客户基本信息,例如姓名、学号、卡金额、卡密码等等。然后一卡通服务器数据库里也存有客户的信息,但是比卡上存储的信息要大的多。一般情况下,卡上信息和数据库里的信息是一样的,我们称之为卡库一致。但在某些特殊情况下卡库会不平,详见下面卡库不平。

为什么会出现卡里面的余额和系统里面的库余额不平的现象(卡库不平)? 上面讲了我们使用的一卡通卡片是IC卡,卡上存储的有卡金额(我们称之为卡余额),我们一卡通数据库里面也存有用户的金额(我们称之为库余额),一卡通用户每次刷卡消费,消费pos机会立即扣除用户卡金额,然后产生一笔消费流水在pos里后实时上传,等流水上传至数据库里时,数据库会自动把用户的库余额减去上传消费流水的金额,这时卡余额=库余额,我们称之为卡库一致。但是在某些情况下,流水未能实时上传至数据库服务器,就会造成卡片上的金额(卡余额)被扣,而数据库未收到被扣的流水信息,此时卡余额≠库余额,我们称之为卡库不平【作者注:可推断卡余额总是≤库余额】。正常的短暂离线消费。例如校园内的车载pos刷卡等。

我们知道卡用户每次消费时,pos机会立即扣掉卡余额,因此卡金额总是第一时间反映出用户的消费,尽管这笔流水有可能未及时传至数据库服务器而查询不到该次消费记录。因此,对于卡操作人员来说,退卡换卡等操作时必须以卡余额为准。

为什么web网站或多媒体触摸屏上查到的消费记录仅供参考而不作为最终依据?我们知道,用户每次消费时,pos机会立即扣掉卡余额,但消费流水有可能由于设备网络不通或设备故障等原因未能及时上传或根本采集不到流水,缺失流水意味着该笔消费记录不可查询。因此,web网站或多媒体触摸屏上查到的消费记录仅是一个参考,是为方便卡用户对自己的消费情况有大致的了解而设置的,不作为最终依据。

卡片能自己设置消费限额吗?不行。因为消费限额是在一卡通后台统一设置后下发到消费pos机上,不能针对每个人单独设置。如果每个用户都去设置自己的消费限额,每次刷卡消费前都要去数据库查询自己的消费限额后再进行扣款,目前一卡通用户将近两万,以后将逐渐增多,这么多用户每次消费都要查询数据库,一方面会给数据库带来不小的压力,另外一方面还要影响刷卡的响应时间,特别是离线脱机消费时根本无法查询到限额。因此,消费限额只能由系统统一设置。 

 

5.     More details about our smart card system.

先说学校宿舍里的计费器吧,其实也是一个卡片读写器,同时加上了自动控制功能。例如开水、淋浴设备,在刷卡成功后计费器打开电磁水阀,洗衣机的开关控制则是一个继电器。相信很多人都知道现在开水房的计费器基本上都是1分钱,因为水流量传感器被和谐了,因此一开始扣1分钱,之后一直没有检测到水流量。但是淋浴计费器就不一样了,只要阀门打开,不论有没有水,或者出冷水都是要扣费的。

计费器的接线端详情如下:

红色——DC12V计费器电源正极,

黑色——电源GND

紫色——DC12V负载电源和电磁阀正极,

棕色——负载电源GND

黄色——通信458+

绿色——通信485-

白色——电磁阀负极。

可见,使用了RS-485差分通信电缆。刷卡成功后继电器闭合,电磁阀负极与负载电源GND与电子阀负极接通(即棕色和白色接通),电子阀打开。讲到这一步,大家应该知道怎么做了吧?直接把白色线接到棕色线就行了!

虽然上面的方法可以和谐掉寝室里的部分设备,但是仍然没有从根本上破解设备,我们的目的是要搞定读写器,自由修改卡片!那么请继续往下读以获取更多技术细节。

学校的一卡通读写器使用复旦的FM1702NL读写芯片,该芯片商自称与NXPRC500/RC530读写芯片兼容,据作者及朋友判断极可能实乃NXP的抄片【请见附件FM17XX readerICs_ds_eng.pdfRC500.pdfRC531.pdf】。

从该款芯片就可以得知:学校使用的是MIFARE13.56MHz的高频RFID卡,符合ISO14443-A协议规范,内置EEPROM存储器,并采用M1加密算法,也即Cypto-1。虽然该加密算法一直是NXP对外保密的,但是该算法却早已在2008年被德国学者Henryk Plotz和弗吉尼亚大学的在读博士Karsten Nohl两人合力破解。轰动一时!【请见附件Mifare.Cryptanalysis.pdfPickpocketing.Mifare.pdf2008-esorics.pdf

另外,读写器的控制芯片为SM5964【请见附件SM5964.pdf】,此芯片为8052单片机的一个变种,作者一开始看到起引脚图时立刻就联想到了89S52单片机,其DIP-40封装跟89S52是完全兼容的,当时是一阵欣喜若狂啊!

[转载]科大的神人啊……校园一卡通破解研究……  [转载]科大的神人啊……校园一卡通破解研究……

 

6.     How are we going to crack it?

好了,前面做了那么多的铺垫工作,下面终于要进入正题了:究竟要怎么破解读写器?

有的同学斩钉截铁地说作者是异想天开,NAÏVENAÏVE!人家可是48-BIT的密钥啊!你还是先别急,等我进一步阐述。当年两个老外破解CRYPTO-1实际上是使用一个电路伪装成RFID卡片跟读写器通信,通过不断分析读写芯片跟“卡片”之间的验证过程中的通信数据逐步获取密钥。那么我们是不是也要学他们想办法弄到密钥呢?

考虑到单片机是89S52的变种,一开始最自然的想法就是利用ISP编程器读取片内的程序,通过软件反汇编,就能够明白其控制方式、和一卡通系统的485通信协议、密钥等各种信息,掌握了这些信息可以说就解决了所有问题!但是,继续往下研读单片机的Datasheet悲剧地发现:该芯片只能写入程序,不能读出程序【见下表】,不能读出程序就什么都不可能了……虽然也有专门的芯片解密公司,但是费用可不低啊……因此这条路走不通。

[转载]科大的神人啊……校园一卡通破解研究……

换条路,虽然芯片的程序读不了,但是读写器的通信电缆是可以监视的,也许可以通过监视通信数据流,分析数据结构也是可能伪装成主机对读写器进行控制来读写卡片的。此方法我没有具体验证过,但也存在一种可能,那就是只在主机发出控制命令时读写器才会与主机进行通信,否则读写器是不会主动发起通信的,这就给数据监视带来了麻烦。

还有没有其他方法呢?有!有读写芯片FM1702NL在手,大不了自己另外整个单片机来控制它来读写RFID卡片!程序也可以自己写嘛!以前弄过ISO15693协议的卡片,用的是NXPRC400,虽然协议不同,但是一个公司的芯片,相似性很大。

那好,先不急,研究一下MIFARE卡片的Crypto-1加密算法再说。根据RC500Datasheet描述,Crypto-1的密钥操作示意图如下:

[转载]科大的神人啊……校园一卡通破解研究……

[转载]科大的神人啊……校园一卡通破解研究……

可见,密钥可能是存储在读写芯片EEPROM里的,那么通过单片机是不是直接就能够读取芯片里的密钥了呢?!又一次兴奋啊!

[转载]科大的神人啊……校园一卡通破解研究……

[转载]科大的神人啊……校园一卡通破解研究……

[转载]科大的神人啊……校园一卡通破解研究……

[转载]科大的神人啊……校园一卡通破解研究……

密钥共6字节,48bits,格式如下描述:

[转载]科大的神人啊……校园一卡通破解研究……

又悲剧了,突然发现EEPROM存储密钥的那一段是只写的,也就是说只能写入密钥,不能读取密钥,还是不能获取密钥……

[转载]科大的神人啊……校园一卡通破解研究……

有同学不耐烦了,单片机程序也读不了,读写芯片的密钥存储区也读不了,你还有什么办法能够破解它。还是不要灰心,由于设备是支持离线刷卡的,因此可以推断,密钥一定是存储在单片机或者读写芯片里的,从这两者下手总能搞到密钥!

等等,请你仔细想想,为什么我们费了那么大的功夫都在想方设法获取密钥呢?密钥真的是必须知道的吗?不是的!当年两个老外破解CRYPTO-1实际上是使用一个电路伪装成RFID卡片跟读写器通信,通过不断分析读写芯片跟“卡片”之间的验证过程中的通信数据逐步获取密钥。

既然我们身边四处都有合法的持有密钥的读写器,为何不直接利用呢?!不论密钥具体是什么,只要能通过现成的随处可取的读写器对卡片进行读写操作就行了。芯片和卡片之间的通信是通过CRYPTO-1算法加密的,我们没有密钥就没法辨别,但是也完全没有必要去辨别!想到了吗?单片机跟读写芯片FM1702NL之间的通信是明文的!单片机要向读写芯片发送命令和数据来对卡片进行读写,而这些命令都是已知的(FM1702NL的指令集),控制流程也是已知的!

先看一下单片机跟读写芯片的通信接口:

[转载]科大的神人啊……校园一卡通破解研究……

学过《微机接口》的或者熟悉单片机的同学应该都明白了,这种接口方式实际上是将FM1702NL芯片映射成为单片机的片外存储器,片外地址总线和数据总线是复用的【请参考单片机Datasheet】。呵呵,最多只要用12通道的逻辑分析仪就可以跟踪这些通信数据了!

我们再回顾一下密钥验证过程:

[转载]科大的神人啊……校园一卡通破解研究……

单片机需要首先发送LoadKeyE2或者LoadKey命令,紧接着就是发送Authen1并查询错误标志,然后再是发送Authen2命令。如果是LoadKeyE2命令,也就是让芯片从E2PROM的密钥区加载密钥,那么后面一定要给出密钥的其实地址;如果是LoadKey命令,那么后面一定要直接由单片机给出密钥。思路突然就明朗起来了:用逻辑分析仪跟踪单片机和读写芯片只见的通信数据,根据控制流程和控制命令来识别密钥或者密钥所在E2PROM的地址!当然,如果我们能够确定密钥是存在读写芯片的E2PROM里的,密钥段共384字节,每个密钥12字节,那么使用穷举法最多经过384-12=372次尝试就能成功找到密钥的开始地址!知道了密钥地址也就相当于获取了密钥,虽然那我们不知道密钥的实际值,但我们已经能够利用现有的合法读写设备进行“不合法”的卡片读写操作了!哈哈哈~~狂笑啊!!

解决了卡片读写问题,下面的事情就容易了:读取卡片数据进行比对分析,搞清楚数据含义就可以根据需要修改卡片了!这里就不赘述了,给大家举个例子吧【感谢河畔ID: lcxhlzds给出这么具体的示例!】:

[转载]科大的神人啊……校园一卡通破解研究……

好了,前面终于说清楚怎么解决卡片的读写问题了。但是新的问题又冒出来了:前面说过,卡余额总是≤库余额的,如果直接修改卡余额,日后数据库里就会发现你的卡余额为何无端端变得比库余额还多了?然后估计你就悲剧了……我X,费了九牛二虎之力终于能自己修改卡片了,还是怕被发现……

不怕!我说了的,这篇文章旨在给相关部门施压,降低伙食价格、提高伙食质量,相信有关部门看到这篇文章也会召集相关人员分析我的论证是否正确。那么我不妨直说:我们可以利用早就挂失过的废旧卡片,这些卡片甚至是几年前就毕业的学生的,把这些卡片变成“有效卡片”继续使用,即便你根据卡片UID编号查询数据库,也不过发现那是张早就挂失作废的卡!当然再大胆地说,即便我们使用自己的已挂失的卡片,你们通过技术手段查到卡片UID对应到我,而我等还在学校,别以为你们这样就能因此认定是我们在非法使用卡片,我大可以说:“我等卡片丢了,挂失了,天知道是被哪个捡到了拿去干坏事了呢?!”

 

 

 

Call of Duty

目前有几个同学已经发邮件联系我了,不过还在继续召集人马中……

同志们站出来吧,干死那群坑爹的!该行动需要大家分工合作,还需要一定的仪器和少量资金支持,有识之士请发送邮件到 public.uestc@gmail.com进一步讨论。

 

重要仪器:12通道以上的逻辑分析仪

 

 

暂时写这么多吧,一晚上时间就这么浪费了……同志们积极讨论啊,哪怕是证明我的方案不可行也好,总之最终目的就是给相关部门施压!

 

 

 


2012-3-13

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有