新書推薦:
《
白夜追凶(上下)
》
售價:NT$
500.0
《
财富、战争与智慧——二战股市风云录
》
售價:NT$
602.0
《
纳特·特纳的自白
》
售價:NT$
383.0
《
低空经济:中国经济发展新引擎
》
售價:NT$
403.0
《
汉字学理与小学汉字教学
》
售價:NT$
408.0
《
即将到来的能源战争
》
售價:NT$
407.0
《
时刻人文·臆造南洋:马来半岛的神鬼人兽
》
售價:NT$
296.0
《
心智、现代性与疯癫:文化对人类经验的影响
》
售價:NT$
857.0
|
編輯推薦: |
本书围绕软件反汇编领域展开。它从x86汇编语言的基础知识开始,逐步介绍如何利用这些知识进行逆向工程和规避软件保护措施。?本书从x86开始,首先介绍如何阅读、编写和构建驱动世界上大量计算机的汇编代码。然后,介绍如何使用一些业界最喜欢的工具(如IDA、Ghidra、Olly等)对应用程序进行逆向工程。接着,介绍如何使用诸如补丁和密钥生成等技术进行软件破解,所有这些技术都利用了汇编和逆向工程的力量。最后,从防御角度审视了软件破解。所涉及的具体知识大致分为以下几类: 汇编:计算机架构、x86、系统调用、构建和链接、ASCII、条件码、gdb、控制流、栈、调用约定。 逆向工程:侦察、字符串、逆向策略、剥离、链接、优化、编译器、行业工具。 破解:补丁、密钥检查器、密钥生成器、Resource Hacker、Dependency Walker。 防御:反调试、防篡改、加壳、加密、解密、白名单、黑名单、RASP、代码签名、混淆等。本书主要面向分析、研究、破解或防御软件应用程序的安全研究人员、逆向工程师和防御者以及开发者,旨在为读者提供技术和相关知识,让他们更好地保护自己的软件。
|
內容簡介: |
本书以软件反汇编技术为中心,首先带领读者从x86的基础知识开始,学习如何读取、编写和构建赋能全球大量计算机的汇编语言;然后介绍如何使用IDA、Ghidra、Olly 等业界最受欢迎的工具对应用程序进行逆向工程;接着介绍如何利用补丁和密钥生成等技术进行软件破解,所有这些都利用了汇编和逆向工程的知识;最后从防御的角度向读者介绍相关技术,使他们能够更好地保护自己的软件。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习x86计算机的运行原理,不仅对逆向工程和软件破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。
|
關於作者: |
斯蒂芬妮·多马斯
(Stephanie Domas)
Canonical首席信息安全官(CISO)、英特尔(Intel)前首席安全技术战略师。她在道德黑客、逆向工程和高级漏洞分析方面拥有逾十年经验,作为一位知名行业顾问,她的服务对象涵盖初创企业和行业巨头。她目前致力于使Canonical成为开源界最受信赖的计算伙伴。在英特尔时,她负责全公司的安全技术战略,推动英特尔在安全领域实力、竞争力和收益的不断增长。她是一位充满激情的教育家、战略家、演说家、顾问和安全爱好者。
克里斯托弗·多马斯
(Christopher Domas)
知名硬件安全研究员。他的研究重点在于固件、硬件及处理器的底层安全漏洞利用。他因针对还不存在的问题提出天马行空的解决方案而闻名,其所提解决方案包括全球首个单指令的C语言编译器(M/o/Vfuscator)、能够生成程序控制流图的开发工具集(REpsych),以及在vi文本编辑器里实现的图灵机。
|
目錄:
|
目 录
译者序
前言
关于作者
关于技术撰稿人
关于技术编辑
第1章 反编译和架构 1
1.1 反编译 1
1.1.1 反编译何时有用 1
1.1.2 反编译JIT语言 2
1.1.3 保护JIT语言 3
1.2 实验:反编译 4
1.2.1 技能 4
1.2.2 要点 4
1.3 架构 4
1.3.1 计算机架构 4
1.3.2 汇编 6
1.4 总结 10
第2章 x86汇编:数据、模式、寄存器
和内存访问 11
2.1 x86简介 11
2.2 汇编语法 12
2.3 数据表示 13
2.3.1 数字系统的基数 13
2.3.2 位、字节和字 14
2.3.3 处理二进制数 16
2.4 寄存器 17
2.4.1 x86中的寄存器 18
2.4.2 寄存器的使用 19
2.5 内存访问 20
2.6 寻址模式 23
2.6.1 绝对寻址 23
2.6.2 间接寻址 23
2.6.3 基址加偏移量寻址 24
2.6.4 索引寻址 24
2.6.5 基址–索引寻址 24
2.7 总结 25
第3章 x86 汇编:指令 26
3.1 x86指令格式 26
3.2 x86指令 27
3.2.1 mov 28
3.2.2 inc、dec 30
3.2.3 add、sub 30
3.2.4 mul 30
3.2.5 div 31
3.2.6 and、or、xor 31
3.2.7 not 32
3.2.8 shr、shl 32
3.2.9 sar、sal 32
3.2.10 nop 33
3.2.11 lea 33
3.3 整合所有内容 34
3.4 常见的x86指令错误 35
3.5 总结 36
第4章 构建和运行汇编程序 37
4.1 输出 37
4.1.1 控制引脚 38
4.1.2 由操作系统处理与显卡的交互 39
4.2 系统调用 39
4.2.1 sys_write 39
4.2.2 sys_exit 40
4.2.3 输出字符串 40
4.3 汇编和链接 41
4.3.1 Linux中的汇编与链接 41
4.3.2 编写汇编程序 42
4.4 objdump 45
4.5 实验:Hello World 45
4.5.1 技能 45
4.5.2 要点 46
4.6 ASCII 46
4.6.1 识别ASCII字符串 47
4.6.2 ASCII操作技巧 48
4.7 总结 48
第5章 理解条件码 49
5.1 条件码 49
5.1.1 eflags 49
5.1.2 影响状态标志的操作 52
5.2 总结 55
第6章 分析和调试汇编代码 56
6.1 二进制分析 56
6.1.1 静态分析与动态分析 56
6.1.2 调试 57
6.2 断点 57
6.2.1 软件断点 57
6.2.2 硬件断点 58
6.3 gdb 58
6.4 段错误 63
6.5 实验:鲨鱼模拟器3000 63
6.5.1 技能 64
6.5.2 要点 64
6.6 消除噪声 64
6.7 总结 65
第7章 函数和控制流 66
7.1 控制流 66
7.1.1 指令指针 66
7.1.2 控制流指令 67
7.2 x86中的逻辑结构 70
7.2.1 if(...) {...} 70
7.2.2 if(...) {...} else{...} 71
7.2.3 do {...} while (...); 75
7.2.4 while (...) {...} 76
7.2.5 for (...; ...; ...) {...} 77
7.2.6 switch (...) {...} 79
7.2.7 continue 83
7.2.8 break 84
7.2.9 && 86
7.2.10 || 86
7.3 栈 87
7.3.1 栈是如何工作的 87
7.3.2 x86栈 87
7.4 函数调用与栈帧 91
7.4.1 x86中的函数 91
7.4.2 栈分析 94
7.4.3 调用约定 95
7.4.4 cdecl 96
7.4.5 栈帧 100
7.4.6 宏观程序 105
7.4.7 需要记住的事情 106
7.5 总结 107
第8章 编译器和优化器 108
8.1 寻找目标代码入口点 108
8.2 编译器 110
8.2.1 优化 111
8.2.2 剥离 113
8.2.3 链接 114
8.3 总结 116
第9章 逆向工程:工具和策略 117
9.1 实验:RE Bingo 117
9.1.1 技能 117
9.1.2 要点 118
9.2 基础侦察 118
9.2.1 objdump 118
9.2.2 ltrace和strace 119
9.2.3 strings 122
9.2.4 Dependency Walker 123
9.3 逆向工程的策略 124
9.3.1 寻找感兴趣的区域 124
9.3.2 迭代注释代码 124
9.4 总结 125
第10章 破解:工具和策略 126
10.1 密钥检查器 126
10.1.1 不好的方法 127
10.1.2 合理的方法 127
10.1.3 更好的方法 128
10.1.4 最佳方法 128
10.1.5 其他的建议 129
10.2 密钥生成器 130
10.2.1 为什么要创建密钥生成器 130
10.2.2
|
內容試閱:
|
前 言
软件逆向工程和破解是历史悠久且内容丰富的技术领域。几十年来,软件开发者一直努力在其应用程序中构筑防御措施,以保护知识产权,避免对程序代码的未授权修改。几乎从逆向工程师开始为了兴趣或盈利而研究和改动代码的那一刻起,软件破解的技艺就存在了。
在详细探讨逆向工程的工作原理之前,理解这些技术的背景非常重要。下面将介绍你能从本书中获得什么,同时深入讲解软件逆向工程和破解的历史背景及法律相关的考量。
本书目标读者
本书是给所有想探索、理解并修改封闭源代码软件的人准备的,无论是安全领域的专业人员还是充满热情的业余爱好者。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习 x86 计算机的运行原理,不仅对软件逆向工程和破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。书中还将详细介绍软件破解的过程,让读者了解真实世界中破解者所使用的工具和技术,并通过实际动手破解真实应用程序的实验来验证学到的知识。此外,书中也会涉及防御策略,帮助读者理解如何对抗软件破解攻击。
通过掌握攻击与防御技术,读者可以成为出色的软件破解专家或软件防护专家。
本书值得期待的内容
本书主要基于逆向工程的三大核心原则:
没有破解不了的软件。
以提高速度为进攻目标。
以放慢速度为防守目标。
基于这种理念,人们可以针对任何软件实施逆向工程,以揭示其秘密,绕过其保护机制。问题只在于时间的长短。
就像网络安全的其他领域一样,攻击方向和防御方向的逆向工程师都能从一套类似的技能中受益。本书将介绍以下三种相互关联的技能:
逆向工程:一种拆解软件并解析其运作方式的过程。
破解:在逆向工程的基础上,通过操控程序的内部机制让其执行原本不打算执行的操作。
防御: 尽管所有的软件都可以被破解,但防御措施可以让破解程序的过程变得更加困难和耗时。
不理解逆向工程和破解,防御者就无法制定有效的保护措施。另外,如果攻击者能够理解程序的运作方式并进行操作,他们就能更有效地绕过并战胜这些保护措施。
本书结构
本书是根据这三种核心技能来组织的。结构如下:
技能主题目标
技能主题目标
逆向工程侦察掌握工具、方法和思维模式,以便能够分析、解构软件并深入理解其内部运作方式
密钥检查器
密钥生成器
进程监控
资源操纵
静态分析
动态分析
编写密钥生成代码
破解软件
破解手动打补丁掌握工具、方法和思维模式,以便能够修改软件
自动化补丁程序
高级动态分析
跟踪执行
高级静态分析
试用期限
提示框
更多密钥生成器
更多破解技术
防御混淆/反混淆掌握防御和反制技术
评估防御态势
探索高级主题
实践逆向工程和破解工具、技术和思维模式
反调试/逆反调试
加壳/脱壳
加密/解密
架构级防御
法律合规
时间旅行调试
二进制插桩
中间表示
防御反编译
自动化结构恢复
可视化
定理证明
符号分析
破解盛宴
实践经验和实验
学习逆向工程和软件破解最好的方式就是进行实践。因此,本书将包含几个动手实验,以演示描述的概念。
本书的目标不是教授一套特定的工具和技术。虽然我们的重点是运行在 Windows 上的 x86 软件,但很多方法和技术也可以应用到其他平台上。我们会尽量展示多种工具,包括开源软件、免费软件、共享软件,以及商业解决方案。理解哪些工具可用,以及它们的优势和劣势之后,就能更有效地选择适合任务的工具。
我们的动手实验和练习将针对不同目标进行逆向工程与破解,这些目标包括:
真实软件:一些练习会使用精选的真实软件,以避免侵犯版权。
专为本书编写的软件:为了阐述用现实世界的例子难以展示的概念而专门为本书编写的软件。
破解练习程序(crackme):这是由破解者开发的软件,用于阐述概念或挑战他人。
随书文件下载
本书提到了一些额外的文件,如实验或工具对应的文件。这些文件可以从 https://github.com/DazzleCatDuo/X86-SOFTWARE-REVERSE-ENGINEERING-CRACKING-AND-COUNTER-MEASURES 下载。
历史
在深入了解破解和逆向工程的细节之前,了解其历史是非常有用的。软件保护措施以及用来克服它们的技术和方法已经演变了几十年。
第一个软件保护措施
第一个软件版权保护措施出现在20世纪70年代。这个领域的一些早期行动者如下:
AppleⅡ:AppleⅡ引入了专有的磁盘驱动器,这类磁盘驱动器可以在半轨道进行写入,允许写入额外的环,也允许错开并重叠扇区。这样做的目的是让非 Apple 机器和不会读写这些奇特偏移位置的软件无法使用这些磁盘。
Atari 800:Atari 800 系统会有意在其磁盘中
|
|