前 言
软件安全是信息安全领域的重要内容,涉及到软件相关的加密、解密、逆向分析、漏洞分析、安全编程以及病毒分析等。目前,国内高校对软件安全教育重视程度不够,许多方面还是空白。随着互联网应用的普及和企业信息化程度的不断提升,社会和企业对软件安全技术人才需求逐年上升,在计算机病毒查杀、网游安全、网络安全、个人信息安全等方面人才缺口很大,相关职位待遇较高。从就业角度来看,掌握软件安全相关知识和技能,不但可以提高自身的职场竞争能力,而且有机会发挥更大的个人潜力,获得满意的薪酬;从个人成长方面来说,研究软件安全技术有助于掌握许多系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等,如能掌握一些系统底层知识,熟悉整个系统的底层结构,对自己的工作必将获益良多。
本书以软件加密与解密为切入点,讲述了软件安全领域相关基础知识和技能。读者在阅读了本书的内容后,很容易在漏洞分析、安全编程、病毒分析等领域得到扩展。这些知识点的相互关联性,将促使读者开阔思路,使所学融会贯通,领悟更多的学习方法,提升自身学习能力。
本书是《加密解密》的第三版,此书今天能够与读者见面,完全是广大读者的热情和鼓舞带来的成果,作者深表谢意。
关于看雪学院
本书作者是软件安全主题网站——“看雪学院”的站长。看雪软件安全网站(
37eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4@1g2r3i4@1u0o6i4K6R3&6i4@1f1%4i4K6V1@1i4@1t1I4K9$3q4F1P5s2g2W2i4@1g2r3i4@1u0o6i4K6R3^5i4@1f1@1i4@1u0p5i4K6W2o6i4@1f1^5i4K6R3H3i4K6R3#2i4@1f1%4i4@1u0p5i4K6V1I4i4@1f1#2i4K6V1H3i4K6S2p5i4@1g2r3i4@1u0o6i4K6R3&6i4@1f1#2i4K6R3^5i4K6W2n7i4@1f1#2i4@1u0n7i4@1u0m8i4@1f1@1i4@1u0m8i4K6S2q4x3U0l9H3x3q4!0q4y4g2!0n7z5g2!0n7y4q4!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4#2!0n7c8q4)9&6x3g2!0q4y4#2!0m8b7W2)9&6z5g2!0q4y4g2)9^5c8g2)9^5y4W2!0q4y4#2!0n7b7W2)9^5c8U0S2Q4c8e0g2Q4b7U0W2Q4b7U0c8Q4c8e0g2Q4b7e0c8Q4z5f1q4Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4z5p5k6Q4z5e0q4Q4c8e0g2Q4b7U0q4Q4z5e0g2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4z5o6c8Q4b7U0q4Q4c8e0W2Q4b7e0u0Q4z5e0k6Q4c8e0S2Q4z5o6m8Q4z5p5y4Q4c8e0g2Q4z5o6N6Q4b7V1q4Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4z5o6N6Q4b7f1c8Q4c8e0g2Q4z5o6m8Q4z5f1k6Q4c8e0S2Q4z5o6N6Q4b7f1q4Q4c8e0S2Q4b7V1q4Q4b7f1u0Q4c8e0g2Q4b7f1g2Q4z5f1g2Q4c8e0g2Q4z5p5q4Q4z5f1u0Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7U0N6Q4b7U0u0Q4c8e0N6Q4b7V1u0Q4z5p5k6Q4c8e0k6Q4z5o6S2Q4z5e0m8Q4c8e0c8Q4b7U0S2Q4b7V1q4Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0g2Q4z5f1u0Q4b7V1c8Q4c8e0S2Q4b7V1c8Q4b7f1k6Q4c8e0c8Q4b7V1u0Q4b7U0k6Q4c8e0g2Q4b7f1g2Q4z5o6W2Q4c8e0g2Q4z5o6g2Q4b7e0S2Q4c8e0W2Q4b7e0u0Q4z5o6k6Q4c8e0g2Q4z5f1k6Q4z5f1k6Q4c8e0g2Q4z5o6g2Q4b7f1y4Q4c8e0S2Q4b7f1g2Q4b7e0c8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0k6Q4z5f1y4Q4z5o6m8Q4c8e0k6Q4z5f1c8Q4z5o6y4Q4c8e0g2Q4b7e0S2Q4z5o6q4Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0k6Q4z5p5q4Q4z5o6m8Q4c8e0k6Q4z5f1y4Q4b7f1k6Q4c8e0N6Q4b7f1u0Q4z5e0W2Q4c8e0N6Q4z5o6u0Q4b7U0W2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7V1c8Q4b7U0q4Q4c8e0g2Q4z5e0y4Q4z5p5c8Q4c8e0k6Q4b7U0N6Q4b7U0q4Q4c8e0S2Q4b7V1k6Q4z5f1y4Q4c8e0y4Q4z5o6m8Q4z5o6t1`.
2000年初,笔者想找一些研究软件加解密的朋友交流一下,但十分令人遗憾的是,那时国内这方面的技术资料很缺乏,不成系统,大家的交流也十分有限。因此,笔者自己建立了一个主页“看雪学院”,期望与兴趣相投的朋友共同探讨加密与解密的知识。当初这个简单的网站,就是今天看雪软件安全网站的雏形,并且是当时国内唯一从技术角度研究软件加解密的站点。很短的时间,这个站点就获得了大家的认同,并在广大网友的支持下,健康地成长起来。随着我们的努力,网站推出的软件调试论坛逐渐成为国内知名度最高的软件安全论坛,吸引了众多高手。
本着知识共享,一切免费的建站宗旨,看雪软件安全网站汇聚了大量高水平的技术文章,至今为止原创了数千余篇精华文章,极大地推动了国内软件安全技术的发展。2007年论坛改名为看雪软件安全论坛,论坛在保持已有的软件加密与解密研究方面外,在漏洞分析、系统底层、病毒分析、Rootkit等技术领域进行全面扩展,逐步发展为信息安全的综合服务网站。
多年来,看雪软件安全网站一直遵循纯技术的发展策略,不但在行业中树立了令人尊敬的专业形象,更使一大批专业人士和专家聚集在这里,形成了一个技术交流的网上家园,带动了大批对软件安全感兴趣的网友加入进来,构建起了一个围绕软件安全主题的活跃的大社区,历久弥新。正是看到这种技术气氛,不少知名的公司都很关注论坛技术人才,如微软公司信息安全部门、珠海金山毒霸公司、深圳腾讯公司、360安全中心、启明星辰以及部分网游公司等。
为了推进软件安全技术为社会和企业服务的理念,我们正在努力提升看雪网站的社会作用和价值,从而为关注信息安全的大众,提供更好的服务和技术产品。
看雪软件安全网站,汇聚了许多志趣相投的朋友,经历了风风雨雨的8年,一直走到今天实属不易。作为网站站长和此书的作者,本人在此由衷地感谢所有关心和支持我们的共同事业,参与共同发展的朋友们!每到网站最困难的时候,是你们伸出无私的援助之手,才让网站渡过了一个个难关,能有今天的大好局面!在此特别鸣谢以下朋友和机构的大力支持:
海城金航网络科技有限公司阿男为网站提供网站空间
雅联网络服务有限责任公司李智勇为论坛提供独立服务器
南京慧速科技发展有限公司刘小荣为论坛提供独立服务器
感谢陈超达为服务器安全维护所做的大量工作
本书的缘起
当今的信息社会里,安全技术越来越重要了,如何普及软件安全知识是作者始终关注的一个大问题。正是为了更好地将软件安全知识普及到社会各个领域的愿望,促成了本书的问世。
依托看雪学院的技术背景,由作者主编和主导的看雪软件安全系列书籍,目前己出版发行了《加密与解密——软件保护技术及完全解决方案》(简体版,繁体版)、《加密与解密(第二版)》(简体版,繁体版)、《软件加密技术内幕》等书籍;基于电子资料的形式,历年发行的《看雪论坛精华》被众多网站转载,保守计算,其下载量已经超过数百万份,极大地推动了国内软件安全技术的发展。
这是一本很难写的书,因为2000年时,软件安全是一个全新的领域。从Windows 95面世以来的6年内,市面上没有一本这方面的书,网上也缺乏相关资料。为了填补国内Windows平台上加密与解密书籍的空白,作者与看雪论坛的一流好手努力合作,克服种种困难,于2001年9月推出了国内第一本全面介绍Windows平台下软件加密与解密技术的书籍,这就是本书的第一版《加密与解密——软件保护技术及完全解决方案》。
在第一版中,我们试图从软件加密和解密这两个方面对当今流行的软件保护技术进行分析。希望读者看过此书之后,能够对各种流行的软件保护与破解技术有所了解。
第一版一面世就得到了广大读者的喜爱和认可,获得了2002年全国优秀畅销书奖(科技类)!在全国很多计算机专业书店获得了名列前茅的销售业绩,而且一年来在著名的华储网销售排行中都被排在前几名内。次年,本书在台湾发行了繁体版,得到了台湾读者的热烈欢迎。
2003年6月以本书第一版为基础,完成了本书的第二版《加密与解密》。
笔者从2004年开始第三版的更新准备工作,这个版本编写时间比较长,前后用了四年多的时间才得已完稿。这是所有参与者共同的努力,是他们把自己才华中最精彩部分展现给大家了。
现在读者看到的这本500多页的图书,几乎包含了当今Windows 32位环境下软件保护技术的绝大部分内容,从基本的跟踪调试到深层的拆解脱壳;从浅显的分析注册到中高级软件保护与分析,其跨度之广、内容之深,国内至今尚无同类出版物能与之比肩。
第三版的变化
第三版是在《加密与解密》第二版与《软件加密技术内幕》两本书的基础上完成的,删除了第二版中的过时内容,将《软件加密技术内幕》一些知识点补充融合进来,结构更加合理。
1.讲解通俗,突出基础
本书加强了基础部分的篇幅,系统讲解软件逆向的整个基本流程,包括动态分析、静态分析,以及逆向分析的基础知识。比如重点讲解了逆向必备工具OllyDbg和IDA的用法,并详细讲述逆向分析的基础知识,初学者通过相关几章的学习,可以轻松入门。
2.案例丰富,覆盖面广
书中提供了大量的案例分析,方便读者理论与实践相结合。通过实际操作,提高读者的调试分析能力。
3.加强了密码学算法
密码学算法越来越多地应用在软件保护领域,调试软件必须对比较知名的密码学算法有一定的了解。“加密算法”这一章,讲解了常见密码学算法的应用。
4.新增.Net技术
随着微软.Net平台的推广,越来越多的开发者开始关注.Net程序的安全。.Net这章向读者普及了.Net安全的基本知识。
5.加强脱壳基础知识的篇幅
脱壳一章的结构和内容规划,参考了大量的建议,组织更加合理,完全为脱壳新手量身定做。
6.软件保护技术实施
相关章节详细研究了大量极具商业价值的保护技术,包括反跟踪技术、外壳编写基础、虚拟机的设计等,读者完全可以将这些技术应用到自己软件保护之中去。
7.二次开发与补丁技术
“代码的二次开发”一章中讲解如何在没有源码的情况下,扩充程序功能,打造开发接口;“补丁技术”一章讲解如何自己编程实现内存补丁或内存注册机。
本书预备知识
在阅读本书前,读者应该对汇编语言有大致的了解。汇编语言是大学计算机的必修课,这方面的书籍品种很多,如《IBM PC汇编语言程序设计》,虽然大多数书以DOS汇编为讲解平台,但对理解汇编指令功能依然有益。
读者如果熟悉和了解C语言对阅读本书是很有帮助的。
建议掌握一些Win32编程,不论研究加密与解密,还是编程,都应该了解Win32编程。Win32编程是API方式的Windows程序设计,学习Windows API能使读者更深入地了解Windows工作方式。此类书籍推荐您阅读Charles Petzold所著的《Windows程序设计》,该书堪称经典之作,它以C语言为讲解平台。
到此为止,作者将不再假设你已经具有任何加解密的经验了。
适合的读者
本书适合以下读者:
软件安全技术相关工作者:本书是软件安全研究的一本不错的技术字典;
对调试技术感兴趣的读者:提高读者的调试技能,增强软件的质量;
对软件保护感兴趣的软件开发人员:更好地保护你的作品;
大中专在校学生:通过本书掌握的相关知识和技能,将使你获得职场竞争的秘密武器;
其他:关注个人信息安全、计算机安全技术,并且想了解技术内幕的朋友,可以从中获得答案。
内容导读
特别致谢
首先真诚感谢我的父母、妻子、女儿对我的大力支持,使得我顺利完成此书的编写!我所有的荣耀都属于你们。
谨此对电子工业出版社博文视点公司所有相关人员致以真诚的谢意!
特别感谢电子工业出版社博文视点公司总经理郭立所做的大量工作!
特别感谢上海盛大网络发展有限公司徐海峡、王峰、刘庆民、蒋渭华、李明、张子雁、史昕峰、彭伟、张静盛等对本书的大力支持!
特别感谢微软公司大中华区首席安全官江明灶和微软的战略安全架构专家裔云天对本书的支持!
特别感谢珠海金山毒霸事业部陈勇、赵闽的技术支持!
特别感谢看雪软件安全论坛核心管理团队CCDebuger、Ivanov、riijj、michael的支持!
特别感谢看雪软件安全论坛各版主及各技术小组成员,对本书的大力支持!他们是:
(1)北极星2003、笨笨雄、crackabcer、cnbragon、linhanshi、LOVE、monkeycz、逍遥风、小虾、zmworm
(2)软件调试小组:aker、hawking、elance、theOcrat
(3)虚拟机技术小组:bughoho、linxer、wangdell、Isaiah
(4)外壳开发小组:forgot、dummy、bithaha
(5)工具开发小组:doskey、netsowell、freecat、wak、menting
(6)编程技术小组:北极星2003、没有风、CCDeath、Combojiang、Sislcb
(7)PTG翻译小组:arhat、thinkSJ、kkbing、aalloverred、月中人、alpsdew、jdxyw、Jhlqb、mjahuolong
(8).Net小组:tankaiha、backer、dreaman、inraining、kkbing、lccracker、oep1、rick、slan、tracky、 菩提!、MegaX
感谢CCDebuger对“第2章 动态分析技术”和“第13章 脱壳技术”校对!
感谢gzgzlxg对“第3章 静态分析技术”提出的修正和补充意见!
感谢zmworm对工具IDA使用的补充建议!
感谢Intel公司中国企业应用技术支持部的段夕华对“第4章 逆向分析技术”提出的宝贵修正意见!
感谢WiNrOOt翻译的
1a0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3c8S2N6r3q4J5k6i4y4U0N6h3g2Q4x3X3g2U0L8$3@1`. 提供的IDA简易教程,IDA部分参考了一下!
感谢riijj为“5.6 网络验证”一节提供的实例!
感谢cnbragon参与的“第6章 加密算法”!
感谢cyclotron参与的“8.3 伪编译”!
感谢tankaiha参与的“第9章 .Net平台加解密”!
感谢Hume对“第11章 结构化异常处理”提供的技术支持!
感谢DiKeN参与的“13.10 静态脱壳”!
感谢softworm参与的“13.9.2 Themida的SDK分析”!
感谢forgot参与的“14.2.4 简单的多态变形技术”、“第15章 反跟踪技术”!
感谢Hying参与的“第16章 外壳编写基础”!
感谢bughoho参与的“第17章 虚拟机的设计”!
感谢afanty参与的“14.1 防范算法求逆”!
感谢并参考老罗(
156K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3I4#2L8$3y4G2L8X3N6Q4x3X3g2U0L8$3#2Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0u0Q4z5o6m8Q4z5f1y4Q4c8e0N6Q4z5f1k6Q4z5f1u0Q4c8e0c8Q4b7U0S2Q4z5p5g2Q4c8e0N6Q4z5f1u0Q4b7V1g2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0S2Q4b7V1g2Q4z5o6y4Q4c8e0W2Q4z5o6N6Q4z5p5k6Q4c8e0u0Q4z5o6m8Q4z5e0c8Q4c8e0u0Q4z5o6m8Q4z5e0c8o6f1V1y4Q4c8e0g2Q4b7f1g2Q4z5f1g2Q4c8e0S2Q4b7U0N6Q4b7U0g2Q4c8e0N6Q4b7f1k6Q4z5o6N6Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8f1k6Q4b7V1y4Q4z5o6p5`.
感谢Lenus在内存Dump和内存断点方面给予的技术支持!
感谢TiANWEi翻译的SoftICE手册!
感谢wynney签名制作帮助!
感谢skylly为脱壳一章提供的脚本制作的技术支持!
感谢hnhuqiong提供的ODbgScript脚本教学!
感谢linhansh在工具方面提供的帮助!
感谢VolX为本书配套光盘映像文件提供的Aspr2.XX_unpacker.osc脚本!
感谢CoDe_Inject对“18.2.4 DLL劫持技术”一节提供的帮助!
感谢武汉科锐软件培训中心(
50eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0f1I4j5i4y4E0i4K6u0W2j5$3!0E0 )Backer为“18.2.4 DLL劫持技术”提供lpk.cpp!
感谢frozenrain,jero,mocha,NWMonster,petnt,sudami,tankaiha,wynney,XPoy,王清,小虾等朋友为术语表所做的工作!
感谢Sun Bird,JoJo,kvllz等人对本书的大力支持!
感谢fonge等诸多看雪论坛会员持续一年多来的发帖签名支持新书!
同时,也要感谢那些共同参与《加密与解密》(第一、二版)、《软件加密技术内幕》组稿的看雪软件安全论坛的众多一流好手,是他们的参与和奉献才让此书得以顺利完成。
这次的第三版改动较大,参考引用了如下朋友在《加密与解密》(第一、二版)中的文章:
(1)Blowfish在第一版参与的“第5章 软件保护技术”;
(2)Fisheep参与的“浮点指令小结”和“信息隐藏技术”;
(3)吴朝相(
d7bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4G2N6i4S2A6L8W2)9J5k6h3y4G2L8g2!0q4c8W2!0n7b7#2)9^5z5g2!0q4y4g2)9^5c8W2)9^5x3W2!0q4y4q4!0n7z5q4)9^5c8g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4x3W2)9^5x3q4)9&6b7#2!0q4z5q4!0m8c8g2!0m8y4q4!0q4z5q4!0m8c8W2)9^5y4W2!0q4y4g2!0m8x3#2!0n7x3#2!0q4x3W2)9^5x3q4)9&6c8q4!0q4c8W2!0n7b7#2)9&6b7R3`.`.
(4)mr.wei参与的“DeDe用法”;
(5)感谢pll621在扩展PE功能开拓性的研究。
(6)娃娃(王凌迪)提供的“MD5算法”资料。
参考并引用了如下朋友在《软件加密技术内幕》中的文章:
(1)Hying的Anti_Dump;
(2)Hume 的“第4章 Windows下的异常处理”;
(3)王勇的“编写PE分析工具”;
(4)罗翼的“3.3 利用调试API制作内存补丁”;
(5)郭春杨的“在Visual C++中使用内联汇编”;
(6)Ljtt参与的“花指令”、“SMC技术实现”、“壳的加载过程”;
(7)dREAMtHEATER翻译的Matt Pietrek An In-Depth Look into the Win32 Portable Executable File Format。
在此,还要感谢看雪软件安全论坛其他朋友的支持和帮助!是你们提供的帮助,才使得我能够完成此书。如果以上未提及对您的谢意,在此,我表示由衷的感谢!
反馈信息
我们非常希望能够了解读者对本书的看法。如果您有什么问题或自己的学习心得,欢迎发到看雪软件安全网站——看雪学院。
技术支持:
54bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0
kanxue
2008.5.1于上海