滚动码原理滚动码出现的需求就是uid卡可以完全复制IC卡,市面上出现大量复制卡。
假如IC卡内的数据是死的,是不变化的,那依样画葫芦,像复印机一样,一张复印N张,张张都能用。等于是一把钥匙被复制,会出现一些安全隐患,或者说是管理方不愿看到的(卖卡收费)。
滚动码的原理很简单,每刷一次卡,内卡有个数据都会变化。比如刚开始是0,刷一次变成1,再刷一次变2,到9之后再刷又变回0,俗称滚动(实际不一定0-9滚动,变化很多)。
不光卡内的滚动码会变,读卡器也会记录滚动码,只有当卡内的滚动码和读卡器保存的滚动码相同,才会被认为是正常的卡。
而复制的卡,因为卡内数据不会同步,正常的卡刷过后,滚动码变了,而复制卡内的滚动码还是原来的数字,就和读卡器内最新的滚动码不一样,被判定为复制卡。
现在高级一点的防复制防火墙,甚至一旦发现是复制卡,会破坏卡片,或者把卡片拉黑,导致正常卡也无法使用。
破解破解有两种方式。
1、发卡
发卡破解难度较高,原理一句话就能说清。把各种数据计算方法破解了,把卡片的控制规则摸清了,相当于物业(管理员)给你发了一张全新的卡片。
严格来说,这种方式不是复制卡片。
有的人是分析大量的数据,找到其中的规律,有的人是拿到了厂家的软件,把软件破解了,再把其中的算法拿出来用。根据不同系统的复杂程度,此种破解方式难度不同。
现在市面上也有人集合了各个厂家的破解算法,提供收费服务。只要你告诉他是什么厂家的什么系统,他就能给你计算出一个全新有效的数据。只要把数据写入新卡,就能当一张物业发的新卡使用。
2、特殊复制卡
现在新出来一种卡片,gtu、guid、gid、gpu类似等等,都是同一种卡,只是叫法不同。都是G开头,滚动的拼音首字母。下文统一称呼为gtu卡。
漏洞一:部分滚动码系统有一个漏洞,滚动码存在初始值(复位值)。因为读卡器是离线的,新卡的滚动码没法同步到读卡器内,就需要一个初始值来判断第一次刷卡。
可以看到,只要卡内的滚动码是初始值,读卡器就会判定为合法卡片。
正常情况下,每次刷卡,滚动码都会变化。神奇的gtu卡,有一种功能,就是锁定滚动码,卡片自动复原滚动码。只要把滚动码锁定成初始值或复位值,就能达到复制的目的。
漏洞二:部分系统存在逻辑漏洞。读卡器不会立即保存最新的滚动码,需要先把新的滚动码写入ic卡,如果写卡失败,滚动码就不会更新。换而言之,只要让滚动码写卡失败,就可以让滚动码不“滚”。
破解方式可以用gtu卡锁定滚动码,让读卡器写卡失败,也可以修改ic卡的控制字节。默认的控制字节“FF-07-80-69”是可读可写的,将保存滚动码的数据块的控制字节设为“只读”,读卡器就无法修改ic卡内的滚动码,写卡会失败。
此种破解方式需要一个前提,滚动码保存的位置相对独立。如果滚动码和正常刷卡要用的数据混合在一起,锁定区块,也就锁定了正常数据,会影响刷卡。
漏洞三:和漏洞二差不多,也是逻辑漏洞。部分读卡器更新滚动码的逻辑是这样的,读卡器把更新的滚动码写入卡片,然后再读一次卡片,把读到的滚动码保存到读卡器。正常情况新滚动码写入卡片,卡片里就是最新的滚动码,再读一遍没有问题,但是遇到gtp卡会锁定数据,这样读卡器读回的滚动码始终不会变化,保存的滚动码就不“滚动”了。
防御上面提到的2个漏洞,并不是所有的系统都有,gtu卡也不是万能的。
对于漏洞一,有的系统不需要初始值来判断是否的第一次刷卡,自身存储内没有刷卡记录,则认为是首次刷卡。复位值也不一定存在,有的系统没有设计复位功能。
对于漏洞二,属于一个流程上的BUG,已有部分系统修正了这个漏洞。一旦读卡器写卡失败,虽然不会更新滚动码,但是也不会执行后面的操作(开门、电梯按钮亮灯等等),刷卡会无反应。漏洞三也应该有部分系统修正了,只要将新滚动码保存在读卡器的临时变量里,后面再正式写入内存,不要用读卡的方式去将卡片内滚动码保存。
在常规滚动码的基础上,部分系统还会有滚动码“暗桩”。举个例子,明面上滚动码从0-9在循环滚动,但实际上每循环一次,就会在一个不起眼的角落标记一个数字,代表了循环次数。如果分析破解滚动码时,没有发现暗桩,就无法正常使用。