本书是帮助应用程序员和系统程序员理解调试过程的指南,揭示了各种调试器的实用使用技巧,说明了如何操作调试器以及如何克服障碍和修复调试器,介绍了黑客利用调试器和反汇编器来寻找程序弱点和实施攻击的方法。通过本书,程序员将学会如何弄清楚计算机系统内部的结构、如何重建没有提供源程序的程序的运行算法、如何修改程序以及如何调试驱动程序。本书还详细介绍了在Windows和UNIX操作系统中调试应用程序和驱动程序的方法。对于各种调试技术,书中都给出了带有详尽解释的源代码。如果你是具有C/C++或者Pascal/Delphi语言实际编程经验的程序员,那么本书就是使你的技术升华至一个新的台阶的宝典。
第1部分 调试工具入门\r\n 第1章 调试工具简介\r\n 第2章 在UNIX环境中进行调试的特性\r\n 第3章 模拟调试器和仿真器\r\n 第4章 用BoundsChecker进行应用程序分析\r\n第2部分 调试工具入门\r\n 第5章 保护机制简介\r\n 第6章 熟悉调试器\r\n 第7章 IDA崭露头角\r\n 第8章 注册保护机制之道\r\n 第9章 散列及其克服\r\n 第10章 常见的用于演示版的保护机制\r\n第3部分 反调试技术\r\n 第11章 反调试技术简介\r\n 第12章 各种各样的反调试技术\r\n 第13章 UNIX特有的反调试技术\r\n 第14章 可自我修改的代码\r\n 第15章 使用隐含的自我控制来创建不可破解的保护\r\n 第16章 智力调试\r\n 第17章 软件保护\r\n 第18章 如何使你的应用程序更可靠\r\n 第19章 软件测试\r\n第4部分 应用程序和操作系统的严重错误\r\n 第20章 应用程序和操作系统的严重错误简介\r\n 第21章 战兢苟活还是出死入生\r\n 第22章 如何利用内转储\r\n第5部分 PE文件\r\n 第23章 PE文件格式\r\n 第24章 PE文件中插入和删除代码的技术\r\n附盘说明
当电子工业出版社的郭立女士委托我翻译这本《黑客调试技术揭秘》时,我内心是有几分踌躇的。因为我虽然编了多年程序,但是却从来没有做过一天黑客。我怀疑我是否有兴趣将这本600多页的“黑客书”翻译出来,也怀疑这本书对我这样的程序员是否有帮助。但是在走马观花地浏览了一下这本书后,我就发现我被这本书的书名欺骗了。本书实际上是一本帮助应用程序员和系统程序员理解调试过程的书籍。当然,本书名为“黑客”,也不是为了哗众取宠,而是为了突出本书的写作方式是从“黑客”的角度来看待程序(特别是保护机制)的弱点,介绍了黑客利用调试器和反汇编器来寻找程序弱点和实施攻击的方法,提醒程序员应该如何克服程序的弱点、如何抵御“黑客”的各种攻击。但是,正如作者所言,本书既不是一本教授黑客技术的手册,也不是一本关于防御黑客的保护指南,而是一本探索商业程序的保护机制以及学习调试器的工作原理和使用方法的指南。
本书结合带有详尽解释的源代码,揭示了各种调试器实用使用技巧,说明了如何操作调试器以及如何克服障碍和修复调试器。通过本书,程序员将学会如何弄清楚计算机系统内部的结构、如何重建没有提供源程序的程序的运行算法、如何修改程序以及如何调试驱动程序。本书还详细介绍了在Windows和UNIX操作系统中调试应用程序和驱动程序的方法。
本书的作者Kris Kaspersky是一位经验丰富的“代码挖掘者”,他解决了许多与安全和系统编程有关的问题,包括编译器的开发、优化技术、安全机制研究、实时操作系统内核的创建、软件保护以及反病毒程序的创建等等。他还是一位著作颇丰的技术作家,出版了大量涉及破解、反汇编和代码优化的文章和书籍。
译者通过翻译本书获益匪浅。我编写程序多年,也使用了多年的调试器,但是本书讲述的调试技术中有许多都是我过去没有接触过,甚至没有听说过的。本书的许多内容也使我有恍然大悟之感,解决了多年来的疑惑。本书还有一些内容使我有胆战心惊之感:我们习以为常的许多代码原来都是极不安全的,可能被黑客利用来攻击我们的系统。幸运的是,我从本书中了解到了这些知识,在将来的编程中就能充分利用这些调试技术、有意识地避免存在问题的编码方式。因此,如果你是一名程序员,本书将有益于你编写出健壮安全的程序;如果你对破解程序感兴趣,你将从本书中学到发现程序的弱点并通过这些弱点来破解程序的方法(但是千万不要有违法的行为)。
由于译者的水平所限,翻译这样的一本集“黑”(黑客或者破解者)“白”(应用程序员或者系统程序员)两道技术于一体的技术指南,真是一种挑战。译文中肯定存在错误和疏漏,敬请读者批评指正。
感谢电子工业出版社博文视点资讯有限公司为本书的出版付出的努力。特别感谢本书的责任编辑顾慧芳女士,她细心地改正了许多译者“脑是笔非”的谬误,她的努力和高效使本书得以快速出版。
周长发
2006年4月
Kris Kaspersky是一位技术作家。他是《黑客反汇编技术揭秘》、《代码优化:有效使用内存》和《CD破解揭秘:防止未经许可的CD拷贝的保护技术》等书籍,以及大量涉及破解、反汇编和代码优化文章的作者。他解决了许多与安全和系统编程有关的问题,包括编译器的开发、优化技术、安全机制研究、实时操作系统内核的创建、软件保护以及反病毒程序的创建,等等。
许多聪颖敏锐的人本能地渴求破解疑难。他们不辞辛劳地探索周围事物的本质,而不是刻意地进行破坏。只要放眼四顾就能发现:原子科学家分裂原子,分析家将分子分解为更小的分子,数学家积极地使用分解法。可是却没人责备他们!
破解并不等同于破坏。破解是本能的好奇心和渴望了解周围世界的一种行为表现。反汇编清单、机器指令、SoftIce的黑屏等都让我们想起已成为过去的MS-DOS时代,它们至今依然引人入胜、充满魅力。除此之外,就是满世界的隐藏机制和保护代码。不要在地图上寻找它们,它们的世界仅仅存在于打印出来的纸片上、在向最令人着迷的职位敞开的技术手册中,以及在屏幕前度过的许多不眠之夜里。
本书既不是一本讲授破解技术的手册,也不是一本关于防御黑客的保护指南,诸类书籍已经多如牛毛。确切地说,本书是一个代码挖掘者的“旅行笔记”。读者将检验英特尔的编译器,探索商业程序的保护机制,并且学习调试器是如何工作的以及如何熟练地使用它们。一般而言,只要你没被吓得马上合上这本书并把它扔到一边的话,你就会学到许多新颖有趣的东西。
关于作者
笔者是一个不修边幅的年轻人(写作本书时28岁),既不关心周围的事物,也不照顾自己的身体,独自踯躅在机器代码丛林和技术规范的迷宫中。本人不善交际,像食肉类啮齿动物一样,过着一种与世隔绝的生活,除了偶尔出去看看星星之外,从不轻易离开自己的老鼠洞。个人生活很不幸(而且似乎也不会在将来变得幸运些),因此从早到晚惟一消磨时光的方式就是把自己完全沉浸在工作中。
从孩提时候(也可能更早,只是我记不起来了)开始,我就沉迷于计算机。主要的研究领域包括逆向工程(反汇编技术),寻找现有保护机制的弱点或漏洞,以及开发自己的保护系统。然而,计算机并非是我的惟一爱好,甚至也可能并不是我的主要嗜好。除了总是关心计算机硬件和漫游在保护代码的丛林中之外,我还一直着迷于夜晚的天空和我的望远镜。在最近一段时期,我的时间更多地花在写作上,用于阅读的时间反而较少。我并不是简单随意地选择破解作为自己作品的主题的。选择这类主题是源于本人对计算机“为什么会如此”的本能的好奇心,以及对使用撬棍和锤子(当然这是一种比喻)来破解事物的渴望。是否可能通过其他的方式来理解选择这一主题的理由呢?
如果说黑客是沉迷于探索宇宙的人,那么我就是一个黑客。
本书的写作目的和读者对象
本书原本是为专业人士量身定做的。然而,发表在因特网上的几个试读章节并未吸引专业人士的兴趣。他们不喜欢用简单的语言来阐述复杂的问题,认为这样水分太多。但是刚入行的代码挖掘者们并不赞成他们的观点,真可谓仁者见仁,智者见智。自然,每一个读者都要求书的格式最便于自己阅读。但是,要满足这种愿望是不可能的,一本书不可能同时满足不同类型的读者的兴趣(特别是对一本并非简单易懂的书来说,更是如此)。
我选择破解新手作为本书的最广泛和最急需的读者群。专业人士并不需要这类书籍。许多专业人士告诉我,他们仅对分散在全书不同章节中的若干页内容感兴趣,因此他们仅会粗略地翻阅本书。这类话并未使我觉得难受!相反,他们帮助我更好地了解本书的定位和目标。
“专业人士”和“新手”只是一种习惯性的叫法,而且许多的新手都可能在自己的专长上轻易地击败某些专业人士。真正的专业人士是很少的。因此,阅读本书之前不可能知道是否能在本书中找到你所不了解的知识。而阅读本书是让你知道这一点的惟一方法。
本书并非为黑客而写!虽然书中描述了攻击某些众所周知的系统的方法,并将它们看成是现成的完整技术,但这些只是信息,而不是行动的系统指南。没有人可以豁免恶意破坏计算机系统行为的法律责任。因此,在应用新学到的知识之前,你应该先阅读刑事法典并认识一些律师。在自由民主的社会中,法律仅仅表明为一种描述彼此之间关系的系统,这种系统早已形成体系,并且保护大多数人的利益。然而什么是大多数人的愿望呢?你说对了!就是面包和马戏(译者注:泛指统治者为了笼络人心所施展的一种小恩小惠的手段)。对于面包,每一个人都或多或少地明白其意义。但是马戏的情形就要复杂一些。音频和视频工业在不断地悲惨衰退,在这种背景下,反对侵犯版权运动的规模是十分可怕的,甚至侵害了个人用户和整个世界的利益。有些信息安全领域的工程和科学研究被部分或者完全地禁止了。用户甚至被剥夺了用反汇编器查看卖给他们的产品的代码的权利。可看不可摸!可摸不可尝!可尝不可咽!信息就如同空气和水一样,是公共资源。我们的思想和观点,虽然我们切实地认为它们是“我们自己的”,但是实际上都是很久以前就已经创造和发表的一些思想和观点的组合。新颖的发明和聪明的观点都是在理解了曾经读到和听到的知识之后产生的。
研究保护机制的黑客和开发人员并非只是对手,他们也是同事。如果你认为黑客是一种寄生虫,他们寄生于建造高质量的保护机制的程序员的能力缺陷,那么你也必须承认程序员也是寄生虫,他们寄生于用户没有能力自己编写程序!
破解与编程具有许多的共同点。创建高质量且可靠的保护机制需要:(1)低级语言编程技巧;(2)协调运用操作系统、驱动程序和设备的能力;(3)具备如下知识,即现代处理器的体系结构、特定编译器的典型代码生成特征,以及所使用的程序库的整体结构。在这种编程级别上,编程和破解之间的差别是非常小的,甚至很难在它们之间划出明确的界限。
首先需要指出的是,与其他的软件组件一样,每种保护都需要仔细且全面的测试,以评测其可用性。这里所说的“可用性”可以理解为它抵御合格的用户使用破解工具(加密盘拷贝软件、虚拟设备仿真器、窗口和消息侦探程序、文件和注册表监视程序,等等)来试图攻破它的能力。保护质量并不是用强度来评测的,而是以实现保护机制所需的人时(译注:即一个人一天完成的工作量)与攻破它所用的人时之间的关系来衡量的。经过长时间的运行,任何保护系统都可被攻破,因为破解只是时间、金钱、黑客的水平和努力的综合结果。然而,高水平的保护系统必须防止被轻易破解的可能性。下面的实例有助于理解这一论断:考虑使用坏扇区(在每一种存储介质中都是罕有的)来实现的保护机制,如果它因为错误的EDC和ECC字段而不能识别这类粗糙的仿真,那么该保护机制将是无效的。另一个例子是:通过创建能仿真源盘结构所有特征的虚拟CD-ROM驱动器,将实现利用CD螺旋形轨迹的几何特征来实现的保护机制,即使其实现不存在漏洞。注意,即使你不是一个黑客也能够做到这一点,只要运行自动破解这类保护机制的程序Alcohol 120%就足够了。
保护机制的设计错误会使其开发人员付出惨重的代价。但是,没有人能保证可以避免这类错误。试图在软件保护的开发中应用科学方法是可笑的。黑客们嘲笑学术型的工作。实际上,任何的此类保护都可以无须过分花费心思地在15分钟内被攻破。下面是一个粗略而直观的例证:任何人使用即便是最古老的飞机(就像WDB这类飞机)都可攻占防守策略上没有考虑防空的堡垒,更不用说是使用战斗机和轰炸机了(SoftIce像战斗机,而IDA就如轰炸机)。
为了设计保护机制,程序员至少必须概略地了解对手的工作方法和技术工具。精通这类工具的水平不低于对手当然更好。破解程序的实际经验是非常有用的,因为这些经验能帮助程序员仔细地研究攻击方的战略和战术,有利于组织最佳的防守,还能使程序员检测并加固黑客可能攻击的目标,并将主要的可用资源集中到这些目标上。这意味着开发保护机制的程序员必须了解黑客的心理,并且开始像黑客一样地思考问题。
因此,精通了信息保护技术也就等于精通了破解技术。如果你不知道保护机制是如何被破解的,不清楚它们易被攻击的弱点,也不了解黑客所用的工具,那么你肯定不能创建出坚固、廉价且易于实现的保护机制。那些仅从保护的观点来考虑安全的书籍其缺点是显而易见的,就像认为存储设备只能写信息一样,它们没有实用性。
有一种普遍的观点认为,公开出版安全系统的漏洞弊大于利,应该禁止。换句话说,支持这种观点的人认为自己没有能力创建一种有价值的防拷贝机制,却又不愿意承认自己的错误。因此,为了不破坏第一只迷途的啄木鸟所建立的文明,就必须射杀所有其他的啄木鸟。套用一句众所周知的谚语“预先得到警报就能预先做好准备”,这里我再举个例子,考虑制药工业。假设有一个广告吹嘘一种未经测试但有效的药物,声称它包治百病,并坚持强制使用它,专业人士会如何看待这类促销?同时,局外人无权对其进行化学分析,无权公开发表调查结果,以揭露该“万能药”只不过是一种副作用很大的低质阿司匹林。哈!发表这类真相会很大程度地降低用户的购买热情,他们会更喜欢其他药厂的产品。
在这种情形中,应该谴责谁呢?是欺骗用户的公司还是揭露真相的研究人员?如果你认为这种比拟是不对的,那么请回答如下的问题:什么是保护机制的目标?这类保护机制应该满足什么样的要求?每一种技术都有它的局限和副作用,声称保护坚不可破的广告口号是荒谬的。一种媒体如果可以播放,那么它也是可以拷贝的,惟一的问题是怎样拷贝。禁止破解并不能改变什么。这样的禁令并不能阻止受利益驱使的人们进行批量非法复制受保护的磁盘之类的活动。另一方面,我们这些合法用户将遭殃。有一些人无法抵制窥视黑匣子的诱惑而试图猜测它是如何工作的,对此我们无能为力。在保护机制领域,垃圾和精品并不是一目了然的。只有依靠供应商的权威信息,或者有系统地采购各种产品,这甚至还不能保证可以从市场上获得任何有价值的保护。这是真实的!商业保护机制的质量是如此糟糕,它们甚至不能抵抗数百万普通用户中的任何一位所运行的一个自动程序复制软件的攻击。是否好意思说阻止用自动复制软件拷贝产品是任何一种保护的最低合理要求呢?一种理想的保护必须经受住装备了强大的软件和硬件破解工具的高水平黑客的攻击。高质量的保护机制是存在的
无封面