点击上方“程序人生”,选择“置顶公众号”
第一时间关注程序猿(媛)身边的故事
软件安全是信息安全领域的重要内容,涉及软件的逆向分析、加密、解密、漏洞分析、安全编程及病毒分析等。随着互联网应用的普及和企业信息化程度的不断提升,社会和企业对安全技术人才的需求逐年增加,国内高校对信息安全学科也越来越重视,但在计算机病毒查杀、网络安全、个人信息安全等方面的人才缺口仍然很大。
从就业的角度来看,如果能掌握信息安全相关知识和技能,从业者不但可以提高自身的职场竞争力,而且有机会发挥更大的个人潜力、获得满意的薪酬;
从个人成长方面来说,研究信息安全技术有助于掌握许多系统底层知识,是从业者提升职业技能的重要途径。
作为一名合格的程序员,在掌握需求分析、设计模式等之外,如果能掌握一些系统底层知识,熟悉整个系统的底层结构,必将获益良多。
从2001年9月推出第1版《加密与解密》,2003年第2版,2008年第3版,经历17年漫长旅程,第4版现已出版发行!作为国内第一本全面介绍Windows平台软件安全技术的书籍,汇集看雪论坛众多密界一流好手,展现软件逆向最核心,参与创作的每位作者都倾力将各自擅长的专业技术毫无保留地奉献给广大读者,经过17年沉淀,让本书成为极富价值的经典之作,被国内多所重点高校作为教材使用。
本书以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。第四版的定位是Windows逆向的基础知识,偏重基础。
《加密与解密》由看雪软件安全网站(看雪学院)站长段钢主持编著。在本书的编写过程中,参与创作的每位作者倾力将各自擅长的专业技术毫无保留地奉献给广大读者,使得本书展现出了极具价值的丰富内容。如果读者在阅读本书后,能够感受到管窥技术奥秘带来的内心的喜悦,并愿意与大家分享这份感受,这是作者最大的愿望。
编 委:(按章节顺序排列)
accessd、张延清、张波、沈晓斌、周扬荣、温玉杰、段治华、印豪、程勋德、snowdbg、赵勇、唐植明、李江涛、林子深、薛亮亮、冯典、阎文斌、罗翼、罗巍、林小华、丁益青、tankaiha、崔孝晨、郭春杨
在阅读本书前,读者应该对x86汇编语言有大致的了解。汇编语言是大学计算机的必修课,这方面的书籍非常多,例如《汇编语言:基于x86处理器》、王爽的《汇编语言》等,虽然大多数书籍以16位汇编为讲解平台,但对理解汇编指令功能而言依然有益。
读者如果熟悉和了解C语言,对阅读本书也是很有帮助的,扎实的编程基础是学好逆向的关键。另外,读者需要掌握一些常用的算法和数据结构。
针对特定平台下的软件逆向,需要了解特定平台下程序设计的相关知识。本书主要讨论Windows逆向,需要读者掌握一定的Win32编程知识。不论是研究逆向还是编程,都应该了解Win32编程。Win32编程是API方式的Windows程序设计,学习Windows API能使读者更深入地了解Windows工作方式。推荐阅读Charles Petzold的经典著作《Windows程序设计》,它以C语言为讲解平台。
到此为止,作者将假设你没有任何加密与解密的经验,并以此为标准组织本书的内容。
本书适合以下读者阅读:
安全技术相关工作者:研究软件安全的一本不错的技术工具书。
对逆向调试技术感兴趣的读者:增强逆向调试技能,提高软件的质量。
对软件保护感兴趣的软件开发人员:更好地保护软件作品。
相关专业在校学生:掌握的相关知识和技能,获得职场竞争的秘密武器。
关注个人信息安全、计算机安全技术并想了解技术内幕的读者:解决很多技术疑难问题。
《加密与解密(第4版)》是在第三版的基础上完成的,删除了第三版中的过时内容,补充了大量新的内容,结构更加合理。
1.讲解通俗,突出基础
本书加强了基础部分的篇幅,系统讲解了软件逆向的基本流程,主要内容包括动态分析、静态分析及逆向分析的基础知识,重点讲解了逆向必备工具OllyDbg、WinDbg和IDA的用法,并详细讲解了逆向分析的基础知识。初学者通过相关内容的学习,可以轻松入门。
2.案例丰富,覆盖面广
学习逆向的最好方式就是动手实践,在实践中有针对性地学习。书中提供了大量的案例分析,方便读者理论与实践相结合。通过实际操作,提高读者的调试分析能力。
3.新增64位软件逆向技术的相关内容
为了便于理解,书中大多数实例是以32位程序来讲解的。32位和64位平台的差异主要体现在指令集、寄存器长度和调用约定等方面。对有基础分析的人员来说,仅需要一个熟悉的过程就可以适应这些差异。新增的64位逆向部分系统讲解了64位逆向的基本思路,使读者可以轻松地从32位程序逆向过渡到64位程序逆向。
4.加强系统内核相关知识的介绍
掌握系统底层技术是成为技术大牛必经阶段。本书增加了大量关于系统内核技术的介绍,包括内核基础知识、注入技术、HOOK技术及高深的VT技术。另外,对异常处理中的大部分内容进行了重写,更新的内容包括Windows 7/8/10等系统的新特性、x64平台上SEH的具体实现、编译器对SEH的增强实现及SEH安全性等。
5.新增漏洞分析技术的相关内容
随着软件漏洞出现形式的日趋多样化,为了区别于XSS、注入等类型的Web漏洞,也将传统的缓冲区溢出、UAF等涉及二进制编码的漏洞统称为二进制漏洞。本书讨论的软件漏洞都属于二进制漏洞。
6.探讨软件保护技术的实施
本书细研究了大量极具商业价值的软件保护技术,包括反跟踪技术、外壳编写基础、加密算法变形引擎、虚拟机的设计等,读者完全可以将这些技术应用到自己软件保护体系中去。
7.新增电子取证技术
电子取证是一个对受侵害的计算机系统进行扫描和破解,以及对入侵事件进行重建的过程,它融合了计算机和刑侦两个专业领域的知识和经验。在本书中介绍了当前常用的电子取证技术。
第一篇 基础篇
第1章 基础知识
第二篇 调试篇
第2章 动态分析技术
第3章 静态分析技术
第4章 逆向分析技术
第三篇 解密篇
第5章 演示版保护技术
第6章 加密算法
第四篇 系统篇
第7章 Windows内核基础
第8章 Windows下的异常处理
第9章 Win32调试API
第10章 VT技术
第11章 PE文件格式
第12章 注入技术
第13章 HOOK技术
第五篇 漏洞篇
第14章 漏洞分析技术
第六篇 脱壳篇
第15章 专用加密软件
第16章 脱壳技术
第七篇 保护篇
第17章 软件保护技术
第18章 反跟踪技术
第19章 加密算法变形引擎
第20章 外壳编写基础
第21章 虚拟机的设计
第22章 VMProtect逆向和还原浅析
第八篇 软件重构篇
第23章 补丁技术
第24章 代码的二次开发
第九篇 语言和平台篇
第25章 VISUAL BASIC程序
第26章 .NET平台加解密
第十篇 取证篇
第27章 数据取证技术
摘录几位专家寄语,更多参考书中前言:
Windows软件逆向是一个难度比较大的技术方向,因此,在入门阶段有一本好书作为指引就显得尤为重要。我曾向很多年轻人推荐过《加密与解密》,这是一本真正源自实战、指导实战的技术书。
腾讯玄武实验室负责人
TK(于旸)
《加密与解密》第1版出版至今已经有十几个年头,十多年前我也曾买过一本。此次《加密与解密(第4版)》出版,受看雪学院段钢之邀为本书寄语,用两个字表达我的感受,那就是——力荐!一本书18年,从Windows2000到Windows 10;一个网站18年,从一个软件调试板块到现在的多平台、多板块……我佩服段钢的坚持。正因为这种坚持,他影响了一批又一批人,为国内安全行业的技术水平提高贡献了很大的力量。尽管本书名叫“加密与解密”,但内容覆盖了加密与解密、调试和反调试、破解与保护及漏洞分析和利用等技术。本书从基础知识开始,辅以各种实例,由浅入深,是安全研究人员、开发人员不可多得的入门及提高书籍。最后,希望看雪学院能够在知识分享和人才培养方面再接再厉,把更多的安全爱好者变成安全专家。
犇众信息(盘古团队)创始人、CEO
韩争光
30年前,中国最早的一批黑客所活跃的领域就是软件加解密。今天,曾经的一个个社区、一个个ID都已消逝,成了让人唏嘘的回忆。成立于世纪之交的看雪学院成为中国软件加解密的旗帜,是段钢老师理念和坚持的必然。在逆向破解领域,一批批爱好者从入门到成为现在国内安全领域的专家,段钢老师的看雪论坛和《加密与解密》功不可没。我本人也是《加密与解密》最早的忠实读者之一,直到今天,在这本书的字里行间,我还能感受到那个年代技术爱好者的纯真和认真。愿看雪越来越好!
腾讯KEEN实验室和GeekPwn创办人
大牛蛙(王琦)
我买过《加密与解密》的第2版,虽说书名看上去像是密码学相关书籍,但实际上这本书更多地讲述了代码的破解与保护、程序的逆向分析与调试等软件安全领域非常实用的技术。我和我的很多同事、学生等都读过这本书。可以说,这本书伴随了几代软件安全从业者的成长。
清华大学网络科学与网络空间研究院教授
段海新
小福利
在本文下方留言,说说你想获得此书籍,最大的原因是什么?有机会获奖哦。(注意:理由不少于30字才能被选入精选参与抽奖哦~)
我们会从精选留言用户中,按照其留言点赞数,抽取排名在第3、5、9名的3位幸运者,送出纸书一本。
开奖时间:10月30日当天(以小编当日看到时的名次顺序为准,不接受抱怨,谢谢~)
推荐阅读:
那些一毕业就选择华为的人,后来都怎么样了
干货 | 18个Python爬虫实战案例(已开源)
区块链与你“最熟悉的陌生人”
程序员的江湖 务必掌握这些黑话!
CSDN蒋涛提出技术社区三倍速定律,称下一个20年全球开发者数量将过亿
如何避免面试现场被虐?
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)