注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → 硬件IT卫星电视 → 文章内容

146-南瓜系统破解/反破解笔记

作者:佚名 来源:不详 发布时间:2007-12-31 19:29:59

146-南瓜系统破解/反破解笔记

Nagravision Hacking Notes
By:Hammer Red,2005年2月16日
前言:
2005年2月4日,Dream-TV针对自动升级的盗版卡推出了新的对抗措施,使得所有用Fun卡收视146卫星的接收机都无法收视,一时间,星友们都跳了起来,尤其是那些卖接收机的人,接着无数抱怨的电话,大家都忙着到网站上寻找能继续收视的方法,查看新的Key…,又回到手动改Key的日子,几乎每日一次的找Key,写卡,真烦透了!大家又开始怀念那个自动升级的AU卡,呼唤着高手快点搞出新的146-AU。
高手在那里?迟迟不露面!(注:2005年2月16日,本笔记修改完稿时,新的146-AU已由[方士]星友首先在网上发布,是否由他编程尚不得而知,就我所知,星友[lxdhj]有特殊作用,他们的贡献大家都记在心里)。 求人不如求自己,于是不少人又开始学习StuntGuy的经典文章:“The NagraVision hacking FAQ”,真希望有一天自己也能做出AU来。我在这段时间写成本笔记,请大家指正。谢谢lxdhj,Kid(香港)和方士等星友。
EMM指令族$F0,$F3和$FA:
“The NagraVision Hacking FAQ”中的3.2.42节告诉我们:为了对抗D卡,Nagravision系统预留了“终极杀手锏”,即EMM命令$F0 (针对ROM2卡),EMM 命令$F3 (针对ROM3卡)和EMM命令$FA (针对ROM10卡)。这是EMM命令中最强大的命令族,它可以将命令中包含的机器指令放入卡的RAM中并加以执行,在卡已有的程序上添加动态补丁代码。只要能在D卡与正版卡中找的出区别,就可以对抗D卡,让D卡失效。
这条EMM指令族是可变长度的,因此,原则上代码的长度可以随意,但实际上代码占据的RAM在CPU的内存中地址0080H到021FH之间,其中往往还要存放其它数据,如新的Key等,所以代码的长度并不长,如目前的EMM实际代码长度为25H。这段代码中都要包含一段子程序,它的作用一般是查找正版卡与D卡的区别,并产生分支:如果发现卡是正版卡,就分支转移到一段修改Key的程序,将通过卫星传下来的Key进行再修改,改成正确的Key;如果卡不是正版卡,那么子程序返回,不修改Key,这样Key就是有错的,无法用于解密收视。
这种设计是十分聪明的,可以防止D卡通过屏蔽本指令的执行,来达到对抗反制的目的。因为卫星通过EMM指令42H或43H发来的Key本身就是不正确的,例如,目前的8字节Key中就有一个字节是错误的字节,它的位置和数值都是随机的。当然也可以有多个错误字节,但没有什么意义,一个错字节和多个错字节并没有本质区别,也不会增加解密难度,因为可以改正一个字节当然也就可以改正多个字节了,还要增加代码长度。如果D卡屏蔽了本指令,那么本指令中改正错字节的那部分代码就不会执行,D卡就得不到改正的Key!
按照Nagravision收视卡的设计结构,这部分的指令总是从地址0081H开始,用于更新EPPROM。按StuntGuy的说法,程序中先检查特殊的“序号字节”,在ROM3卡中,这个序号字节在E050H处。新的EMM指令检查的内容已经改变,以反制D卡。

本次Dream-TV反制方法:
本次Dream-TV反制D卡的EMM指令可通过Logging和解码得出。
(注:2005年2月15日由星友[lxdhj]提供的EMM代码):
0081: AE 03 ldx #$03 ; X寄存器用于比较次数的计数,最多3次
0083: B6 05 lda $05 ; A取05H号端口寄存器内容
0085: B1 05 cmp $05 ; A是否与05H号端口寄存器相同?
0087: 26 05 bne $8E ; 如不同则转到008EH
0089: 5A decx ; 如相同则计数器X减一
008A: 27 10 beq $9C ; 如三次比较都相同则说明是D卡,返回
008C: 20 F7 bra $85 ; 如未比较三次,再回到0085H进行下一次比较
008E: 13 07 bclr1 $07 ; 如比较不同,则将07H的1位和7位清0
0090: 1F 07 bclr7 $07 ; 07H是随机数发生器的低字节
0092: B6 05 lda $05 ; A重新取05H内容
0094: B1 05 cmp $05 ; 再作比较
0096: 1E 07 bset7 $07 ; 将07H的1位和7位置一
0098: 12 07 bset1 $07
009A: 27 01 beq $9D ; 如相同则说明是正版卡,转到009DH
009C: 81 rts ; 发现是D卡时从这返回,没有改正错误字节
;----------------------------------------------------------
009D: A6 8E lda #$8E ; A取Key中应当修改的字节的正确值
009F: B7 BA sta $BA ; 存入Key应当修改的字节地址处
00A1: A6 26 lda #$26 ; A取立即数26H
00A3: CC 6B 01 jmp $6B01 ; 正版卡返回处,错误字节已改正,可解开节目
;----------------------------------------------------------
00A6: 83 4F 01 42 05
00AB: 55 31 FB 65 4A 6A DA AA ;原始Key 00的8个字节
00B3: 42 85
00B5: 37 B3 D1 4D E6 44 7D AE ;原始Key 01的8个字节,注意[44H]
注:15日更新Key01,正确的Key01为37 B3 D1 4D E6 8E 7D AE,本EMM指令的错误字节位于00BAH处,内容为44H,正确的内容为8EH,通过从009DH开始的指令修改。

对抗反制的方法:
通过以上程序,可以找出新的对抗反制的方法:在6B01H处应当加入代码,执行:从009EH处取Key的正确字节,存入由00A0H处内容决定的RAM(该内容确定了Key中错误字节的地址)中。由于我没有源程序,也没有反汇编工具,所以我不知道实际上的146-AU是用什么方法,希望能得到指正。由于EMM指令可以变化,可以看出,各方法都不会是一了百了的方法,所以终极解决方案可能永远都不可能得到,只有将“道高一尺,魔高一丈”,和“猫捉老鼠”的游戏继续玩下去。

存疑问题:
本笔记到今天才发表的原因之一是我尚搞不懂EMM中如何判断出正版卡和D卡的区别,它们之间的区别与随机数发生器有什么关系?恳请高手指点!


--------------------------------------------------------------------------------
 
  • 打印文档
  • 推荐好友
  • 返回顶部
  • 增大字体
  • 减少字体
关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved