“小毅,你怎么可以轻易放弃这局呢!”郑洁有些“恨铁不成钢”,她一个劲的在帮他争取,却没想到他自己倒大方地放弃了。
苏兰上前拉住郑洁的手,安慰道:“别生气了,接着看下去吧,小颜不会输的。”
第二题还是解密题,不过不再是那种加了密码型壳的加密,而是直接给出一个加密文件,机密者将该文件还原出来。
在Windows中,有一种非常重要的文件格式──PE文件格式(pontableExecutable可移植的执行体),这是WindowsNT3.1中引入的一种新的可执行文件格式,Windows系统中的所有可执行文件都是PE文件格式的。要在Windows下研究加密解密,这种格式是必须掌握的。虽然PE文件格式的规范包含了MSDN的CD中,但是那些文档非常的晦涩,而且这些文档并没有提供足够的信息,所以有时候连开发者们往往都无法很好地弄懂这一格式。
Windows下的加密和解密说白了就是针对PE文件格式结构的相关操作,所以掌握这种格式是每个破解者的必备技能。
第二场比试开始,这次的题目很显然大大难于上一个,两人有条不紊地开始进行破解。
这个难度比较大,所以允许他们从网络上下载一些常用的破解软件,当然,如果他们自己有工具的话,也允许用自己的工具。
许毅从网络上的一台肉鸡中下载了几个小软件,有用来检测壳的,也有用来调试跟踪的。其中大部分功能和网络上流传的那些工具差不多,不过经过了他的一些相应修改,功能更为强大。例如如果其中有反跟踪代码,可能那些工具有影响,但他的工具可以无视等。
许毅用一个检测壳的小软件将那个要破解的文件加载进去,想看看,是否能够看出到底是加了什么类型的壳。
“壳”是一种很形象的说法,意思就是对软件进行保护的那一层代码。说起来,壳和病*毒在某些方面比较类似。即壳和病*毒都需要比原程序代码更早地获得控制权,这一功能可以通过在原程序的代码执行前加入自己地一段代码来实现。在文件执行的时候,壳修改了原程序的执行文件的组织结构,从而达到壳的代码能够比原程序的代码提前获得控制权的目的,并且还不会影响原程序地正常运行,从这点上来说,壳和病*毒是很类似的。
许毅编写的这个软件是根据一些壳的特征代码来识别到底是什么壳的,肃然,识别的准确度也有可能不准确,因为这些特征代码也是可以伪造的。许毅看了一下,软件中显示,“壳”是VC++的,于是许毅用另一外一个脱壳工具试了一下,发现脱出来地文件是损坏的文件,也就是说,这个壳并没有这么简单。他再经过一番努力,发现这个壳根本就是伪造的,工具脱壳并行不通,看来只有手动脱壳了。
詹姆斯的进展就比许毅慢多了,他发现,这种加密方式自己很陌生,以前根本没有接触过,脑门的汗渐渐冒了出来,看来,上帝并不是每次都这么照顾他。詹姆斯现在正被那个具有欺骗性质的壳弄得头昏脑涨,他现在还在相信这个壳是VC++的,所以正朝这方面努力着。
米歇尔教授一直在后面观察着他们两个的情况,看到詹姆斯有些手忙脚乱的样子,他微微地摇头,他和许毅相比,差得实在是太远了。光从心态上来看,他就已经输了。破解的时候,最忌讳的就是心浮气躁。破解是一个非常需要耐性的活,冷静的头脑是必不可少的,越心急进展就会越慢。反观许毅,他一步一个脚印,心平气和,井井有条。
不过米歇尔教授心中并不担心。因为这个题目的难度远远超乎大家的意料,在几周之前,他自己也肯定不能够在短时间内将其搞定,这可是他最近才研究出来的新地加密方式。米歇尔教授是想让他们都破解不出来,这样他们就又成了平局。
许毅原本对这次比试也没怎么在乎,可是现在,他改变了了自己的想法,他对这个文件的加密方式感兴趣起来,这正是许毅的性格,越难越能挑起他的斗志。
PE格式文件是按节区进行规划组织的,不同地节区一般保存的数据的作用也不相同,壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个节区,当然,既然是加密保存的,但程序在执行的时候又不能也保持加密状态,所以解密也是壳必做的工作之一。节区不只一个,如果壳是按节区加密的,那么在解密时也按节区解密,并且要把解密的节区数据按照节区的定义放在合适的内存位置。
入口点节区基地址重定信钩子函数。