新書推薦:
《
血色帝国:近代英国社会与美洲移民
》
售價:NT$
265.0
《
海外中国研究·王羲之:六朝贵族的世界(艺术系列)
》
售價:NT$
811.0
《
唐宋绘画史 全彩插图版
》
售價:NT$
449.0
《
“御容”与真相:近代中国视觉文化转型(1840-1920)
》
售價:NT$
505.0
《
鸣沙丛书·大风起兮:地方视野和政治变迁中的“五四”(1911~1927)
》
售價:NT$
454.0
《
海洋、岛屿和革命:当南方遭遇帝国(文明的另一种声音)
》
售價:NT$
485.0
《
铝合金先进成型技术
》
售價:NT$
1214.0
《
英雄之旅:把人生活成一个好故事
》
售價:NT$
398.0
內容簡介:
Ghidra是美国国家安全局(NSA)开发的免费和开源的逆向工程工具,已于2019年的RSA正式发布,包含了一整套功能齐全的高级软件分析工具,可以帮助广大研究人员在Windows、macOS和Linux各大常见系统平台上进行源代码分析。目前已在技术安全社区掀起一股学习热潮。
關於作者:
Chris Eagle从事逆向工程工作已有40年。他是《IDA Pro权威指南》的作者,以及非常受欢迎的逆向工程培训专家。他开发了许多逆向工程工具,并在Blackhat、Defcon和Shmoocon等会议上发表演讲。Kara Nance是一名私人安全顾问。多年来一直是计算机科学教授。她曾在Honeynet Project董事会任职,并在世界各地的会议上发表过多次演讲。她喜欢构建Ghidra扩展并定期提供Ghidra培训。杨超,毕业于西安电子科技大学,L-Team成员,CISP,CISSP,《CTF竞赛权威指南(Pwn篇)》作者。目前就职于某头部造车新势力,从事车联网安全研究和攻防测试工作,拥有多个CVE。活跃在开源社区,项目star数6000+,https://github.com/firmianay。
目錄 :
第一部分 简介第1章 反汇编简介11.1 反汇编理论11.2 何为反汇编21.3 为何反汇编21.3.1 恶意软件分析31.3.2 漏洞分析31.3.3 软件互操作性31.3.4 编译器验证31.3.5 显示调试信息41.4 如何反汇编41.4.1 基础反汇编算法41.4.2 线性扫描反汇编51.4.3 递归下降反汇编61.5 小结9第2章 逆向与反汇编工具102.1 分类工具102.1.1 file102.1.2 PE Tools122.1.3 PEiD132.2 摘要工具142.2.1 nm142.2.2 ldd162.2.3 objdump172.2.4 otool182.2.5 dumpbin182.2.6 c++filt192.3 深度检测工具202.3.1 strings202.3.2 反汇编器212.4 小结23第3章 初识Ghidra243.1 Ghidra许可证243.2 Ghidra版本243.3 Ghidra支持资源243.4 下载Ghidra253.5 安装Ghidra253.5.1 Ghidra的目录结构263.5.2 启动Ghidra273.6 小结27第二部分 Ghidra的基本用法第4章 开始使用Ghidra284.1 启动Ghidra284.2 创建新项目294.2.1 Ghidra文件加载304.2.2 使用原始二进制加载器324.3 使用Ghidra分析文件334.4 初始分析期间的桌面行为364.5 Ghidra桌面提示和技巧374.6 小结38第5章 Ghidra数据显示395.1 CodeBrowser395.2 CodeBrowser窗口415.2.1 清单窗口425.2.2 创建额外的反汇编窗口455.2.3 函数图形化视图465.2.4 程序树窗口495.2.5 符号树窗口505.2.6 数据类型管理器窗口535.2.7 控制台窗口535.2.8 反编译器窗口535.3 其他窗口555.3.1 字节窗口555.3.2 数据定义窗口565.3.3 字符串定义窗口585.3.4 符号表和符号引用窗口585.3.5 内存映射窗口605.3.6 函数调用图窗口615.4 小结62第6章 理解Ghidra反汇编636.1 反汇编导航636.1.1 名称和标签636.1.2 在Ghidra中导航646.1.3 Go To对话框656.1.4 导航历史656.2 栈帧666.2.1 函数调用机制666.2.2 调用约定686.2.3 栈帧的其他思考716.2.4 局部变量布局726.2.5 栈帧示例726.3 Ghidra栈视图756.3.1 Ghidra栈帧分析756.3.2 清单视图中的栈帧766.3.3 反编译辅助栈帧分析786.3.4 局部变量作为操作数796.3.5 Ghidra栈编辑器806.4 搜索826.4.1 搜索程序文本826.4.2 搜索内存836.5 小结84第7章 反汇编操作857.1 操作名称和标签857.1.1 重命名参数和局部变量867.1.2 重命名标签897.1.3 添加新标签897.1.4 编辑标签907.1.5 删除标签917.1.6 导航标签917.2 注释917.2.1 行末注释927.2.2 前注释与后注释927.2.3 块注释937.2.4 可重复注释947.2.5 参数和局部变量注释947.2.6 注解957.3 基本的代码转换957.3.1 更改代码显示选项957.3.2 格式化指令操作数967.3.3 操纵函数987.3.4 数据与代码的转换1007.4 基本的数据转换1007.4.1 指定数据类型1017.4.2 处理字符串1027.4.3 定义数组1037.5 小结104第8章 数据类型和数据结构1058.1 理解数据1058.2 识别数据结构的使用1068.2.1 数组成员访问1078.2.2 结构体成员访问1148.3 用Ghidra创建结构体1208.3.1 创建结构体1208.3.2 编辑结构体成员1228.3.3 应用结构体布局1248.4 C++逆向入门1258.4.1 this指针1258.4.2 虚函数和虚表1268.4.3 对象生命周期1298.4.4 名称改编1308.4.5 运行时类型识别1318.4.6 继承关系1328.4.7 C++逆向参考资料1338.5 小结133第9章 交叉引用1349.1 引用基础1349.1.1 交叉引用(反向引用)1359.1.2 引用示例1379.2 引用管理窗口1419.2.1 XRefs窗口1429.2.2 References To窗口1429.2.3 符号引用窗口1439.2.4 高级引用操作1439.3 小结144第10章 图形14510.1 基本块14510.2 函数图14610.3 函数调用图15210.4 树15710.5 小结157第三部分 让Ghidra为您工作第11章 协作逆向工程15811.1 团队协作15811.2 Ghidra Server设置15811.3 共享项目16111.3.1 创建共享项目16111.3.2 项目管理16211.4 项目窗口菜单16311.4.1 文件菜单16311.4.2 编辑菜单16511.4.3 项目菜单16611.5 项目仓库16911.5.1 版本控制16911.5.2 示例场景17111.6 小结175第12章 自定义Ghidra17612.1 CodeBrowser窗口17612.1.1 重新排列窗口17712.1.2 编辑工具选项17712.1.3 编辑工具17912.1.4 特殊工具编辑功能18012.1.5 保存CodeBrowser布局18112.2 Ghidra项目窗口18212.3 工具菜单18512.4 工作区18912.5 小结189第13章 Ghidra功能扩展19013.1 导入文件19013.2 分析器19213.3 词模型19313.4 数据类型19513.5 Function ID分析器19813.6 Function ID插件19913.6.1 插件示例:UPX20013.6.2 插件示例:分析静态库20413.7 小结207第14章 Ghidra脚本开发20814.1 脚本管理器20814.1.1 脚本管理器窗口20914.1.2 脚本管理器工具栏21014.2 脚本开发21014.2.1 编写Java脚本21014.2.2 编辑脚本示例:正则搜索21214.2.3 编写Python脚本21514.2.4 支持其他语言21714.3 Ghidra API简介21714.3.1 地址接口21814.3.2 符号接口21814.3.3 引用接口21814.3.4 GhidraScript类21814.3.5 Program类22414.3.6 函数接口22514.3.7 指令接口22514.4 Ghidra脚本开发示例22614.4.1 示例1:枚举函数22614.4.2 示例2:枚举指令22614.4.3 示例3:枚举交叉引用22714.4.4 示例4:寻找函数调用22814.4.5 示例5:模拟汇编语言行为22914.5 小结231第15章 Eclipse和GhidraDev23215.1 Eclipse23215.1.1 Eclipse集成23215.1.2 启动Eclipse23315.1.3 使用Eclipse编辑脚本23315.2 GhidraDev菜单23415.2.1 GhidraDev→New23415.2.2 浏览包资源管理器23815.3 示例:Ghidra分析器模块项目24315.3.1 步骤1:定义问题24315.3.2 步骤2:创建Eclipse模块24415.3.3 步骤3:构建分析器24415.3.4 步骤4:使用Eclipse测试分析器24915.3.5 步骤5:添加分析器到Ghidra安装中25015.3.6 步骤6:使用Ghidra测试分析器25015.4 小结252第16章 Ghidra无头模式25316.1 入门25316.1.1 步骤1:启动Ghidra25416.1.2 步骤2和3:在指定位新建Ghidra项目25416.1.3 步骤4:将文件导入项目25516.1.4 步骤5和6:自动分析文件、保存并退出25516.1.5 选项和参数25716.2 编写脚本26316.2.1 HeadlessSimpleROP26316.2.2 自动创建FidDb26716.3 小结268第四部分 深入探索第17章 Ghidra加载器26917.1 未知文件分析27017.2 手动加载 Windows PE 文件27117.3 示例一:简易Shellcode加载器27917.3.1 步骤0:准备工作28017.3.2 步骤1:定义问题28217.3.3 步骤2:创建Eclipse模块28217.3.4 步骤3:构建加载器28317.3.5 步骤4:添加加载器到Ghidra中28717.3.6 步骤5:在Ghidra中测试加载器28817.4 示例二:简易Shellcode源代码 加载器28917.4.1 更新1:修改导入查询的响应28917.4.2 更新2:在源代码中定位Shellcode29017.4.3 更新3:将Shellcode转化为二进制数组29017.4.4 更新4:导入二进制数组29117.4.5 生成结果29117.5 示例三:简易ELF加载器29217.5.1 统一代码规范29317.5.2 ELF头部格式29317.5.3 明确支持的加载规格29417.5.4 将文件内容加载到Ghidra中29517.5.5 数据格式化与添加入口点29617.5.6 语言定义文件29717.5.7 选项文件29717.5.8 结果29817.6 小结300第18章 Ghidra处理器30118.1 理解Ghidra处理器模块30218.1.1 Eclipse处理器模块30218.1.2 SLEIGH30318.1.3 处理器手册30418.2 修改Ghidra处理器模块30518.2.1 问题陈述30618.2.2 示例1:在处理器模块中添加指令30618.2.3 示例2:修改处理器模块中的指令31218.2.4 示例3:在处理器模块中添加寄存器31918.3 小结321第19章 Ghidra反编译器32219.1 反编译器分析32219.2 反编译器窗口32419.2.1 示例1:在反编译器窗口中编辑32519.2.2 示例2:无返回值函数32919.2.3 示例3:自动创建结构体33119.3 小结334第20章 编译器变体3362