[科普]食堂卡、门禁卡、电梯卡等IC卡防复制的原理

2021年9月27日学习笔记评论498,8431字数 2418阅读8分3秒阅读模式

image

第一次接触IC卡还是大学里,当时要做毕业设计,做一个食堂刷卡消费系统。做了毕业设计,转头就开始研究IC卡的破解。当时比较流行先用acr122u-A9或者pm3把原卡密码破解(122可以破解非全加密,pm3可以破解全加密),然后用uid卡复制。当时就有滚动码防复制系统,那个时候唯一的方法是发卡破解,技术门槛较高。
时光荏苒,一眨眼我胡子都长到地上,N年没碰IC卡。一个机缘巧合,需要复制卡,发现新出来很多卡,cuid、fuid、ufuid。。。索性就重新了解一下这个行业的现状。

IC基础

先简单铺垫一下基础知识吧,方便下文理解。只做简要描述,详细内容可自行查阅相关资料。
【IC卡读写】
IC卡内有很多个抽屉,每个抽屉都有一把密码锁,只有用正确的密码,才能打开抽屉,看看里面装了啥,或者往里面放东西拿东西。IC卡出厂的时候,厂家会设定默认密码。
【普通卡密】
小明和小红都有一张IC卡,抽屉的密码是一样的,宿管王大爷用统一的密码就能打开他们的抽屉,检查里面的东西。
这就产生一个问题,要是小明偷看了王大爷的密码,他也能打开小红的抽屉,甚至别人所有人的抽屉。小明还可以把自己抽屉里的东西摆放得和小红一模一样,王大爷一看抽屉,还以为是小红的抽屉。
【一卡一密】
小明和小红的抽屉密码是不一样的,王大爷一看,哎哟是小明的抽屉,就输入密码xiaoming,看到小红的抽屉就输入密码xiaohong。
但是密码怎么来的,只有王大爷知道,小明不知道。小明不知道算法,即使偷看王大爷开自己的抽屉,记住的也只是自己的密码,无法打开小红的抽屉。
而且,小明即使把自己的抽屉外观,伪装得和小红一模一样,由于不知道小红的抽屉密码,只要王大爷一输入密码xiaohong,就会发现不对劲,不是小红的抽屉。

滚动码原理

滚动码出现的需求就是uid卡可以完全复制IC卡,市面上出现大量复制卡。

假如IC卡内的数据是死的,是不变化的,那依样画葫芦,像复印机一样,一张复印N张,张张都能用。等于是一把钥匙被复制,会出现一些安全隐患,或者说是管理方不愿看到的(卖卡收费)。

滚动码的原理很简单,每刷一次卡,内卡有个数据都会变化。比如刚开始是0,刷一次变成1,再刷一次变2,到9之后再刷又变回0,俗称滚动(实际不一定0-9滚动,变化很多)。
[科普]食堂卡、门禁卡、电梯卡等IC卡防复制的原理
不光卡内的滚动码会变,读卡器也会记录滚动码,只有当卡内的滚动码和读卡器保存的滚动码相同,才会被认为的正常的卡。
而复制的卡,因为卡内数据不会同步,正常的卡刷过后,滚动码变了,而复制卡内的滚动码还是原来的数字,就和读卡器内最新的滚动码不一样,被判定为复制卡。
现在高级一点的防复制防火墙,甚至一旦发现是复制卡,会破坏卡片,或者把卡片拉黑,导致正常卡也无法使用。

破解

破解有两种方式。

发卡

发卡破解难度较高,原理一句话就能说清。把各种数据计算方法破解了,把卡片的控制规则摸清了,相当于物业(管理员)给你发了一张全新的卡片。
严格来说,这种方式不是复制卡片。
有的人是分析大量的数据,找到其中的规律,有的人是拿到了厂家的软件,把软件破解了,再把其中的算法拿出来用。根据不同系统的复杂程度,此种破解方式难度不同。
现在市面上也有人集合了各个厂家的破解算法,提供收费服务。只要你告诉他是什么厂家的什么系统,他就能给你计算出一个全新有效的数据。只要把数据写入新卡,就能当一张物业发的新卡使用。

特殊复制卡

现在新出来一种卡片,gtu、guid、gid、gpu类似等等,都是同一种卡,只是叫法不同。都是G开头,滚动的拼音首字母。下文统一称呼为gtu卡。
漏洞一:部分滚动码系统有一个漏洞,滚动码存在初始值(复位值)。因为读卡器是离线的,新卡的滚动码没法同步到读卡器内,就需要一个初始值来判断第一次刷卡。
[科普]食堂卡、门禁卡、电梯卡等IC卡防复制的原理
可以看到,只要卡内的滚动码是初始值,读卡器就会判定为合法卡片。
正常情况下,每次刷卡,滚动码都会变化。神奇的gtu卡,有一种功能,就是锁定滚动码,卡片自动复原滚动码。只要把滚动码锁定成初始值或复位值,就能达到复制的目的。
漏洞二:部分系统存在逻辑漏洞。读卡器不会立即保存最新的滚动码,需要先把新的滚动码写入ic卡,如果写卡失败,滚动码就不会更新。换而言之,只要让滚动码写卡失败,就可以让滚动码不“滚”。
[科普]食堂卡、门禁卡、电梯卡等IC卡防复制的原理
破解方式可以用gtu卡锁定滚动码,让读卡器写卡失败,也可以修改ic卡的控制字节。默认的控制字节“FF-07-80-69”是可读可写的,将保存滚动码的数据块的控制字节设为“只读”,读卡器就无法修改ic卡内的滚动码,写卡会失败。
此种破解方式需要一个前提,滚动码保存的位置相对独立。如果滚动码和正常刷卡要用的数据混合在一起,锁定区块,也就锁定了正常数据,会影响刷卡。
漏洞三:和漏洞二差不多,也是逻辑漏洞。部分读卡器更新滚动码的逻辑是这样的,读卡器把更新的滚动码写入卡片,然后再读一次卡片,把读到的滚动码保存到读卡器。正常情况新滚动码写入卡片,卡片里就是最新的滚动码,再读一遍没有问题,但是遇到gtp卡会锁定数据,这样读卡器读回的滚动码始终不会变化,保存的滚动码就不“滚动”了。

防御

上面提到的2个漏洞,并不是所有的系统都有,gtu卡也不是万能的。
对于漏洞一,有的系统不需要初始值来判断是否的第一次刷卡,自身存储内没有刷卡记录,则认为是首次刷卡。复位值也不一定存在,有的系统没有设计复位功能。
对于漏洞二,属于一个流程上的BUG,已有部分系统修正了这个漏洞。一旦读卡器写卡失败,虽然不会更新滚动码,但是也不会执行后面的操作(开门、电梯按钮亮灯等等),刷卡会无反应。漏洞三也应该有部分系统修正了,只要将新滚动码保存在读卡器的临时变量里,后面再正式写入内存,不要用读卡的方式去将卡片内滚动码保存。
在常规滚动码的基础上,部分系统还会有滚动码“暗桩”。举个例子,明面上滚动码从0-9在循环滚动,但实际上每循环一次,就会在一个不起眼的角落标记一个数字,代表了循环次数。如果分析破解滚动码时,没有发现暗桩,就无法正常使用。

实现基于权重的随机选择算法 学习笔记

实现基于权重的随机选择算法

今天我在做一款应用时,需要随机抽取问题,但是我不希望问题出现的概率是一样的,面对这种需求该如何解决呢? 于是我想到了在 Nginx 中,实现负载均衡时,可以给每个服务分别设置权重值,来实现自定义服务被...
记一次工商银行跨境汇款到新加坡 OCBC 学习笔记

记一次工商银行跨境汇款到新加坡 OCBC

如果还不知道如何开通境外银行账户的,可以看这篇文章: 国内就可以开通境外实体银行卡!新加坡华侨银行 OCBC 开户经验分享 第一次入金 OCBC,我用的招商银行境外汇款,手续费加电报费收了我 200,...
个人文档笔记知识库 设计笔记 终于上线了 学习笔记

个人文档笔记知识库 设计笔记 终于上线了

一直有做笔记的习惯,大部分内容是分享到 设计笔记 这个网站了。 但是有一个问题,就是有些文档比较系统,需要长期更新,频繁更新网站的文章显得就有点呆。 对于这种需要长期更新的文档,之前我都是在本地建一个...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定