当前位置:无忧公文网 >范文大全 > 征文 > 条件接收系统攻防杂谈连载(1)

条件接收系统攻防杂谈连载(1)

时间:2022-03-24 09:16:27 浏览次数:

编者按:正版卡与D版卡的斗争,几乎成了条年接收系统大舞台上一场热闹的“大戏”。但是,对于普通用户而言, 场戏却似乎有些深奥得高不可攀,即使就发生在自己身边,也仍旧令人感觉云雾里。那么,是否有一个途径,能让广大并非缩程高手的读者了解条件接收系统攻防大战中的奥秘呢?热心的HammerRed老师针对朋友们的要求,以自身的研究实践为例,无私地撰写了一系列教学文章,为渴望探求真理的读者提供了一条循序渐进的学习之路。本刊将在今后的几期 杂志中连续刊载该系列文章,与读者们共同分享探索的乐趣。

普通的D卡可以从功能上维肖微妙地仿真正版卡的功能,与正版卡几乎一样地正常解密节目,实现了鱼目混珠。但每每新的反制到来,导致D卡败下阵来的时候,就激起cracker们的追求,希望通过努力,终有一天,D卡与正版卡完全一样了。这似乎是hacker界的最高境界与追求。我将在本文中谈谈自己的一孔之见,以供大家讨论。

首先,我认定,无论如何,D卡是不可能完全与正版卡一样。

其次,我认为,D卡与正版卡不能完全一样,未必是件坏事,相反,可能是件好事。

再次,我坚信,D卡追求在功能上达到甚至超过正版卡,不是不可能的,当然怕反制仍然还会是D卡的天生弱点和永远的心病。

最后,我将探讨D卡追求正版卡功能的方法。

杂谈之一

要实现D卡与正版卡完全一样的想法,最简单的实现方法似乎是直接仿制正版卡:

从硬件破解的角度,完全地仿照正版卡来定制IC卡;从软件破解的方向,将正版卡的程序读出;最后将程序写入IC卡中,就变成了与正卡无差别的D卡了。

仿制别人的产品,看似不道德,其实为了生存,该行当从古到今一直兴盛不衰,有的仿制甚至与国家利益相关联,受到国家的大力支持,如军工产品、超级计算机等,这些仿制还有一个冠冕堂皇的名称,叫“反向工程”。

仿制正版卡,可以将IC卡的触点剥离下来,再将保护的塑料腐蚀掉,暴露出元件和内部电路连接,就可以绘制成电原理图,最后交给能定制生产IC卡的厂家生产。国内在深圳和厦门等地都有能生产定制旧卡的厂家,在利益的驱使下,他们往往不会过问敏感的问题。

IC卡中的元件如果是通用元件,通常可以通过IC卡的功能原理的分析来确定,虽然困难,但总是可以最终确定。

IC卡中的元件如果是专用元件,确定元件的事情就变得极其困难和十分渺茫了。

直接仿制正版卡,似乎不是难事,但从实际实现上却是几乎不可能的。因为这种想法太显然了,它早就成了正版卡研制者防范的重中之重!如果留下了仿制的可能性,那么正版卡开发的高投入将在一夕之间就打水漂了。

杂谈之二

阻止直接仿制正版卡的主要手段之一,就是正版卡中采用的专用定制IC。这是一种经研发者、生产者和使用者三方签署了具有法律效力的协议保证的,不可能流入民间市场的特殊IC,如果正版卡开发商发现市场上有这种仿制IC,那么可以追究生产定制IC厂家的法律责任。

ROMIO/ROM11卡中的MAP协处理器就是这样一种特殊的定制IC。在无法获得这类特殊IC的前提下,D卡直接仿制正版卡这条路就堵死了。

那么能否自行设计研制具有类似功能的定制IC呢?

这也是几乎不可能的,主要原因是:

首先,根本无法完全了解定制IC的全部功能。定制IC的功能通常分为常用通用功能与备用储备功能两类。备用储备功能是为了在hacker破解攻破第一道防线之后,正版卡建立起第二道防线而准备的,它的表现和出现时机是无法预料的,有的功能说不定永远都不使用。

在定制IC的功能尚未表现出来之前就能完全了解到它的细节,那需要有未卜先知的超能力,这已经进入玄学的领域了。

或者朋友们还可以想象收买开发定制IC的技术人员或派间谍打入了研制定制IC的公司,盗取了它锁在保险箱里的技术资料……等等,这有点像电影《不可能的任务》中虚构的故事了。

其次,退一万步说,假设能了解定制IC的全部功能,那么它的生产所需要的资金也会大的惊人,其生产动作本身足以引起各方的关注,各方中当然很可能包含国际刑警组织。

杂谈之三

有朋友会提出,直接使用流在市面上的ROM10与ROM11卡来制成D卡,不就实现了“硬件完全仿制吗”?

ROM10与ROM11是Nagra系统正版卡的“基础卡”,之所以仅称它为“基础卡”而不直接说它就是正版卡,是因为这些卡一方面构成了与正版卡相同的硬件基础,具有MAP协处理器,另一方面,它们只在写入了相应的正版卡程序之后,才能真正成为正版卡。一些了解内情的朋友曾告诉我ROM10与ROM11卡是如何流到世面上的,有种种说法,我不予评介。使用ROM10与ROM11卡做成D卡,不能算硬件仿制成功,因为它本身已经就是正卡的硬件基础了。

应当指出,在ROM10与ROM11卡中写入非正版程序做成的所谓“正改卡”是对正版卡的最直接威胁,因为它确实可以与正版卡几乎完全一样,因而自然地成为正版卡的冤家对头。说到几乎完全一样,但终究还是有不同之处,是可以加以区别的。目前的一些Nagra系统在下行的EMM命令中加入了甄别真伪和“杀卡”指令,对于“正改卡”,毫不留情地清除卡中程序并且让它成为废卡。朋友们切不可在没有把握的情况下,将自行写入程序的ROM10/ROM11卡放入正在收视的146接收机中,几秒钟之内,你的卡就可能变成一张“高级扑克牌”了。为了对抗“杀卡”,这类“正改卡”的程序采用了Blocker技术,可以抵抗多数杀卡指令,使之安全使用。这些Blocker技术也有失效的时候。许多朋友注意到,2006年初,香港本地有线就曾经出现过已有Blocker的卡仍然被大批杀掉的事件。

Nagra系统是否有针对使用其它CPU的D卡的“杀卡”指令?据我对Logging的EMM的分析,可以肯定地说,没有!这是D卡的独特优点,其道理将在后续章节中详述。

杂谈之四

在我的“杂谈二、三”中已经论述了硬件仿制的不可能性,部分证明了在“杂谈一”中我提到的“无论如何,D卡是不可能完全与正版卡—样”的论述。硬件仿制的路走不通了,那么看看软件仿真的蹦旨不能走得通。软件仿真的路能不能走得通有不同的判断标准。

如果仅以在一段时段中,软件仿真的D卡与正版卡具有相同的条件收视功能来判断,那么无疑,从D卡的实践看,软件仿真已经成功了;但如果以任何时段中,软件仿真的D卡与正版卡都具有相同的功能,特别是对抗反制的功

能来判断,那么我要说,同样毫无疑问的是,软件仿真是不可能完全成功的!

自动对抗新的反制,使D卡与正版卡一样免除后顾之忧,肯定是D卡研究的终吸目标。难道这个目标是“不可能的任务”?让我们回顾和分析D卡仿真与反制的“道高一尺,魔高一丈”的历史:

为了实现D卡仿真正版卡的目标,在早期的AVR家族的Fun卡程序就有了仿真6805的程序。这部分的程序的目标就是让D卡在遇到EMM指令时,能像正版卡一样,完成相同的程序操作以及能执行更改卡内部或外部EEPROM等功能。

可是我感到这是Fun卡程序中最不完整,存在最多问题的程序。

我想象,编写6805程序仿真的黑客高手,写到I/O指令的仿真程序时,一定感到束手无策,无法再写下去了!

好在那时反制还没有出现,就是有,也十分简单,因此,老的D卡中不成样子的6805仿真程序实际上并没有用上,而后续的8515和黑卡类型的D卡干脆将这部分程序省掉了。Atmegal28的D卡因为程序内存很大,仍然保留了6805的指令仿真程序,但在历次反制中,与8515和黑卡的表现相比,并无特别出色之处。 (注:6805指令是EMM指令针对的CPU的指令,ROM10与ROM11的CPU-ST7可直接执行该指令集。关于ECM,EMM,以及携带6805指令的FA、FB等指令的知识,朋友们可自行参看StundGuy的《N1 FAQ》、我的其它文章及其它资料)。

杂谈之五

学习和搞嵌入式控制器开发的人都用过仿真器,如“伟福”系列的MCS-57的仿真器等。大家一定知道硬件仿真与软件仿真存在一个本质区别,即I/O功能的不同。一条取端口引脚值的指令就足以区分出是硬件仿真还是软件仿真了。硬件仿真可以真实地取到引脚上的实际输入,而软件仿真得到的只能是不会变化的内存仿真值。

利用这个原理实现的反制程序分为两部分,前面的部分通过I/O端口的访问,区别出是真的硬件存在,还是软件仿真;后半部分对非法的仿真卡简单地返回主程序,不能解开Key0/Key1;对正版卡,则修改Key0/Key1,使之正确,然后返回主程序并保存Key。保存的Key0/Key1用于ECM的解码。

图1是利用I/O端口来区别正版与D卡的EMM,用在Dream TV的2004和2005年初的几次反制中。

杂谈之六

由于D卡的成功,尤其是带AU(自动换Key0/Key1)的D卡程序的广泛扩散,卫视正版服务商感到了巨大的压力,逐步开始采用种种反制手段,让D版的AU卡失效。

从我搜集的历次反制EMM中的方法中,可以将反制归纳为两种,一种是从硬件或软件上区别D卡与正版卡,从而产生条件分支指令,使D卡仿真6805的程序失效;另一种是调用D卡中不可能有的,只有正版卡硬件才具备的MAP子程序,使D卡无法执行正确的程序。

在我的“杂谈五”中已经介绍了一种从硬件端口上区别正版卡与仿真卡的反制。从这个实例中我们可以看到,要在不同的硬件基础上,用一种CPU来仿真另一种CPU会必然碰到的无解难题。1020类型的卫视接收卡,通过PC微机的80×86的CPU来仿真正版卡的6805-CPU,虽然速度更快,内存更大,但仍然无法解决端口旧指令的仿真问题。从端口读取的是真实硬件与卡的外部条件产生的状态,这种状态事先不可预制,变化规律难以预测,不是软件仿真可以预先确定的。单从这一点就可以看出,采用仿真6805-CPU指令的做法的不可能性了。

使用硬件端口区别正版卡与仿真卡的反制方法,由于具有特殊性能的端口数的限制,因此不可能有多种变化,一旦hacker知道了反制的EMM结构与原理,很容易就可以避开端口判断的指令,直接转到修改Key0/Key1部分。这虽然并不是6805指令的直接仿真,只能算功能仿真,却可以使已知反制失效。我所了解的这类反制并不多,感觉它不能多次使用,一旦规律被摸透之后,反制就很可能起不了作用了。

杂谈之七

以下介绍根据正版卡特有的机器指令代码,让正版卡能进行解码,而没有正版卡程序的仿真卡无法正确解码,从而获得Key的EMM思路。

按照道理,D卡使用的是AVR或其他类型的CPU,“正改卡”中的程序与正版卡也不相同,照理这些卡中都没有正版ROM10/ROM11卡的程序。因此,用只有正版卡才有的特定机器指令代码作为密钥来解密Key0与Key1,自然是十分聪明的反制措施。

该反制的EMM以前146DreamTV可能曾使用过。目前香港有线又重新启用,大致在一个星期的七天中,有两天使用本类EMM,另外六天使用另一个“超级MAP”程序。

这种反制的具体思路是:

下行的EMM中携带的Key0与Key1是经过加密编码的,不能直接使用。解开它们需要的密钥“种子”(即产生密钥的原始数据)的地址由下行的EMM给出。注意!EMM中并没有给出密钥“种子”,而是给出了它们在正版ROM10/ROM11卡程序存储区中的地址,这个地址是随机数,不同的Key0/Key1,地址就不同。它的值总是大于$4000,防止取到ROM10卡低端的无法读出的无意义内容。反制设计者设想,D卡或“正改卡”无法获得正版卡的内部程序,因此,即使给出了地址,D卡也无法取得正确的机器码作为密钥的“种子”,自然也就无法生成密钥,解开Key0/Key1了。

对于正版卡,按照给出的地址,取到16字节的机器指令代码,经过类似计算Hash效验的方法,产生正确的密钥,再对Key0/Key1进行DES编码运算,就解出正确的Key0/Key1了。

图2是利用正版卡程序随机地址处的机器指令码作为解码Key0/Key1密钥的EMM。该EMM取自前一段时间香港有线的Logging。

杂谈之八

“杂谈七”介绍的“利用正版卡程序随机地址处的机器码作为Key的解码密钥”的EMM反制方法非常厉害,曾难倒了一大批的高手。

对比一下我在“杂谈五”中给出的EMM与“杂谈七”介绍的EMM,就会发现,“杂谈五”中给出的EMM是一种简单的反制,只要知道了正确的Key0/Key1,再经过认真分析和思考,就会明白其反制原理并找出解出Key的方法,目前DreamTV的反制都属于这类简单反制;但“杂谈七”介绍的EMM是一种高级和复杂的反制,即使知道了正确的Key0/Key1,也难以得知其反制的原理与找出解Key的方法,目前香港有线和国外一些N1系统采用的是这类反制。

由于Nagra 1的反制集中在低级和高级的两类难度上,所以我怀疑这是两类不同水平的技术人员的作品。低级难度的反制是卫视服务系统内部技术人员的手笔,而高级的反制则是Nagra系统研制人员的亲手杰作。

两种级别的反制也将国内修改、编写D卡程序的高手分成了两类:有一些能写一点程序应付低级反制的,往往是采用“头痛医头、脚痛医脚”的补丁程序,可以对付目前146-Dream刊的反制;只有少数高手中的高手具有整体编写程序以及仿真MAP功能的能力,能采用更合理的对抗策略,能研制出复杂程序和新类型的D卡,最终可以对付高级难度的反制。

对付低级反制写出对抗程序的时间大约是数小时到几天,而对付高级反制找到方法并写出程序的时间往往需要数个月之久,而且还需要国内外hacker们的协同配合。我在2005年9月开始写一点D卡程序,只能应付低级的反制。经过不断努力到2006年2月才逐步能对付高级的反制。

国内高手中的高手人数很少,都是单兵作战和埋头苦干的,与其他高手之间一般互不交流,更不会在网上介绍关键技术,生怕自己辛辛苦苦积攒的知识被别人学了去,失去了优势,就像俗语所说的:“教会了徒弟,饿死了师傅”。

在2006年初,我注意到,有一个一直跟着我的帖子学习的朋友,担心下次反制时我不再出手,就号召大家一起来研究黑卡程序。当时响应者寥寥无几,最后他奋起自己努力,从反汇编和分析我的“无等待版”程序入手,终于成为具有自己编写D卡能力的高手。成为高手之后,他也隐身,不再传递信息给他人,更不会将他辛辛苦苦研究的程序开放给朋友。因为他很不喜欢“种树者寡,摘果子者众”的吃现成饭的心理。该朋友的成长有两点普遍规律:一是善于学习和勤于思考的朋友最终有望成为高手;二是成为高手之后一般会沉潜下来销声匿迹。

朋友们恐怕不能怪这些高手怀有这样的心态,扪心自问,哪一天自己通过努力好不容易成了高手,会不会公开你掌握的关键技术呢?如果自己做不到,怎么能要求别人大公无私地做到这点呢?

杂谈之九

“杂谈七”介绍的“利用正版卡程序随机地址处的机器码作为Key的解码密钥”的EMM反制方法十分成功,但它采用程序的机器码作为解开Key的密钥,可能会出现以下几个问题:

1、如果卫视系统历史较久,在用的卡可能有几种,那么可能产生内部机器指令码不尽相同的问题;

2、如果卫视系统想要更新程序,也可能存在部分尚未更新程序的正版卡,同样会产生内部机器指令码不相同的问题。这个问题还可能阻止正版卡通过下行信号进行的升级:我们设想一下,正版卡用户中,有的人天天看卫视节目,他们的卡顺利升了级,而另一部分人外出,卡很久都没有使用了,刚回来想看卫视,结果因为卡的程序不对,无法收看,肯定对卫视服务商大发雷霆。在用户是上帝的外国,卫视服务商对可能引起用户的怒气的行为一定是很忌讳的。

3、对该反制最致命的打击是,可以设法读出正版卡作为密钥的那一部分程序机器码,通过在D卡的硬件上安排外部EEPROM,存储量有64kB、128kB、256kB等,将正版卡作为密钥的程序机器码全部保存起来,解开Key时,照样可以从外部EEPROM中取到与正版卡一样的解Key的密钥,来对抗反制,使该方法失效,这是该类反制的终结者。

大家一定都曾经对Fun卡为什么要有外部EEPROM,它的作用是什么,为什么我给出的程序不必写外部EEPROM等等之类的问题存在种种疑惑不解吧。

现在应当清楚了:

Fun卡的外部EEPROM原来存的主要是正版卡的程序代码(当然还有其它一些辅助数据),让D卡作为解开Key的密钥查找使用,以对抗该类EMM的反制。这是以往D卡设计外部EEPROM和必须写入外部EEPROM数据的原因。

目前146D卡的程序不用写外部EEPROM,是因为DreamTV放弃了(或还没有采用)该方法,因此146D卡就不用外、部EEPROM来保存正版卡的程序了。我所看到的各种黑卡者瞄计了外部EEPROM,但都没有焊上或装上元件,如果DreamTV启用这类反制,将会使社会上很大一批黑卡不能使用。

目前用到该反制的香港有线和其它N系统,还有必要使用外部EEPROM来保留正版卡的程序机器码,作为解Key的密钥。在Atmega128等程序内存很大的AVRCPU卡中,已经直接将正版卡的程序作为ROM常数,保留在程序存储区中了,可以不必再放在外部EEPROM中。

杂谈之十

经过了利用软件仿真在I/O功能上的区别进行的反制和利用正版卡指令代码作为密钥进行的反制之后,目前几个在运行的N1系统(146的DreamTV与其它N1卫视,香港以及国内一些地方的本地有线数字电视等)纷纷进入了使用MAP功能来进行反制的阶段。

使用正版卡中的MAP编码懈码协处理器进行反制,是正版卡在设计阶段就预留的终极反制杀手。可以看到,正版卡设计者防范于未然,预估到终有一天,第一道门(ECM与EMM的解码)将被攻破,预先留好了第二道门做最后的防守。未雨绸缪,使我不得不佩服这些设计者的智慧与远见。

在深入讨论MAP功能及其仿真实现之前,让我们先说说什么是收视卡防守的第一道门与第二道门?

收视卡是防止非法收视的守门员,在卡中设计了多种加密方法,最主要的有解决收视功能的ECM和自动换Key的EMM的解密,它们的解码是第一道门。ECM与EMM的编码与解码使用的虽是不同的方法,但都是固定不变的标准方法。不同的N1系统仅仅是编码懈码采用的数据有不同而已。有的卡可以解开多个N1系统,该类卡是按照下行的ECM或EMM的系统标识(如146 DreamTV为4E和4F,香港有线为94和95等)选择不同的数据,而运行的程序是基本相同的。

ECM的编懈码采用DES与EDES算法,其原理早已公之于世。编/解码所用的S_Boxes数据也已经公开,并且在不同的系统中固定不变。与标准的DES相比,N1系统的DES只是多了对字节进行反序排列的的操作而已。ECM使用的VerifyKey等数据,通过后门密码进入正版卡保留的数据空间,可以读出这些关键的信息,加上BoxKey等信息,只要能获得当前的KeyO/Keyl,就可以配合IRD解开解密收视用的控制字(Control Word),可以正常收看卫视节目。

ECM的解码可以解决收视的问题,但还需要手动输入Key0/Key1。如果要像正版卡一样自动换Key即所谓的AU,就需要能解开EMM,并能正确地找到并保存Key0/Key1。与ECM的解码相比,EMM的解码要复杂的多!经过hacker的努力,EMM的RSA编码原理已经完全弄明白,所需的PK.VK等数据也可以通过hacker的软件和ROM10/ROM11卡的后门读出,再算 出 N1,P,Q,EP,EQ,IQModP,IPModQ,PPrimA,QPrimA等方便编程的数据,就可以顺利解出EMM。

收视卡的第二道门是对EMM中Key解密的防守。它的方法没有固定的套路,可以任意变化。N1的设计者安排了可以通过EMM中携带程序的执行,以及正版卡通过下行信号更新的EEPROM中补丁程序的运行来解码。正版卡设计者可能料到攻破第一道门是迟早的事,于是第二道门的防守就成了最后的防线。前面几篇“杂谈”介绍的几种对EMM中的Key0/Key1进行再加密,就是在第二道门上的防守。它的思路是:当EMM解开后,如果其中的Key0,Key1是经过加密的,D卡仍然无法得到正确的Key。

国内早期的D卡程序是移植国外hacker的,针对想收视的系统,修改了相应的数据就可以实现本地化。由于要得到正确的Key需要的解码方法没有固定的套路,hacker不可能事先料到,总是要反制后分析它的原理,再更新部分D卡程序,进行对抗和补救。一般人没有自己编写D卡程序的能力,即使有写卡器掌握了写卡方法,但程序又难以得到,这些麻烦会迫使许多人放弃D卡,转而加入使用正版卡缴费收视的行列。

(未完待续,感谢www.xltvrobbs.net对本文所作的贡献)。

推荐访问: 攻防 杂谈 接收 条件 连载