在软件加密与解密领域,技术的“对立”使这个领域的研究充满了乐趣。软件保护与分析涉及很多技术细节,如反调试、反虚拟机、代码加密、静态分析、代码注入、动态分析、脱壳等,作者对这些细节进行了讲解,内容循序渐进,覆盖范围全面。
《软件保护及分析技术——原理与实践》对软件安全领域的保护与分析技术进行了全面的讨论和剖析,通过保护与分析的对比讲解,结合代码和操作流程,对软件安全领域的各种技术进行了详尽的讨论,并将理论与实践相结合,利用具体的程序代码进行演示。同时,对现今较为成熟的保护系统进行了分析,全面介绍了软件安全领域的保护与分析技术。最后,结合多年从事软件软件保护与分析的经验,讲解了软件保护与分析中的各种经验和技巧。
《软件保护及分析技术——原理与实践》适合信息安全领域相关人员、高校相关专业学生及爱好者阅读。
章立春,2005-2007参与某网络游戏开发 2007-2009某软件保护系统主程 2009-2011年任成都磐石软件有限责任公司董事长
第0章 准备知识 1
0.1 Win32程序 1
0.2 PE程序文件 3
0.3 Win32进程的启动 5
0.4 PE程序的加载 7
第1部分 软件保护
第1章 软件保护技术 11
1.1 反调试 11
1.1.1 函数检测 12
1.1.2 数据检测 12
1.1.3 符号检测 13
1.1.4 窗口检测 13
1.1.5 特征码检测 14
1.1.6 行为检测 14
1.1.7 断点检测 15
1.1.8 功能破坏 16
1.1.9 行为占用 16
1.2 反虚拟机 17
1.3 数据校验 18
1.4 导入表加密 19
1.5 模块拷贝移位 27
1.6 资源加密 29
1.7 代码加密 30
1.7.1 代码变形 30
1.7.2 花指令 33
1.7.3 代码乱序 33
1.7.4 多分支 35
1.7.5 call链 36
1.8 代码虚拟化 37
1.8.1 堆机 39
1.8.2 栈机 40
1.8.3 状态机 42
1.9 脚本引擎 42
1.10 网络加密 42
1.11 硬件加密 42
1.12 代码签名 43
第2章 软件保护系统 44
2.1 保护功能 44
2.1.1 试用控制 44
2.1.2 授权控制 45
2.1.3 功能扩展 45
2.2 保护系统 45
2.2.1 WinLicense和Themida 46
2.2.2 VMProtect 47
第3章 软件保护强化 48
3.1 设计优化 49
3.1.1 技巧1:代码习惯优化 49
3.1.2 技巧2:SDK使用优化 51
3.1.3 技巧3:验证保护系统 52
3.2 加壳优化 52
3.2.1 技巧1:侧重选择代码加密 53
3.2.2 技巧2:精选被保护代码 54
3.2.3 技巧3:充分测试 55
第2部分 软件破解
第4章 软件破解工具 58
4.1 调试分析工具 58
4.1.1 OllyDbg 58
4.1.2 WinDBG 59
4.1.3 IDA 60
4.2 修改工具 60
4.2.1 LordPE 60
4.2.2 010Editor 61
4.3 自动化工具 61
第5章 软件破解技术 62
5.1 静态分析 63
5.1.1 基本信息分析 63
5.1.2 代码静态分析 67
5.2 软件调试 68
5.2.1 一般调试原理 68
5.2.2 伪调试技术 72
5.2.3 本地调试 73
5.2.4 远程调试 74
5.2.5 虚拟机调试 76
5.3 反反调试 77
5.4 HOOK 78
5.4.1 代码HOOK 79
5.4.2 函数HOOK 86
5.4.3 模块HOOK 86
5.4.4 导出表HOOK 92
5.5 代码注入 94
5.6 补丁 101
5.6.1 冷补丁 101
5.6.2 热补丁 102
5.6.3 SMC 102
5.6.4 虚拟化补丁 103
5.7 模块重定位 103
5.8 沙箱技术 104
5.9 虚拟化 106
5.10 代码虚拟机 107
5.10.1 OP分支探测 108
5.10.2 OP调试 113
5.11 自动化技术 114
5.11.1 代码追踪 114
5.11.2 预执行 118
5.11.3 代码简化 120
5.11.4 代码重建 124
5.11.5 块执行 125
5.11.6 多分支剔除 126
5.11.7 小结 129
5.12 动态分析 129
5.12.1 着色 129
5.12.2 黑盒测试 132
5.13 功能模拟 132
5.13.1 授权模拟 132
5.13.2 网络模拟 134
5.13.3 加密狗模拟 134
5.14 脱壳 134
5.14.1 导入表重建 135
5.14.2 资源重建 149
5.14.3 区段重建 152
5.14.4 OEP定位 154
5.14.5 PE头修复 159
5.14.6 重定位修复 159
5.14.7 PE重建 163
5.14.8 补区段 164
5.15 进程快照技术 166
5.15.1 进程快照技术概述 166
5.15.2 快照脱壳 178
5.16 代码回溯技术 180
第6章 软件分析技巧 184
6.1 技巧1:精确代码范围 184
6.2 技巧2:多用对比参考 186
6.3 技巧3:逆向思考 187
6.4 技巧4:多利用自动化优势 187
6.5 技巧5:利用环境优势 187
6.6 技巧6:尽量避免算法分析 187
6.7 技巧7:够用原则 188
第3部分 自己动手
第7章 打造函数监视器 190
7.1 制定功能 190
7.2 确定技术方案 191
7.3 开发筹备 192
7.4 具体实现 193
7.4.1 启动目标进程并注入xVMRuntime模块 196
7.4.2 通信协议 199
7.4.3 事件设定 201
7.4.4 辅助调试功能 216
7.4.5 技术问题 217
7.5 效果演示 217
第8章 打造资源重建工具 220
8.1 制定功能 220
8.2 确定技术方案 220
8.3 开发筹备 222
8.4 具体实现 222
8.4.1 数据结构及通信协议 222
8.4.2 获取内存段资源数据 223
8.4.3 监控资源函数获取数据 225
8.4.4 强制搜索内存穷举获取数据 227
8.4.5 重建资源区段 230
8.4.6 技术问题 234
8.5 效果演示 235
第9章 打造重定位修复工具 238
9.1 制定功能 238
9.2 确定技术方案 238
9.3 开发筹备 239
9.4 具体实现 239
9.4.1 通信协议 239
9.4.2 注入模块 240
9.4.3 抓取内存快照 240
9.4.4 对比内存数据 244
9.4.5 重建重定位区段 245
9.5 效果演示 248
9.5.1 DLL模块重定位修复 249
9.5.2 主模块重定位修复 251
第10章 打造进程拍照机 253
10.1 制定功能 253
10.2 确定技术方案 253
10.3 开发筹备 255
10.4 具体实现 255
10.4.1 先期模块注入 255
10.4.2 接管进程内存管理 261
10.4.3 建立函数调用中间层 268
10.4.4 实现场景载入功能 269
10.4.5 转储并修正映像及相关数据 270
10.4.6 增加TIB转储 274
10.5 效果演示 276
10.5.1 WinLicense测试 276
10.5.2 VMProtect测试 279
第11章 打造函数通用追踪器 281
11.1 制定功能 281
11.2 确定技术方案 281
11.3 开发筹备 282
11.4 具体实现 283
11.4.1 建立插件框架 283
11.4.2 分层式虚拟机 284
11.4.3 调用代码查找识别 287
11.5 追踪函数 294
11.6 重建导入表 299
11.7 修复调用代码 304
11.7.1 内存式修复 305
11.7.2 文件式修复 307
11.8 效果演示 309
第12章 打造预执行调试器 312
12.1 制定功能 312
12.2 确定技术方案 312
12.3 开发筹备 313
12.4 具体实现 313
12.4.1 预执行功能 313
12.4.2 代码追踪记录功能 317
12.4.3 块执行功能 321
12.4.4 OP记录调试功能 327
12.5 效果演示 331
第13章 打造伪调试器 335
13.1 制定功能 335
13.2 确定技术方案 335
13.3 开发筹备 336
13.4 具体实现 336
13.4.1 数据结构与通信协议 337
13.4.2 第1步:界面相关工作 338
13.4.3 第2步:在调试端启用和禁用伪调试技术 339
13.4.4 第3步:创建调试目标 341
13.4.5 第4步:等待调试事件主循环 344
13.4.6 第5步:被调试端的初始化 346
13.4.7 第6步:中转异常 349
13.4.8 第7步:辅助调试函数实现 350
13.4.9 小结 354
13.5 效果演示 354
第4部分 实例分析
第14章 VMProtect虚拟机分析 358
第15章 WinLicense虚拟机分析 375
第5部分 脱壳实例
第16章 VMProtect脱壳 382
第17章 WinLicense脱壳 394
写在最后 405
软件保护与分析技术领域一直以来都充满着神秘色彩。一提到这个领域,总会激发外行人的强烈好奇和异样的眼光。作为一个业内人士,我认为,尽管这个行业内充满了利益瓜葛,但是,若我们抛开利益,回归这个技术领域的本质,就会发现更加重要的其实是这个领域给我们带来的乐趣、对事物的理解,以及那些成功与挫败的体验,这些才是这个领域最为本质也是最吸引人的地方。
很难想象,如果我们涉及计算机行业,但又一直只是充当一个代码工具,在现在这个软件设计越来越趋向对象化、自动化的年代,我们真不知道除了代码之外还能有些什么,更不用说长期做重复单调的工作需要多大的耐心和毅力。
黑格尔曾经说过,事物总是在对立中才能进步。软件加密与解密这个领域正好有两种永远对立的事物,这就使得这个领域不存在终点,永远都有更加深入的技术等待着我们去探索,让这个领域充满了乐趣。但是,随着计算机硬件的快速发展,这个领域的这种对立正在慢慢地发生变化并且失去平衡。因为计算机越来越快的运算速度,使得加密技术可以使用计算机的这种计算优势将安全性转移到计算机运算速度上,也就是说,现代的加密技术可以使用巨大的运算量来换取安全性的提高。一方面,这对破解来说是极不乐观的,因为在破解技术上,大多数的分析还是依靠人脑。另一方面,由于计算机领域具有累积性,慢慢地,加密与解密这个领域开始具备了排斥性,使这个领域的门槛越来越高,这让无数热爱计算机技术的人失去了体验这个领域内众多乐趣的机会。
写作背景
我相信很多准备进入软件行业的技术人员都对软件的保护和破解领域具有浓厚的兴趣,但是我也能想象,当他们兴致勃勃地从网上搜索各种加密与解密入门教程,并着手模仿和练习时,却发现现在的软件随便用PEiD查看都会显示“VMProtect”字样,然后他们转而查找有关VMProtect的资料——好不容易找到一点点关于VMProtect的资料后却发现,文档中的内容完全不知所云,或者文档中描述的内容和他们实际操作的代码完全不一样,这让他们感到极度挫败。更加严重的问题在于:当我们习惯使用这些成熟、强大的保护系统以后,就慢慢丧失了追寻事物本质的能力;我们看重成熟的保护系统给软件带来的安全性,就慢慢忽视了这些保护系统保护软件的技术细节,这使得我们产生一种错觉,甚至可能以为一旦拥有这样的保护系统,我们的软件就安全了,这是相当严重的问题。
作为一个成熟的技术人员,我们应当足够了解我们所开发软件的整个运行流程,这样才能在各种情况下做出相对准确和客观的判断。因此,这也包括我们对软件保护系统及软件破解技术的了解。
本书全面介绍了软件保护与分析领域的相关技术,因此涵盖很多高手看来较低级的技术,还会提及很多基础性的内容,但由于篇幅限制,我会尽量简化这些部分。在我看来,在加密与解密领域,对技术的理解必须用理论与实际结合并侧重于实际操作的方式效果才会更好。因为这个领域是一个需要培养自己动手能力和花大量时间去具体操作才能完全理解的领域,只有在实际的操作过程中才能体会到这个领域中的千变万化,所以,书中较多地采用教学的方式,并且尽量提供相应的代码和示例,最后会一步步地引导读者打造自己的工具以提升动手能力。
本书充分考虑到读者可能面临的实际情况,所以尽量不涉及和不使用内核技术来解决问题,而是将各种方法都放在Ring3下模拟和实现,以避免频繁的蓝屏和复杂的内核调试过程吓退读者。
本书特点
保护与分析全覆盖:本书涵盖软件保护与软件破解的大部分相关技术,不仅介绍了大量的软件保护技术,也介绍了大量的软件破解技术,通过保护与破解技术的对比,读者可以更加深刻地理解和体会各种技术的优缺点。
理论与实践结合:本书不仅通过理论来介绍各种技术,还通过实际代码和操作流程将这些理论转化为实际的程序或者工具。通过本书的“自己动手”部分,读者可以充分体会到将一种技术理论转变为实际操作过程或者程序的整个步骤,并从中体会到理论与实际应用的差别,最终对各种技术有充分、全面的理解。
高阶技术:本书不仅介绍一些常见而普通的技术,在许多方面,本书所介绍的技术即使对很多业内人士来说,也是相当有难度的。通过这些技术的示例和应用,希望能让读者明白:在计算机领域,缺乏的并不是工具,而是idea。
读者对象
本书的内容并非是为初学者设计—尽管我希望能将我的想法表达得足够简单。在开始阅读本书之前,我假定你(读者)至少已经具备以下初步的计算机能力:
基本的C/C++编程能力
基本的x86汇编能力
一定的软件运行原理知识
如果你已经具备以上条件,那么恭喜你,你将可以很好地进入本书的其他部分。由于本书涉及的技术属于两大对立的板块,所以,为了清晰地阐述本书结构,在章节安排上我采取了归纳的形式,各个章节在技术难度上没有绝对的先后关系。读者在阅读的时候,可以根据自己的实际情况调整阅读顺序。
章立春
2016年1月
读完《软件保护及分析技术 原理与实践》的部分内容,我感觉像是经历了一场严谨的学术辩论,只不过主角是代码和安全。作者在探讨高级混淆技术时,没有回避其内在的复杂性和可能带来的调试困难,反而将其作为技术演进的必然代价来审视。这种坦诚的态度让我倍感信赖。书中对反编译技术和内存分析的论述,更是让我大开眼界。我一直以为反编译只是简单地将机器码还原成汇编,但作者却详细介绍了多阶段反编译、污点分析等更精妙的手段,以及如何利用这些技术来识别隐藏的后门或窃密模块。而内存分析的部分,更是将“庖丁解牛”般的细致展现出来,解释了如何从进程内存镜像中提取关键信息,如何追踪敏感数据的流向,甚至是如何在运行时发现被篡改的代码段。作者在举例时,还会巧妙地引用一些经典的安全事件,并将其与书中讲解的技术原理联系起来,这不仅增加了阅读的趣味性,也加深了我对技术实际应用价值的理解。整体而言,这部分内容对于那些致力于深入理解软件运行机制,并希望从中发现安全隐患的读者来说,是不可多得的宝藏。
评分这部《软件保护及分析技术 原理与实践》在探讨软件安全时,展现了一种“攻防兼备”的视野。作者在讲解各种恶意软件分析技术时,并没有将重点放在“如何发现”上,而是更侧重于“如何理解”其行为背后的逻辑。我非常赞赏作者对于沙箱逃逸技术和反调试技巧的深入剖析。他并没有简单地罗列一些技术名词,而是详细解释了这些技术是如何绕过安全防护的,以及我们应该如何识别和防范它们。书中通过分析一些真实世界的恶意样本,详细展示了样本的传播方式、加密机制、通信协议等,这让我对恶意软件的攻击链有了更清晰的认识。而且,作者还非常注重对分析工具的介绍和使用方法的讲解,从IDA Pro、GDB到Wireshark、Sysinternals Suite,都进行了细致的阐述,并结合实际案例进行了演示。这让我感觉,这本书不仅是理论知识的传授,更是实操技能的培养。对于希望提升自己恶意软件分析能力的读者来说,这本书绝对是案头必备。
评分《软件保护及分析技术 原理与实践》这本书,其“实践”二字绝非虚设。我尤其对其中关于软件加壳与脱壳的章节印象深刻。作者并没有停留在理论层面,而是提供了大量实操性的指导,包括如何使用常见的加壳工具,以及在面对不同加壳方式时,应该如何制定脱壳策略。我认真学习了书中关于IAT、EAT、节区结构重定位等核心概念的讲解,并尝试着将书中的代码片段在自己的环境中进行复现。这种“边读边练”的学习方式,极大地增强了我对软件保护技术的直观感受。让我惊喜的是,书中还涉及到了对虚拟机保护和代码虚拟化技术的介绍。我一直觉得这些技术离我很遥远,但作者用通俗易懂的语言,结合大量的图示,详细解释了它们的工作原理,以及如何在实际项目中部署和维护。这让我意识到,即使是看起来高不可攀的技术,只要掌握了其核心原理,并辅以正确的实践方法,也能被我们所用。这部分内容无疑为我打开了新的技术视野,让我对软件安全防护有了更全面的认识。
评分这本《软件保护及分析技术 原理与实践》的开篇,我首先被作者精炼的语言所吸引。序言部分并没有用大段的空泛论述来铺垫,而是直接切入主题,用一种“见招拆招”般的紧凑感,勾勒出了软件保护领域所面临的严峻挑战。我尤其欣赏其中对“知识产权流失”和“恶意代码泛滥”这两个痛点的精准描绘,仿佛作者早已洞悉了我们这些开发者在实际工作中常常遇到的困境。随后,章节的编排也显得颇具匠心,从基础概念的梳理,如不同类型的软件漏洞、常见的攻击向量,到更深层次的原理剖析,比如各种加密算法、混淆技术的内在逻辑,再到最后实践层面的解决方案,整个脉络清晰,循序渐进。其中,关于静态分析和动态分析的对比分析,我读来颇有启发,作者并没有简单地列举工具,而是深入浅出地解释了它们各自的适用场景、优缺点,以及在实际项目中的协同工作方式。这让我意识到,并非所有问题都能依靠单一技术解决,而是需要一套组合拳。对于初学者来说,这无疑是一本绝佳的入门指南,而对于有一定经验的同行,也能从中找到新的视角和思考方式。
评分《软件保护及分析技术 原理与实践》这本书的魅力,还在于其对软件供应链安全和第三方库安全的关注。在信息爆炸的时代,很少有软件能够完全独立运行,而第三方组件的引入,往往也带来了新的安全风险。作者在书中详细探讨了如何对第三方库进行安全审计,如何识别其中可能存在的漏洞或后门,以及如何利用静态分析和动态分析技术来评估其风险。我尤其对书中关于模糊测试(Fuzzing)技术在漏洞挖掘中的应用感到耳目一新。作者不仅解释了模糊测试的基本原理,还详细介绍了各种模糊测试工具的使用方法,以及如何针对不同的目标设计有效的模糊测试用例。这让我认识到,即使是看起来“无懈可击”的软件,也可能隐藏着意想不到的脆弱点。本书的这一部分内容,对于那些关注软件全生命周期安全,特别是对自身产品安全负责任的开发者和安全工程师来说,具有极高的参考价值。
评分方便,快捷,整齐,认真,非常满意!
评分这本书最开始是在看雪上面看到应该是作者在推荐这本书,看目录觉得还可以就在京东拍了一本。今天到货,无磕碰包装完好,下班回家吃完饭就翻着跳感兴趣的地方看了看,总结起来就是:全书收录了目前比较流行的技术,但是个人认为很多重要的东西都是一笔带过,根本没有深入介绍原理或者原因。我最先看的就是软件对虚拟机的检测,这是目前很多游戏保护的重点要点,可是这本书居然只用了一页不到的篇幅就带过了,只说了检测虚拟机bios,比如注册表检测,虚拟硬件检测,标志位检测,vmcs检测,通通没有;紧接着是数据校验的部分,都是一笔带过,感觉这本书的作者根本没有把真正技术性的东西写进来,全书很多方面均有涉猎,但都是匆匆一笔带过无任何原理性的介绍,和看雪那本《加密与解密》差距十万八千里,没有任何可比性。这本书对新手唯一的作用就是让你知道有这些技术,但这技术有什么用?如何用?为什么这样么用?对不起,没有!这个可以有!这个真没有!而对于有一定经验的想提升一下自己的,对不起,书中所写对你一点帮助没有,看看图片中的目录,很多很多东西只用了一页、二页的篇幅来介绍说明,甚至有的一页都不足,请问能写下多少东西,一篇学生作文都比这多!
评分质量好,摸着很舒服,字迹清晰,正版!!!
评分老客户了,东西都不错,赞一个!
评分发货速度快,书的质量不错,正版
评分因为不是专业人士,无法给出专业评价,作为一本开开脑洞的书应该还可以。
评分内容通俗易懂,提高知识眼界
评分还不错 很详细 很浓缩的一本书 需要仔细研读
评分买了很多书,都很不错~很愉快的一次购物!
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有