第一次接触IC卡还是大学里,当时要做毕业设计,做一个食堂刷卡消费系统。做了毕业设计,转头就开始研究IC卡的破解。当时比较流行先用acr122u-A9或者pm3把原卡密码破解(122可以破解非全加密,pm3可以破解全加密),然后用uid卡复制。当时就有滚动码防复制系统,那个时候唯一的方法是发卡破解,技术门槛较高。
时光荏苒,一眨眼我胡子都长到地上,N年没碰IC卡。一个机缘巧合,需要复制卡,发现新出来很多卡,cuid、fuid、ufuid。。。索性就重新了解一下这个行业的现状。
先简单铺垫一下基础知识吧,方便下文理解。只做简要描述,详细内容可自行查阅相关资料。
【IC卡读写】
IC卡内有很多个抽屉,每个抽屉都有一把密码锁,只有用正确的密码,才能打开抽屉,看看里面装了啥,或者往里面放东西拿东西。IC卡出厂的时候,厂家会设定默认密码。
【普通卡密】
小明和小红都有一张IC卡,抽屉的密码是一样的,宿管王大爷用统一的密码就能打开他们的抽屉,检查里面的东西。
这就产生一个问题,要是小明偷看了王大爷的密码,他也能打开小红的抽屉,甚至别人所有人的抽屉。小明还可以把自己抽屉里的东西摆放得和小红一模一样,王大爷一看抽屉,还以为是小红的抽屉。
【一卡一密】
小明和小红的抽屉密码是不一样的,王大爷一看,哎哟是小明的抽屉,就输入密码xiaoming,看到小红的抽屉就输入密码xiaohong。
但是密码怎么来的,只有王大爷知道,小明不知道。小明不知道算法,即使偷看王大爷开自己的抽屉,记住的也只是自己的密码,无法打开小红的抽屉。
而且,小明即使把自己的抽屉外观,伪装得和小红一模一样,由于不知道小红的抽屉密码,只要王大爷一输入密码xiaohong,就会发现不对劲,不是小红的抽屉。
滚动码出现的需求就是uid卡可以完全复制IC卡,市面上出现大量复制卡。
假如IC卡内的数据是死的,是不变化的,那依样画葫芦,像复印机一样,一张复印N张,张张都能用。等于是一把钥匙被复制,会出现一些安全隐患,或者说是管理方不愿看到的(卖卡收费)。
滚动码的原理很简单,每刷一次卡,内卡有个数据都会变化。比如刚开始是0,刷一次变成1,再刷一次变2,到9之后再刷又变回0,俗称滚动(实际不一定0-9滚动,变化很多)。
不光卡内的滚动码会变,读卡器也会记录滚动码,只有当卡内的滚动码和读卡器保存的滚动码相同,才会被认为的正常的卡。
而复制的卡,因为卡内数据不会同步,正常的卡刷过后,滚动码变了,而复制卡内的滚动码还是原来的数字,就和读卡器内最新的滚动码不一样,被判定为复制卡。
现在高级一点的防复制防火墙,甚至一旦发现是复制卡,会破坏卡片,或者把卡片拉黑,导致正常卡也无法使用。
破解有两种方式。
发卡
发卡破解难度较高,原理一句话就能说清。把各种数据计算方法破解了,把卡片的控制规则摸清了,相当于物业(管理员)给你发了一张全新的卡片。
严格来说,这种方式不是复制卡片。
有的人是分析大量的数据,找到其中的规律,有的人是拿到了厂家的软件,把软件破解了,再把其中的算法拿出来用。根据不同系统的复杂程度,此种破解方式难度不同。
现在市面上也有人集合了各个厂家的破解算法,提供收费服务。只要你告诉他是什么厂家的什么系统,他就能给你计算出一个全新有效的数据。只要把数据写入新卡,就能当一张物业发的新卡使用。
特殊复制卡
现在新出来一种卡片,gtu、guid、gid、gpu类似等等,都是同一种卡,只是叫法不同。都是G开头,滚动的拼音首字母。下文统一称呼为gtu卡。
漏洞一:部分滚动码系统有一个漏洞,滚动码存在初始值(复位值)。因为读卡器是离线的,新卡的滚动码没法同步到读卡器内,就需要一个初始值来判断第一次刷卡。
可以看到,只要卡内的滚动码是初始值,读卡器就会判定为合法卡片。
正常情况下,每次刷卡,滚动码都会变化。神奇的gtu卡,有一种功能,就是锁定滚动码,卡片自动复原滚动码。只要把滚动码锁定成初始值或复位值,就能达到复制的目的。
漏洞二:部分系统存在逻辑漏洞。读卡器不会立即保存最新的滚动码,需要先把新的滚动码写入ic卡,如果写卡失败,滚动码就不会更新。换而言之,只要让滚动码写卡失败,就可以让滚动码不“滚”。
破解方式可以用gtu卡锁定滚动码,让读卡器写卡失败,也可以修改ic卡的控制字节。默认的控制字节“FF-07-80-69”是可读可写的,将保存滚动码的数据块的控制字节设为“只读”,读卡器就无法修改ic卡内的滚动码,写卡会失败。
此种破解方式需要一个前提,滚动码保存的位置相对独立。如果滚动码和正常刷卡要用的数据混合在一起,锁定区块,也就锁定了正常数据,会影响刷卡。
漏洞三:和漏洞二差不多,也是逻辑漏洞。部分读卡器更新滚动码的逻辑是这样的,读卡器把更新的滚动码写入卡片,然后再读一次卡片,把读到的滚动码保存到读卡器。正常情况新滚动码写入卡片,卡片里就是最新的滚动码,再读一遍没有问题,但是遇到gtp卡会锁定数据,这样读卡器读回的滚动码始终不会变化,保存的滚动码就不“滚动”了。
上面提到的2个漏洞,并不是所有的系统都有,gtu卡也不是万能的。
对于漏洞一,有的系统不需要初始值来判断是否的第一次刷卡,自身存储内没有刷卡记录,则认为是首次刷卡。复位值也不一定存在,有的系统没有设计复位功能。
对于漏洞二,属于一个流程上的BUG,已有部分系统修正了这个漏洞。一旦读卡器写卡失败,虽然不会更新滚动码,但是也不会执行后面的操作(开门、电梯按钮亮灯等等),刷卡会无反应。漏洞三也应该有部分系统修正了,只要将新滚动码保存在读卡器的临时变量里,后面再正式写入内存,不要用读卡的方式去将卡片内滚动码保存。
在常规滚动码的基础上,部分系统还会有滚动码“暗桩”。举个例子,明面上滚动码从0-9在循环滚动,但实际上每循环一次,就会在一个不起眼的角落标记一个数字,代表了循环次数。如果分析破解滚动码时,没有发现暗桩,就无法正常使用。
本文链接:https://blog.nnwk.net/article/114
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论