-
内容大纲
本书以软件反汇编技术为中心,首先带领读者从x86的基础知识开始,学习如何读取、编写和构建赋能全球大量计算机的汇编语言;然后介绍如何使用IDA、Ghidra、Olly等业界最受欢迎的工具对应用程序进行逆向工程;接着介绍如何利用补丁和密钥生成等技术进行软件破解,所有这些都利用了汇编和逆向工程的知识;最后从防御的角度向读者介绍相关技术,使他们能够更好地保护自己的软件。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习x86计算机的运行原理,不仅对逆向工程和软件破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。 -
作者介绍
-
目录
译者序
前言
关于作者
关于技术撰稿人
关于技术编辑
第1章 反编译和架构
1.1 反编译
1.1.1 反编译何时有用
1.1.2 反编译JIT语言
1.1.3 保护JIT语言
1.2 实验:反编译
1.2.1 技能
1.2.2 要点
1.3 架构
1.3.1 计算机架构
1.3.2 汇编
1.4 总结
第2章 x86汇编:数据、模式、寄存器和内存访问
2.1 x86简介
2.2 汇编语法
2.3 数据表示
2.3.1 数字系统的基数
2.3.2 位、字节和字
2.3.3 处理二进制数
2.4 寄存器
2.4.1 x86中的寄存器
2.4.2 寄存器的使用
2.5 内存访问
2.6 寻址模式
2.6.1 绝对寻址
2.6.2 间接寻址
2.6.3 基址加偏移量寻址
2.6.4 索引寻址
2.6.5 基址–索引寻址
2.7 总结
第3章 x86 汇编:指令
3.1 x86指令格式
3.2 x86指令
3.2.1 mov
3.2.2 inc、dec
3.2.3 add、sub
3.2.4 mul
3.2.5 div
3.2.6 and、or、xor
3.2.7 not
3.2.8 shr、shl
3.2.9 sar、sal
3.2.10 nop
3.2.11 lea
3.3 整合所有内容
3.4 常见的x86指令错误
3.5 总结
第4章 构建和运行汇编程序
4.1 输出
4.1.1 控制引脚
4.1.2 由操作系统处理与显卡的交互
4.2 系统调用
4.2.1 sys_write
4.2.2 sys_exit
4.2.3 输出字符串
4.3 汇编和链接
4.3.1 Linux中的汇编与链接
4.3.2 编写汇编程序
4.4 objdump
4.5 实验:Hello World
4.5.1 技能
4.5.2 要点
4.6 ASCII
4.6.1 识别ASCII字符串
4.6.2 ASCII操作技巧
4.7 总结
第5章 理解条件码
5.1 条件码
5.1.1 eflags
5.1.2 影响状态标志的操作
5.2 总结
第6章 分析和调试汇编代码
6.1 二进制分析
6.1.1 静态分析与动态分析
6.1.2 调试
6.2 断点
6.2.1 软件断点
6.2.2 硬件断点
6.3 gdb
6.4 段错误
6.5 实验:鲨鱼模拟器3000
6.5.1 技能
6.5.2 要点
6.6 消除噪声
6.7 总结
第7章 函数和控制流
7.1 控制流
7.1.1 指令指针
7.1.2 控制流指令
7.2 x86中的逻辑结构
7.2.1 if(...){...}
7.2.2 if(...){...}else{...}
7.2.3 do{...}while(...);
7.2.4 while(...){...}
7.2.5 for(...;...;...){...}
7.2.6 switch(...){...}
7.2.7 continue
7.2.8 break
7.2.9 &&
7.2.10 ||
7.3 栈
7.3.1 栈是如何工作的
7.3.2 x86栈
7.4 函数调用与栈帧
7.4.1 x86中的函数
7.4.2 栈分析
7.4.3 调用约定
7.4.4 cdecl
7.4.5 栈帧
7.4.6 宏观程序
7.4.7 需要记住的事情
7.5 总结
第8章 编译器和优化器
8.1 寻找目标代码入口点
8.2 编译器
8.2.1 优化
8.2.2 剥离
8.2.3 链接
8.3 总结
第9章 逆向工程:工具和策略
9.1 实验:RE Bingo
9.1.1 技能
9.1.2 要点
9.2 基础侦察
9.2.1 objdump
9.2.2 ltrace和strace
9.2.3 strings
9.2.4 Dependency Walker
9.3 逆向工程的策略
9.3.1 寻找感兴趣的区域
9.3.2 迭代注释代码
9.4 总结
第10章 破解:工具和策略
10.1 密钥检查器
10.1.1 不好的方法
10.1.2 合理的方法
10.1.3 更好的方法
10.1.4 最佳方法
10.1.5 其他的建议
10.2 密钥生成器
10.2.1 为什么要创建密钥生成器
10.2.2 密钥生成的原理
10.2.3 破解各种类型的密钥检查
10.2.4 对抗密钥生成器
10.3 实验:密钥生成器
10.3.1 技能
10.3.2 要点
10.4 Procmon
10.4.1 示例:Notepad.exe
10.4.2 怎样用Procmon辅助逆向工程和破解
10.5 Resource Hacker
10.5.1 示例
10.5.2 小实验:Windows计算器
10.6 打补丁
10.6.1 打补丁与密钥生成
10.6.2 在哪里打补丁
10.6.3 nop指令
10.7 其他调试器
10.7.1 OllyDbg
10.7.2 Immunity
10.7.3 x86dbg
10.7.4 WinDbg
10.8 使用Immunity调试工具进行调试
10.8.1 Immunity:汇编代码
10.8.2 Immunity:模块
10.8.3 Immunity:字符串
10.8.4 Immunity:运行程序
10.8.5 Immunity:异常
10.8.6 Immunity:重写程序
10.9 实验:使用Immunity进行破解
10.9.1 技能
10.9.2 要点
10.10 总结
第11章 打补丁和高级工具
11.1 在010编辑器中打补丁
11.2 CodeFusion补丁
11.3 Cheat Engine
11.3.1 Cheat Engine:打开进程
11.3.2 Cheat Engine:查看内存
11.3.3 Cheat Engine:字符串引用
11.3.4 Cheat Engine:重写程序
11.3.5 Cheat Engine:复制字节
11.3.6 Cheat Engine:获取地址
11.4 实验:破解LaFarge
11.4.1 技能
11.4.2 要点
11.5 IDA
11.5.1 IDA:字符串
11.5.2 IDA:基本块
11.5.3 IDA:函数和变量
11.5.4 IDA:注释
11.5.5 IDA:路径
11.6 IDA补丁
11.7 实验:IDA逻辑流程
11.7.1 技能
11.7.2 要点
11.8 Ghidra
11.9 实验:使用IDA进行破解
11.9.1 技能
11.9.2 要点
11.10 总结
第12章 防御
12.1 混淆技术
12.1.1 评估混淆技术
12.1.2 自动化混淆
12.1.3 混淆器
12.1.4 攻克混淆器
12.2 实验:混淆技术
12.2.1 技能
12.2.2 要点
12.3 反调试
12.3.1 IsDebuggerPresent()
12.3.2 调试寄存器
12.3.3 读时间戳计数器
12.3.4 无效CloseHandle()调用
12.3.5 目录扫描
12.3.6 攻击性反调试
12.3.7 攻克反调试技术
12.4 实验:反调试
12.4.1 技能
12.4.2 要点
12.5 总结
第13章 高级防御技术
13.1 防篡改技术
13.1.1 哈希
13.1.2 签名
13.1.3 水印
13.1.4 软件守护
13.2 加壳技术
13.2.1 加壳器是如何工作的
13.2.2 这是强大的保护机制吗
13.2.3 破解加壳技术
13.2.4 PEiD
13.3 实验:检测和脱壳
13.3.1 技能
13.3.2 要点
13.4 虚拟化技术
13.4.1 代码虚拟化是如何工作的
13.4.2 分层虚拟化
13.4.3 虚拟化存在的问题
13.4.4 这是强大的保护机制吗
13.4.5 破解虚拟化技术
13.5 加密器/解密器
13.5.1 这种保护机制有用吗
13.5.2 攻克加密器
13.6 总结
第14章 检测与预防
14.1 循环冗余校验
14.2 代码签名
14.2.1 如何进行代码签名
14.2.2 如何验证已签名的应用程序
14.2.3 代码签名有效吗
14.2.4 代码签名与循环冗余校验
14.2.5 这是强大的保护机制吗
14.3 RASP
14.3.1 钩子函数
14.3.2 RASP的风险
14.3.3 这是强大的保护机制吗
14.4 白名单
14.4.1 如何运行白名单
14.4.2 这是强大的保护机制吗
14.5 黑名单
14.6 远程认证
14.6.1 远程认证示例
14.6.2 这是强大的保护机制吗
14.7 实验:进程监控
14.7.1 技能
14.7.2 要点
14.8 总结
第15章 法律
15.1 影响逆向工程的美国法律
15.1.1 《数字千年版权法》
15.1.2 《计算机欺诈和滥用法案》
15.1.3 《版权法》
15.1.4 重要法庭判例
15.1.5 合理使用
15.1.6 DMCA研究免责
15.1.7 合法性
15.2 总结
第16章 高级技术
16.1 时间旅行调试
16.2 二进制插桩
16.3 中间表示
16.4 反编译
16.5 自动化结构恢复
16.6 可视化
16.7 去混淆
16.8 定理证明器
16.9 符号分析
16.10 总结
第17章 附加话题
17.1 栈溢出
17.1.1 shellcode
17.1.2 栈溢出与栈保护
17.2 关联C代码与x86汇编代码
17.2.1 在x86代码中使用C函数
17.2.2 在C代码中使用x86函数
17.2.3 _start与main()
17.2.4 标准参数
17.2.5 混合使用C语言和汇编语言
17.3 总结
结语
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...