零零社区|百姓的网上家园-互动交流平台!(0.0)=^_^=(00社区)

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz

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

2011-12-29 01:11| 发布者: 123456000000| 查看: 29| 评论: 0

摘要: 编者按:正版卡与D版卡的斗争,几乎成了前提领受系统年夜舞台上一场热闹的“年夜戏”。可是,对于通俗用户而言,这场戏却似乎有些深邃得高不成攀,即使就发生在自己身边,也模拟仍是令人感受云里雾里。那么,是否有一 ...

编者按:正版卡与D版卡的斗争,几乎成了前提领受系统年夜舞台上一场热闹的“年夜戏”。可是,对于通俗用户而言,这场戏却似乎有些深邃得高不成攀,即使就发生在自己身边,也模拟仍是令人感受云里雾里。那么,是否有一个路子,能让泛博并非编程高手的读者体味前提领受系统攻防年夜战中的奥秘呢?热心的HammerRed教员针对伴侣们的要求,以自身的研究实践为例,无私地撰写了一系列教学文章,为巴望根究真理的读者供给了一条循渐进的进修之陆怪司刊将在此后的几期杂志中持续刊载该系列文章,与读者们配合分享试探的喜悦。

杂谈之十七

为了研究正版卡的反制,出格是某地有线类型的高级反制,不仅要研究带Key的EMM,还要关注和跟踪改削EEPROM的EMM。一向关注这些EMM动向的伴侣会获得正版卡改削后的EEPROM代码,它们一般以*.BIN的形式给出。伴侣们打开装有PC仿真卡的微机轨范目录,可以在MyTheatre\Plugins\Nagra\目录下看到不少的这类*.BIN文件。

如不雅概念到了ROM卡的*.BIN文件,就可以体味到正版卡在EEPROM中插手了哪些新补丁轨范或采纳了什么反制体例。

研究和体味的第一步是反汇编。反汇编是将机械指令或数据代码转为源轨范的一种操作,它是汇编过程的反向操作,是反向工程的一种手段。

一般开发产物,自立编写源轨范后,首要的工作是汇编,很少反汇编。但在我国卫视界破解的伴侣中,却经常进行反汇编。

原因之一,是因为水平不够,无法自编源轨范,只好用国外或国内高手赠予的方针代码经由过程反汇编来转为源轨范,再进行进修和改削,这成了需要的轨范。

原因之二,是研究正版卡的反制体例与事理的需要,必需经由过程反汇编将EMM或EEPROM中的机械码转为易读的源轨范,再进行剖析和研究。

汇编是将源轨范转换为方针代码的过程,它斗劲简单,指令或数据转为机械码时都是独一的,没有二义性;而反汇编就复杂得多!因为二进制代码的多义性,即,统一个字节,可以代表多种信息,它即可以代表CPU的操作指令,又可以代表各类字符、无符号数、带符号数、浮点数和其它各种信息,是以,一般情形下反汇编是不成能返回汇编前的源轨范的,如不美观反汇编能将指令或数据正确区别开来,就是很不错的了。

伴侣们可能有疑问:要反汇编的是轨范,只要转为助记符指令就可以了,怎么还会有转为数据的问题呢?为什么难以区别轨范与数据呢?

原本,轨范是指令与数据的集结,轨范存储区中即可以存放CPU的指令,又可以存放轨范使用的数据,它们都二进制代码。在源轨范中,不仅是CPU执行的指令,也还有轨范用到的数据,这些数据是用数据界说伪指令来描述的。指令与数据汇编后发生的方针代码都是二进制数,它们可能是指令也可能是数据,单年夜二进制代码自己并不能区别出它们是指令仍是数据。

以ROM10卡的EEPROM中的部门机械码反汇编为例:

在ROM10.BIN文件中,取年夜地址$CE18起头的机械码:CD CB 21 00 96 02 70 08 A6 01。

用反汇编软件,如EMMtudio中的Disassembler,反汇编获得的源轨范(是错误的),正确的反汇编理当获得的源轨范。

对比以上两个反汇编的源轨范,就可以看出,反汇编后的源轨范分歧有多年夜!

前面的反汇编没有正确区别指令与数据,获得的源轨范将误导阅读者,使之无法体味正确的轨范思绪。

像这样的气象年夜量发生在某地有线的超级反制轨范中,正如Kid伴侣给我代码时的附言所讲:“cb与ce code内,有良多都是出格的subroutine,用emmstudio disassem时要小心一点,否则会看得不明所以……尤其是‘cd’等字眼,多是地址位置而不是opcode。早一页我post出的就是例子,自己用emmstudio时会呈现分歧结不美观。而keychange的bytedump部门全是random parameters for MAP CALL,再多例子也没分袂。”

反汇编是有志研究破解的人必需把握的手艺,它是一个再缔造的过程,需要的能力毫不比编程低,不要小看了反汇编的技巧,不信?可以自己试一试将我的轨范代码反汇编看看!

杂谈之十八

真正的源轨范的价值长短常高的,而简单反汇编获得的所谓源轨范就没有什么价值,因为这样的源轨范难以阅读,难以改削。

若何能将方针代码转换成为真正的源轨范呢?

以下是正确反汇编的根基轨范:

1、反汇编首先要选对反汇编的工作轨范DisAssembler,反汇编工具理当针对方针代码合用的CPU。乱抓一个滥暌姑,也可以反汇编,但发生出来的是莫名 其妙的工具。一般的汇编轨范都顺便带有反汇编的功能,也有专门的反汇编工具可以使用。年夜型的反汇编工具使用起来斗劲复杂,初学者可以先试简单的。

2、其次,反汇编获得的源轨范要能再汇编成为方针代码,这个方针代码必需与原先用于反汇编的方针代码完全不异,这可以磨练反汇编是否根基正确。

3、再次,反汇编获得的源轨范必需经由人工的阅读、剖析和判定,确定哪些是指令代码,哪些是数据,确定之后,再告诉反汇编工具轨范,让它做响应的措置,发生更合理的源轨范。这个轨范要一再进行,直到数据和指令正确分手为止。判定哪些是数据,哪些是指令,要有灵敏的不雅察看力。凡是,如不美观呈现“Unknown”字样,或不合逻辑的指令(如对统一个变量一再赋值等),或轨范没有进口标号等,就可以认为这部门是数据;如不雅察看序中呈现了不合理的标号,声名其它处所还存在数据被当成指令的错误。

4、最后,对这种反汇编获得的原始源轨范进行人工改削,使用有意义的变量名、常数名和子轨范名替代原本没有意义的标号,加上具体的注释,最终才形成真正的源轨范。这一步是一个再缔造的过程,是反汇编中最难和最关头的工作。不会编程的人,一般无法完成这一步,是以我说:“反荡编是一个再缔造的过程,需要的能力毫不比编程低!”是否真正能获得可以供改削和继续开发的源轨范,关头都在这一步。可以说,反汇编的工作,工具软件仅仅帮了我们反汇编工作的其一一小部门,仅措置了那些古板的固定套路的事,而关头的智力勾当都必需要人来完成。

良多伴侣过度相信和依靠工具软件,这是不正确的。好的工具软件可以辅佐我们,减轻不少繁琐的劳动。但工具是死的,而人是活的,是缔造性的源泉。反汇编这种需要高智力的劳动,更是纯挚依靠工具软件不成能完成的。

以下例子是取自146D卡中的部门Flash轨范,用于声名上述反汇编过程:

A.* .HEX名目的Flash轨范代码(部门)。

B.用DISAVR2.EXE来反汇编,获得的代码。

C.经由人工剖析,正确分手出数据和指令,在改削变量名,轨范进口名,加上注释,获得最后的源轨范(前面这部门是这段轨范的理论依据,来自StuntGuy的FAQ,作为注释,放在源轨范中,辅佐理解和阅读)。

在人介入之前,反汇编获得的源轨范没有什么价值;而经由过程人的智力劳动所获得的源轨范,十分便于阅读,可以肆意改削、搬移到肆意处所、增添或删除指令等,成梧诹亮发光的至宝!

杂谈之十九

要体味正版卡的反制事理,首先要反汇编ROM卡中EEPROM的轨范。ROM卡使用的CPU是ST7,它是STMicroelectronix 8位措置器家族的成员,指令系统与硬件结构向下兼容Motorola的6805指令集。

经由过程下行的旌旗灯号对ROM卡更新后,发生了新的轨范。这些新的EEPROM的信息往往以*.BIN文件的形式呈此刻网站上。我们获得后,可以选择文件中我们有乐趣的一部门信息,交给EMMStudio进行反汇编。之所以选择EMMStudio,是因为EMMStudio专门针对ROM卡,它的反汇编具有必然的智能,可以自动措置变量名、ROM卡中已知的子轨范名和特定子轨范夹带的数据等,还可以加上注释;之所以只对一部门代码反汇编,是因为EMMStudio对反荡编调入的代码长度有限制,不许可跨越4kB却$1000。

下面以某地有线反制的EEPROM轨范的反汇编为例,介绍ROM卡的*.BIN文件中部门代码进行反汇编的根基体例:

按照EMMStudio解开的EMM,我们可以看到某地有线下行的EMM中夹带了这样的一段轨范。

年夜中我们知道,一切的关头都在$CE02这个子轨范中,必需要反汇编存在ROM卡的EEPROM中的地址为$CE02起头的轨范。

1、将含有$CE02轨范的*.BIN文件读入某种编程器的缓冲区,缓冲区地址年夜$0000起头。记住ROM10/ROM11文件的*.BIN文件是年夜$C000地址起头的。

2、计较保留文件的起头地址=需要反汇编的轨范地址的起头地址-$C090。如,但愿反汇编$CE02起头的子轨范,则计较出的保留文件起头地址=$CE02-$C090=$0D72。

3、用编程器保留文件的功能,保留一份文件,文件类型为*.BIN,保留的缓冲区地址为计较获得的起头地址,文件长度为$1000。注重:EMMStudio的DisAssembler只接管$1000的文件。例,保留文件名定为:CE02.BIN,起头地址为$0D72,长度为$1000。

4、进入EMMStudio,点击DisAssembler功能,点击“Extract BSs Code From EEPROM Image...”,选择在第3步中保留的文件名,将Initial Addresses和Code Base都改为轨范的真实地址,如在上例中,地址都改为$CE02,选择ROM卡的类型,如ROM10,最后点击“DISASSEMB-LER!”,完成反汇编。

5、当然,非凡的子轨范,如后面跟年夜数据的,反汇编可能不正确,需要人工判读,并采纳非凡的措置。

杂谈之廿

前几篇“杂谈”谈了不少反汇编的体例,经由过程反汇编可以阅读轨范,体味不少轨范的事理,这种体例对于可以获得方针代码的气象,是十分直接和有用的体例,但对于MAP功能,却力所不及,因为MAP轨范的代码无法获得!

对于MAP功能的剖析,只有经由过程不竭挪用MAP的某个功能,用分歧的输入数据“喂”给它,不雅察看它的输出年夜而判定出MAP完成的是何种操作。

因为MAP协措置器在ROM卡的内部,是以要实现不竭测试MAP功能的操作,需要非凡的体例:

1、需要编写一段非凡的近似“Trojan Horse(木马)”的轨范(我称为“MAPLogger”),该轨范的功能是在EEPROM中记载MAP执行前ROM卡有关内存的数据,然后挪用MAP功能,执行后再在EEPROM中记载MAP挪用后ROM卡有关内存的数据。

2、改削ROM卡EEPROM中的部门轨范,用MAPLogger的挪用庖代原先MAP的挪用,让MAPLogger轨范起浸染。

3、将特定的EMM发送给ROM卡,让它执行EMM中的轨范,触发引起挪用特定的MAP Call,这时,我们匿伏在其中的MAPLogger会起浸染,记实下我们但愿看到的数据。

4、将ROM卡的EEPROM区读出,掏出MAPLogger记载的数据,供剖析和研究。

这种嵌入式Logging的体例是Cracker们研究的常用手段。

对于ROM卡而言,需要的工具与软件有:

1、Phoenix写卡器,写卡器的晶振频率理当为3.68MHz。

2、NagraEdit软件。

3、XNCS软件。

写卡器的浸染是配合NagreaEdit和XNCS软件,完成以下使命:

1、往ROM10卡中写入*.BIN文件。

2、发送EMM或其它信息。

3、年夜ROM10卡的EEPROM中读出记实到的信息。

MAPLogger轨范由某个高手编写成功,我反汇编加上注释。

MAPLogger的嵌入与使用体例。

这个工作要直接针对*.BIN文件改削,最好要有编程器,调入原本的*.BIN文件,查镇静位到要改削的处所,直接将十六进制数改到缓冲区中,存盘就获得了嵌入MAPLogger的*.BIN文件。


路过

雷人

握手

鲜花

鸡蛋

相关阅读

发表评论

最新评论


Archiver|手机版|小黑屋|00社区

GMT+8, 2023-1-31 12:06 , Processed in 0.043303 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部