飞利浦m1卡制作数据分析

RFID入门:Mifare1卡破解分析 | 邪恶十六进制
& RFID入门:Mifare1卡破解分析
文章的最开始,先来致敬RadioWar。一直手痒RFID这个领域,准备了一段时间,开始入门RFID。
先来普及一下基础知识:
RFID即为射频识别。NFC近场通信。很多人把NFC和RFID混为一谈,但实际上NFC可以理解为“以RFID技术为基础的一种产品”。
RFID技术中所衍生的产品大概有三大类:无源RFID产品、有源RFID产品、半有源RFID产品。根据RFID Tag的工作方式,有可分为被动,主动、半主动三种。最常见的就是被动式的了。我们目前接触的多的就是无源、被动式产品,其中最为广泛常见的就是MIFARE Classic 1K卡,简称M1卡、S50卡。M1卡有从0-15共16个扇区,每个扇区配备了从0-3共4个段,每个段可以保存16字节的内容。每个扇区的03段是用来保存KeyA,KeyB和控制位的,因为M1卡允许每个扇区有一对独立的密码保护,这样能够更加灵活的控制数据的操作,控制位就是这个扇区各种详细权限计算出来的结果。每张M1卡都有一个全球唯一的UID号,这个UID号保存在卡的00扇区的00段,也称为厂商段,其中前4个字节是卡的UID,第5个字节是卡UID的校验位,剩下的是厂商数据。并且这个段在出厂之前就会被设置了写入保护,只能读取不能修改,当然也有例外,有种叫UID卡的特殊卡,UID是没有设置保护的,其实就是厂家不按规范生产的卡。
更多的资料请百度、谷歌之,就目前来说我们简单了解下就够了,有了这些大体的了解,我们就开始今天尝试破解一张水卡(洗澡用,宿舍常见)试试。
工具:ACR122U-A9,UID可写白卡,待破水卡
平台&软件:Win7x64、XP:RadioWar的NFCGUI-Pro,简化版的mfocgui。
Kali平台:mfoc,,nfc-mfclassic。
关于ACR122U-A9这个读卡器,虽然比不上PM3那么神通广大,但是对于入门学习来说绝对算得上神器了。某宝上一搜一堆,很多店都卖165元左右(爆个内幕;其实都是一家)。然后就是UID可写的卡了,大约3元一张。平台选择这两个是因为入门来说自然首选Win平台,但是其中出现了一些问题,虽然失败但也贴出来供大家查错。
0×01分析、确定卡片
首先确定卡片是M1卡,且数据是保存在卡里而不是服务器上的。通过图1,我们可以看到机器只有电源线,没有网线,且机器已经很老了,肯定不能是无线方式联接。
我想到了一种“非正式”的一种鉴别方法,大多数注明“不记名不挂失”的卡片都是数据存放在本地的IC卡,否则他们完全可以提供记名挂失的功能的,对吧?
所以我们有把握这肯定就是IC卡,金额数据存放在卡里的了。那么对于这种卡,我们有两种让钱“无限”的方式:1.直接复制现有的卡,因为金额可以任意复制,C/V模式,但是这样太没有技术含量,而且成了纯粹的为了利益了;2.尝试了解卡片内数据块的实际意义作用,找到数据加密方法。对应的写出解密方法,这样卡内余额就我们随意控制了。当然,第二种方式是以第一种方式为基础的,所以我们一步一步来尝试。
0x02Win尝试
根据网上提供的资料(/static/1491),我们尝试使用验证漏洞,也就是利用mfocgui破解M1卡的密钥。先是Win7 x64,点击按钮即可一键自动破解,但是出现了问题。当试到05扇区的时候,程序就开始报错,然后ACR122U莫名与PC断开联接。网上搜索无果。尝试RadioWar的NFCGUI-PRO,同样的问题。同样的软件,后来换到XP,问题依旧。说明在Win平台上还是多少有点问题。不如Linux上的兼容性好。
0x03Kali尝试
值得一提的是,Kali原生支持ACR122U的,而且里面内置了很多的NFC安全研究的工具,极大的方便了我们的工作。(注意尽量不要用Win上的Kali虚拟机,因为USB口还是通过Win平台,所以兼容性问题还是可能存在,我的就会出现Usb Timeout错误)
进入Kali我们能看到很多RFID/NFC的工具。我们用到的是mfoc和nfc-mfclassic这两个工具。Mfoc是利用验证漏洞破解key的一个工具,而nfc-mfclassic则是对卡片进行读写的工具,我们可以从卡片里dump出来数据到本地,然后利用hexeditr分析编辑,再将数据导入到卡里去。
由于网上很少有这类工具的中文使用说明,我在此一并给大家介绍了:
mfoc:&invalid&option&--&'-'
Usage:&mfoc&[-h]&[-k&key]...&[-P&probnum]&[-Ttolerance]&[-O&output]
&&h&&&&&&打印帮助
&&k&&&&&&将一个新的密钥添加到密钥表里
&&P&&&&&&每扇区测试多少个密钥(默认20)
&&T&&&&&&随机和随机范围
&&O&&&&&&输出到的文件
为了以后使用方便,我们将破解的命令写成shell脚本:crack2file
if&[&$#&-lt&1&]
echo&&Usage:&
echo&&&readto&dumpFile&
mfoc&-k&ffffeeeedddd&-O&$1&#这句是我们真正用到的命令,这里的key以后可以换成我们破解出来的key,加快速度
我们连接上ACR122U到电脑,输入./crack2file tmp/unknow.mdf,就会开始自动破解了。
如果这张卡存在默认密码的话,理论上我们就能得到全部密钥。稍等几分钟,我们看到mfoc提示成功,dump文件已经得到,保存备份几次。然后我们再次去水机处刷卡,消费1元之后余额为8.00。因为我们已经有卡的加密密钥了,所以我们不必再次破解,我们通过使用nfc-mfclassic工具,使用已经有的导出文件再次导出卡内数据。
同样再给些中文使用帮助:
r|R|w|W&从卡片中读取数据到文件中(r),读取文件然后写入到卡片中(w)。或者如果你是使用uid可写卡,使用强制读取R,强制写入W可以改写uid。
a|A|b|B&&使用keyA还是keyB,当有错误的时候就停止(a,b)或者忽略错误(A|B)&&dump.mfd&&dump到的文件&&keys.mfd&&&key文件
F&&&&&&&&&&&如果UID不一样的话也继续
我们使用命令:nfc-mfclassic r A 600.mfd tmp/unknow.mfd f(建议写成脚本)。
0×04分析导出的Dump文件
成功导出变化了的dump文件。然后我们用hexeditor(这个会自动变成正常阅读顺序,当然某些数据不懂时我们可以尝试使用hexdump,这个是反端的顺序,可能会有新的发现)。打开分析。通过对比文件变化,我们发现有一部分内容变化了。
04&0A&52&18&7B&EF&03&20&00&6A&C8&01&00&3C00&1E&4F&4B&18&7B&EF&03&20&00&6A&C8&01&00&3C&001E&00&04&0A&4B&18&7B&EF&03&20&00&6A&C8&01&00&3C00&1E&&8.00&&&04&0A&52&18&7B&EF&03&84&00&7C&EB&01&00&3C00&1E&4F&4B&18&7B&EF&03&84&00&7C&EB&01&00&3C&001E&00&04&0A&4B&18&7B&EF&03&84&00&7C&EB&01&00&3C00&1E&&9.00
这其中hex(900)=0×384,hex(800)=0×320,所以这三行的对应数值就是金额。后面7C EB 01和6A C8 01是变化的内容。然后拿这张卡我再去刷一次,确定金额已经正确分析出来,但是后面的6A C8 01变为了6A C8 02。既然这三次变化没有规律,为了确认后面的变化部分是否与时间有关,我同一个数据复制了两张卡,然后先后到机器上刷了一样的钱,然后回来再dump出来,发现两张卡内的数据一模一样,所以推断与时间无关。但是!就因为最开始下的这个结论,导致我在解密的路上越走越偏。那么我猜测可能是金额与UID或者某部分内容通过异或,或,与等常见的运算。我尝试算了很长时间很多种可能性,最终没能算出来。暂时只好将卡多复制几次,继续慢慢尝试。
0×05转折点
接连刷了几天,得到了很多数据。直到12月2号中午,再次把所有数据放在一起对比时,忽然发现卡里面内容有点奇怪。当我用变化的6A C8这部分数值与UID异或的时候,组成的内容再加上后面的01好像有点规律了:
最开始测试&&&&&&&&&&继续测试&&&昨天&&&&&&&今天
112701&&&112702&&&&112901&&&&120101&&&&120201
怎么忽然从1127变成1201然后是1202了?今天是12月2号!也就是说我前几天测试的时候应该是11月27日。2702,是指第一次刷卡,第二次刷卡。然后至于那次单独测试是不是与时间有关,因为我是在同一天测试的数据,而它只记录日期。所以自然数据就一样了。
知道了这些,我们就把卡上所有信息都掌握了。其他字段都是些无关紧要且不会变的东西,因为卡是匿名买的,不记名不登记。
了解了这些,我们修改为8888即为88.88元试试,hex(b8。然后写入卡内,去刷,成功了!
但是,当我再次刷准备拍照的时候发现卡失效了,换一个机器,发现刷一次之后卡就失效了。经过多次测试发现,卡内余额只要大于50元钱,当前卡就临时失效,而我们购买单张卡时,单张卡内有的余额正好就是50。也就说机器内固化了检测卡内余额的功能,实在是想不通为什么要这样的鸡肋功能,对于机器的可升级维护性造成了负担。
至此,这张卡我们就彻底弄清楚如何修改金额了。虽然这只是一个较为简单的数据存放案例,但是作为M1卡入门还是不错的教程。希望这篇文章能为大家在RFID安全方向上起一个抛砖引玉的作用!如何将ic M1卡中的数据清空,还原为白卡?有分析的dump文件。_百度知道
如何将ic M1卡中的数据清空,还原为白卡?有分析的dump文件。
提问者采纳
你有密匙吗,有密匙最简单就是用nfc手机的MCT软件就可以格式化
有dump文件,里面应该有密钥
你手机有nfc吗,下个mct读出来
mct打不开。算了,问题差不多也解决了,好评
要nfc手机的
手机设置里有nfc功能
是什么手机
哦,我没有
提问者评价
太给力了,你的回答完美解决了我的问题!
其他类似问题
格式化一下
如何操作呢?
普通的蓝纽扣卡
长的都差不多吧
这个需要专门器材的,我不懂,不好意思了
器材有,求软件
打开dump文件的软件
可以参考吗?
dump文件的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁M1卡_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢RFID之M1卡数据分析 | WooYun知识库
RFID之M1卡数据分析
一直没有机会也没下定决心认真的去研究某个安全领域,很早之前就看到好多人研究RFID,一直很憧憬那片天空,趁着老大给机会,决定选这个方向作为个人业余努力的方向。 差不多四天前入手了ACR122U,决定拿自己母校的餐厅饭卡练手。 ACR122U的使用很简单,只要安装上驱动,使用M1卡服务程序就可以很快破解,破解完成后查看其生成的dump文件,找到加密扇区的密码,将密码导入到MCT (Mifare Classic Tool),剩下的就可以完全使用MCT完成了,个人很怀疑破解过程是否完全可以通过手机(支持NFC)APP完成。ACR122U的详细使用过程可以参考:,本文主要介绍目前M1卡中的数据分析和M1卡安全防护方案。
0x02背景知识
了解M1卡的结构可以知道M1卡共16个扇区,编号从0到15,每个扇区配备了从0到3共4个段,每个段可以保存16字节的内容。
0x03数据分析
阅读《RFID安全之某学校水卡破解》可以发现该学校的水卡中数据存储比较简单,按照作者的分析,4号扇区的1、2号数据段(编号从0开始)存储了水卡余额,将已知的余额32.31,换算为分为3231,再转为10进制为C9F,即00000C9F,而0C9F取反为FFFFF360,这时比较下4号扇区的值,很容易发现规律:前四个字节不取反倒序(9F0C0000)存储余额,接下来四个字节取反倒序(60F3FFFF)存储余额,再接下来四个字节不取反倒序(9F0C0000)存储余额。
上面提到的“倒序”,可以结合计算机数据存储方式来理解:如下图所示,变量a存储的数据对应的16进制为0A112233,变量b存储的数据对应的16进制为0B445566。
这样就很明显了,5634120A,就是变量a所代表的数据的十六进制0A123456的倒序。 作为入门教程,个人认为《RFID安全之某学校水卡破解》是非常不错的。看完这个教程,并实践结束后,我停下来思考这样一个问题:M1卡的密码破解是傻瓜式的,当然也有文章介绍破解原理,但是作为门外汉,目前我还不是特别关心,我只想找到那种破解成功,可以修改金额的快感!那么在整个M1卡的破解过程中,我自己到底起了什么作用?答案是卡片的数据分析。 《RFID安全之某学校水卡破解》中的数据分析并不难,只要知道水卡的余额就可以定位卡片中余额数据的存储位置,细心的读者肯定可以发现文中的截图5号扇区也存在非0值块,作者在《》中作了进一步分析;《》这篇文章所描述的卡片和《RFID安全之某学校水卡破解》的分析非常相似;而另一篇《 》文中的数据就更简单了,只有余额和消费金额之和,连取反的校验都没做。 分析了几篇图文教程式入门文章,加上自己的实际破解过程,总结了一下数据分析的经验。 首先,需要收集信息,然后可以通过数据比对法定位余额,如果卡片数据采取了校验保护,可以采用试错法进行排查定位,正如《RFID安全之某学校水卡破解后记——不留后患》中所用到的方法。
0x03.1比对法
比对法,就是将已知数据换算成十六进制,寻找卡片中能与之对应的数据,从而确定卡片中对应的存储位置所存储的数据的意义,或者将卡片中变化的字节转成十进制,判断是否存在相应的数据信息。 最常用的比对值当然是卡片余额,还有当前的消费金额,或者是累计的消费金额,这两个数据有出现在前文的引用文中。那么除了这些,还应该考虑哪些数据呢?这里我作一个简单的罗列:消费次数、日期、时间、读卡器编号、卡号(非UID)等 之所以认为上面的数据可以存储在卡片中,是因为两个字节(16bit),不考虑符号位,可以表示的最大数值是65535,一个字节(8bit)可以表示最大数值为255。一张卡按四年有效期来算的话,每天要刷44次才能再四年内超过这个数值;日期也可以用两个字节来表示,可以选择整体表示,譬如12月31日,记为1231,对应到16进制04CF,也可以一个字节表示月一个字节表示日,仍然是12月31日,可以记为0C1F(1F=31);时间(不考虑秒)的最大表示数字是23:59,也可以参考日期的表示方式,选择不同的方案;读卡器编号,一般情况下一个单位也不会同时具有65535台读卡设备;卡号,这里卡号一般可以用两个字节表示,如果单位人数较多(超过65535),也可以使用四个字节表示,卡号的意义可以标识一个人,也可以标识单位内的一个部门等。
0x03.2试错法
试错法就是针对一些不明意义的字节(可能是校验字节),通过修改已知意义的字节来确定其关联性,找出不明意义字节的计算方法。 数据比对法,有时并不能分析出所有数据块的数据,这时可以考虑试错法来确定隐晦数据和哪些字段有关联,譬如下面的案例: 卡片只有0号扇区有数据:
43 9A ** ** ** ** 04 00 46 BA 14 12 51 10 03 10
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
11 01 ** ** ** ** FF 07 80 69 FF FF FF FF FF FF
第0段为厂商写死的UID,不可修改,经过多次信息收集发现第1段的数据是不变的,变化的只有第二段,经过比对法,发现第1段的4A 3D是卡号,第2段的01 C2是本次消费金额,0E A6是余额,027D是消费和充值次数,081D是日期,到此,第2段中还有前四个字节以及最后两个字节的意义不明。 下面通过试错来定义各个字节的意义 尝试直接修改K1余额,读卡会失败,于是认为刷卡消费过程存在验证,余额和消费金额并不能构成验证对,所以认为验证信息在意义不明的6个字节内。 只修改消费金额也会导致读卡失败。 尝试使用K2的值整体替换K1的第2段,结果读卡依然失败。 最后尝试使用K2的值,整体替换K1的第1和第2段,等价于复制卡片,终于读卡成功了。 通过以上几步,可以确定消费读卡器在进行扣钱之前,会先校验卡片的正确性,校验值和余额、消费金额以及第1段中的数据都有关联。为了进一步定位信息,做出如下试错计划:
1、修改卡号,确认卡片是否可正确识别; 2、逐个修改第2段中已知意义的字节,确认卡片是否可正确识别,排除与校验无关的字节 3、对第2段中不明意义的6个字节逐个修改,确认卡片是否可正确识别,排除非校验字节 4、对第1段中的3个不明意义的字节逐个修改,确认卡片是否可正确识别 本质是就是对所有数据字节进行试错,排除与校验无关的字节! 通过以上过程缩小与校验相关的字节,再结合比对法中找出的已知意义的字节,从而确定不明意义字节的意义和校验算法。 由于刷卡条件限制,以上案例尚未破解完成,试错法也有待该案例进一步验证。 破解过程需要大胆猜测,努力求证!
0x04卡片防护
破解和防护是一对冤家,既然M1卡这么容易被破解,那有没有合适的防护方法呢?上一小节中提到的校验案例就算是一个很小的防护手段,但是依然存在很大被破解的风险。 为了降低水卡和饭卡被破解的风险,同时又不增加替换M1卡的成本,可以完全加密数据字段,基于密钥和算法保密性,保证即使可以通过验证攻击获取到M1卡中的数据,黑客也无法快速判断各个数据字段的意义,从而无法完成余额修改! 譬如,参考上一小节的校验案例,如果所有数据再与一个2字节的密钥进行异或处理,这时就无法简单的通过比对法判断出哪些字节是余额、哪些是消费金额,进一步降低了破解风险。当然针对密钥可以设计一套动态密钥方案,效果类似支付宝令(需要考虑如何处理长期不使用的卡片),而加密算法可以选择更加复杂的对称加密算法,只要保证不会对消费刷卡机造成过大延迟即可。
0x05复制攻击
数据加密虽然可以增加黑客分析卡片数据的难度,降低黑客恶意修改余额的风险,但是无法应对卡片复制攻击! 复制攻击可能造成的后果是盗刷他人饭卡或水卡,这一点是最容易理解的,当然前提是黑客可以接触到别人的饭卡或水卡。 除了这一点,复制攻击是否还存在其它危害? 在分析这之前,需要明确几个前提,1)刷卡机中会记录哪些信息;2)我们假设刷卡机没7天向中央数据库服务器提交一次数据,刷卡机向中央数据库提交的是哪些数据。 如果刷卡机只记录一张卡片的最后一次消费记录,那么其向数据库提交的数据必然要包含余额信息。如果在刷卡机两次向数据库提交数据的时间间隔内,利用复制的卡片(复制较早的卡片数据)做最后一次消费,那么真实卡片消费的数据就会被覆盖掉。 当然个人猜测目前的刷卡机应该会记录卡号(非UID)、消费累计金额、消费次数,同步数据库时只需要基于卡号找到对应的记录,然后将余额减去消费累计金额、总消费次数叠加本次提交的消费次数。这种情况下,复制攻击就只能盗刷他人的饭卡或水卡余额了,但是即使是这样,如果不影响被复制的卡,也算是一种修改余额的方式,毕竟刷卡机不会基于数据库信息向卡片写数据! 本来以为复制攻击就这些影响了,晚上睡觉前忽然想到,既然可以复制别人的卡,为什么不能复制自己的卡呢。T1时间充值m元,并记录下卡内的数据信息D1,消费一段时间后,T2时间卡内余额n元(n&m),此时将数据信息D1重新拷贝回卡内,卡片信息重新回到T1时间的状态,等价于T1-T2时间段内没做任何消费!这种情况即使是使用UID作校验也无法防护了,除非刷卡机是在线实时查询数据库的,后来发现这种攻击方式12年就有人提出了,并称之为。
刚接触RFID,有描述不准确或错误的地方,请轻拍指正!
0x07卷土再来
基于0x05节的分析和实际验证,通过复制攻击(重放攻击)已经实现0x03.2节示例中卡片的余额修改,但是为了论证 0x03.2节试错法的可行性,规划了如下方案:
43 9A ** ** ** ** 04 00 46 BA 14 12 51 10 03 10
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
11 01 ** ** ** ** FF 07 80 69 FF FF FF FF FF FF
针对以上信息,对第1、2段内容,逐字节进行试错,确认卡片是否可读 验证结果如下: 1、修改第1段第0字节
0D 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
2、修改第1段第1字节
0C 0E 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
3、修改第1段第2字节
0C 0D 0D 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
4、修改第1段第3字节
0C 0D 0C 12 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
5、修改第1段第4字节
0C 0D 0C 11 01 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
6、修改第1段第5字节
0C 0D 0C 11 00 01 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
7、修改第1段第6字节
0C 0D 0C 11 00 00 4B 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
8、修改第1段第7字节
0C 0D 0C 11 00 00 4A 3E 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
9、修改第1段第8字节
0C 0D 0C 11 00 00 4A 3D 01 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
10、修改第1段第9字节 0C 0D 0C 11 00 00 4A 3D 00 2E 00 00 00 01 00 47 第1段 37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60 第2段
11、修改第1段第10字节 0C 0D 0C 11 00 00 4A 3D 00 2D 01 00 00 01 00 47 第1段 37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60 第2段
12、修改第1段第11字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 01 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
13、修改第1段第12字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 01 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
14、修改第1段第13字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 02 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
15、修改第1段第14字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 01 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
16、修改第1段第15字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 48
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
17、修改第2段第0字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
38 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
18、修改第2段第1字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0C BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
19、修改第2段第2字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BD E4 01 C2 00 00 0E A6 02 7D 08 1D 05 60
20、修改第2段第3字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E5 01 C2 00 00 0E A6 02 7D 08 1D 05 60
21、修改第2段第4字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 02 C2 00 00 0E A6 02 7D 08 1D 05 60
22、修改第2段第5字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C3 00 00 0E A6 02 7D 08 1D 05 60
23、修改第2段第6字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 01 00 0E A6 02 7D 08 1D 05 60
24、修改第2段第7字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 01 0E A6 02 7D 08 1D 05 60
25、修改第2段第8字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0F A6 02 7D 08 1D 05 60
26、修改第2段第9字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A7 02 7D 08 1D 05 60
27、修改第2段第10字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 03 7D 08 1D 05 60
28、修改第2段第11字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7E 08 1D 05 60
29、修改第2段第12字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 09 1D 05 60
30、修改第2段第13字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1E 05 60
31、修改第2段第14字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 06 60
32、修改第2段第15字节
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
37 0B BC E4 01 C2 00 00 0E A6 02 7D 08 1D 05 61
本来期望可以得到一个很不错的结果的,甚至连测试结果位置都预留了,天不遂人愿,畏畏缩缩的在一个窗口连刷了32次,每次都是读卡失败,这下郁闷了,本以为破解只能止步于此了。 又拖了一周,感觉自己都没激情了,只是偶尔抽时间看看之前收集的数据,却总结出了下面的结果:
13 05 71 22 04 E2 00 00 01 54 03 15 08 19 0D FC
13 05 71 22 27 10 00 00 28 64 03 16 08 19 0D 37
59 04 71 96 04 E2 00 00 23 82 03 17 09 01 0D EC
13 05 86 B3 04 E2 00 00 1E A0 03 18 09 02 0D 66
13 05 89 8E 01 90 00 00 1D 10 03 19 09 03 04 99
13 05 92 5C 04 E2 00 00 18 2E 03 1A 09 04 0D 11
59 04 78 53 03 52 00 00 14 DC 03 1B 09 05 09 F2
注:这是另一张卡上收集的数据,两个字节两个字节进行异或运算再与始终不变的第1段逐两字节异或 开始时,始终没能搞清楚这个异或结果,今天突然想到,每两个字节进行异或的结果出现的是两个相同的字节值,那么逐个字节异或岂不就是0,经此确认,试错法终于可以再次登场了,结合之前的32次试错,大胆猜测卡片的校验过程:第1和第2段逐字节异或为0。 现在明确了卡片关键的两段数据逐字节异或为0的校验条件,再次进行如下试错测试: 前提:当前卡片数据(消费读卡器可识别)
43 9A 5D A7 23 88 04 00 46 BA 14 12 51 10 03 10
0C 0D 0C 11 00 00 4A 3D 00 2D 00 00 00 01 00 47
26 02 99 63 01 2C 00 00 0D 7A 02 7E 08 1F 03 EC
11 01 08 46 04 20 FF 07 80 69 FF FF FF FF FF FF
1、尝试修改第一段中的数据
1.1 4A3D--&5324
结果:不可读
1.2 4A3D--&4A3E 0047--&0044
结果:可读
2、修改第二段中的数据 2.1修改第二段中的最后两个字节:
03EC--&00EF
结果:可读
2.2修改第二段中最前面的两个字节:
2602--&2400
结果:可读
2.3修改第二段中第三四个字节:
9963--&966C
结果:可读
2.4整段替换第二段:
26 02 99 63 01 2C 00 00 0D 7A 02 7E 08 1F 03 EC3--&13 05 86 B3 04 E2 00 00 1E A0 03 18 09 02 0D 66
结果:可读,金额变化一致;却与之前的一次实验结果冲突!
通过上面的试错,基本可以明确针对第2段的校验过程:逐字节异或,判断结果是否为0。为进一步验证猜测,构造如下数据:
1E 02 66 83 02 3C 00 00 EF C4 03 FF 08 FF 03 E4
这条人为构造的数据,余额为613.8元,消费金额为5.72元,消费日期为一个不存在的日期,如果该该数据能够校验通过,那么破解基本就可以结束了。 1E 02 66 83 02 3C 00 00 EF C4 03 FF 09 1E 03 04,如果上一条不能成功,则尝试该日期正确的数据。 经过验证,随意构造的两条数据都成功修改了卡片余额,如下图:
到此,卡片的破解算是告一段落,虽然遗留了一下问题: 1、整体替换两次实验结果冲突? 2、第2段中的前四个字节以及最后两个字节的数据是如何产生的? 第一个问题可能是自己粗心造成的;第二个问题并不影响卡片破解。
通过上面的实例分析,再次总结卡片破解过程中数据分析的两大步骤: 1、数据比对 收集多组数据,结合消费金额、余额、日期、消费次数等已知信息确定数据段中各个字节的含义 2、试错分析 在直接修改余额出错的情况下,逐字节或整体试错,确定校验相关字节,并猜测校验算法,一般情况下,校验算法是可逆算法,字节运算一般主要考虑异或运算;然后通过试错进行论证;最后自己构造数据实现卡片余额修改,完成破解。
FFFFFFFFFFFFFE
FFFFFFFFFE01FE
上面65535 下,下面0.00 算法求解
3700 轉換到十六進制 E74
我会一些,你加我QQ我们交流交流,验证:M1卡
我也遇到加密算法了,不过没有你说的那么复杂,可我还是不明白,这是37.00元的00000...,000E74D...,00000....,2CFFF078069FFFFFFFFFFFF,和25.40元的0000000...,...,00000....,2CFFF078069FFFFFFFFFFFF,还有25.25元的
0000000...,...,00000....,2CFFF078069FFFFFFFFFFFF,算了几回找不到时什么算法,求解答,我QQ
没有看懂异或的方法,是哪个字节和哪个字节异或啊?具体一点,看不懂啊
PM3也许会有奇效
全加密卡如何是好?M1卡都炒到老了,换其他卡吧。有个ACR122U加点小程序基本能搞定所有离线验证且有默认密钥的卡。
我们学校的饭卡每个扇区的密码都改了。
数据都dump不出来
这是本人发的吗
说得好有道理,我既然无言已对了!
不给出POC的文章不是好文章
校验位计算程序:
$arr1=array(
'99',
'C0',
'B4',
'C0',
'00',
'C8',
'CE',
'1D',
'00',
'E6',
'26',
'CD',
$arr=array();
foreach ($arr1 as $value) {
$arr[$j++]=base_convert($value,16,2);
$res = str_split($tt);
foreach($arr as $val){
$tmp=str_split($val);
foreach ($tmp as
if(intval($res[$i]) xor intval($value)){
$res[$i]='1';
$res[$i]='0';
function sh($res){
$res1='';
foreach($res as $val){
echo '16进制为:';
echo base_convert($res1,2,16);
其实你说的也没错,但是类比到http当中的截断改包,重复发包等等说起来很简单,做起来也不难,但是你仍然需要对http协议有个基础的了解,这个也是一样,这相当于是一个门槛,迈过了就是那么回事,没迈过你就知道个大概,自己做不来。同样可以类比到安全的其他方向。对自己不了解的还是保持一颗敬畏之心,因为你不知道这个门槛需要花费多少时间才能迈过去。
写的好像很厉害。
其实我觉得一点技术含量也没有. 说真的, 复制、刷、对比、转换、修改、
如果不喜欢听就当我吹牛好了.
不过你写的真的很高端,我真的是看不懂,只能说我无知吧.
感谢知乎授权页面模版

我要回帖

更多关于 m1数据 的文章

 

随机推荐