逆向分析实战
2019-07-02 11:02:01 2 举报
AI智能生成
《逆向分析实战》思维导图
作者其他创作
大纲/内容
第六章 十六进制编辑器与反编译工具
关键词
编辑器
十六进制
C32Asm
WinHex
反编译
6.1 十六进制编辑器与反编译工具
6.1.1 文件的打开方式
6.1.2 反汇编模式
1.CALL/JMP指令的跟踪
2.输入表调用
3.分析CrackMe1的流程
4.其他功能介绍
6.1.3 十六进制模式
1.数据的复制
(1)复制
(2)HEX格式化
(3)C格式化和汇编格式化
2.数据的编辑
(1)数据的插入/填充
(2)数据的修改
(3)内存编辑
(4)数据解释器与PE信息
6.2 WinHex
6.2.1 内存搜索功能
6.2.2 使用模板解析数据
1.使用WinHex打开磁盘
2.解析MBR
6.2.3 完成一个简单的模板
6.3 其他十六进制编辑器
6.3.1 UltraEdit简介
63.2 010Editor简介
6.4 反编译工具介绍
6.4.1 DeDe反编译工具
1.DeDe的主要功能介绍
模块信息
Units Info
窗体
过程
2.DeDe的菜单功能介绍
(1)转储活动进程
(2)操作码转汇编
6.4.2 VB反编译工具
1.VB Decompiler
2.VBExplorer
6.4.3 .NET反编译工具
1.IL DASM
2.Xenocode Fox
6.4.4 Java反编译工具
6.5 总结
第七章 IDA与逆向
逆向工具
IDA
逆向分析
C语言逆向
7.1 IDA工具介绍
7.1.1 IDA的启动与关闭
1.文件的打开
2.文件的关闭
7.1.2 IDA常用界面介绍
1.IDA主窗口介绍
(1)菜单和工具栏
(2)导航栏
(3)逆向工作区
(4)消息状态窗口
(5)脚本命令窗口
(6)窗口布局
2.反汇编窗口(IDA View)
(1)反汇编视图方式
(2)反汇编窗口介绍
3.十六进制编辑窗口(Hex View)
4.字符串窗口和函数窗口
(1)字符串窗口(Strings Window)
(2)函数窗口(Functions Window)
5.导入表和导出表窗口
(1)导入表窗口(Imports)
(2)导出表窗口(Exports)
6.强大的F5键功能
7.其他窗口
7.1.3 IDA的脚本功能
1.分析程序
2.解码脚本
(1)IDPy脚本
(2)IDC脚本
7.2 C语言代码逆向基础
7.2.1 函数的识别
1.简单的C语言函数调用程序
2.函数的逆向分析
7.2.2 if...else...结构分析
1.if...else...分支结构例子程序
2.逆向反汇编解析
3.if...else...结构小结
7.2.3 switch结构分析
1.switch分支结构例子程序
7.2.4 循环结构分析
1.for循环结构
2.do...while循环结构
3.while循环结构
7.3 总结
第八章 逆向工具原理实现
PE结构
GetProcAddress函数
调试API
8.1 PE工具的开发
8.1.1 GetProcAddress函数的使用
8.1.2 GetProcAddress函数的实现
8.2 调试工具的开发
8.2.1 常见的三种断点
8.2.2 调试API函数及相关结构体介绍
1.创建调试关系
2.判断进程是否处于被调试状态
3.断点异常函数
4.调试事件
5.调试循环
6.内存操作
7.线程环境相关API及结构体
8.2.3 打造一个密码显示器
8.3 总结
参考文献
加密与解密
Windows程序设计
Windows核心编程
Reversing:逆向工程解密
ROOTKITS—Windows内核的安全防护
逆向分析实战
第一章 数据的存储及表示形式
进制
数据表示
数据转换
数据存储
1.1 进制及进制的转换
1.1.1 现实生活中的进制与计算机的二进制
1.1.2 进制的定义
1.1.3 进制的转换
1.二进制转十进制
2.十六进制与二进制的转换
1.2 数据宽度、字节序和ASCII码
1.2.1 数据的宽度
1.2.2 数值的表示范围
1.2.3 字节序
1.2.4 ASCII码
1.3 在OD中查看数据
1.OD的选型
2.熟悉OD主界面
3.在数据窗口中查看数据
4.通过命令窗口改变数据窗口显示方式
1.4 编成判断主机字节序
1.4.1 字节序相关函数
1.4.2 编程判断主机字节序
1.取值比较法
2.直接转换比较法
1.5 总结
第二章 汇编语言入门
汇编
指令
2.1 x86汇编语言介绍
2.1.1 寄存器
1.CPU工作模式
2.寄存器介绍
3.通用寄存器
4.指令指针寄存器
5.段寄存器
6.标志寄存器
2.1.2 在OD中认识寄存器
1.寄存器窗口
2.寄存器窗口的操作
2.2 常用汇编指令集
2.2.1 指令介绍
2.2.2 常用指令介绍
1.数据传递指令
(1)mov指令
(2)xchg指令
(3)lea指令
2.逻辑运算指令
(1)and指令
(2)or指令
(3)not指令
(4)xor指令
(5)总结以上几条指令的特殊用法
3.算术运算指令
(1)add指令
(2)sub指令
(3)adc指令
(4)sbb指令
(5)inc指令
(6)dec指令
4.堆栈操作指令
(1)堆栈数据操作指令
(2)保存/恢复通用寄存器现场
(3)保存/恢复标志寄存器
5.转移指令
(1)无条件转移指令
(2)条件转移指令
(3)循环指令
(4)调用过程(函数)指令和返回指令
6.串操作指令
(1)串传输指令
(2)串存储指令
(3)重复前缀指令
2.3 寻址方式
1.指令中给出数据
2.数据在寄存器中
3.数据在内存中
(1)直接寻址
(2)寄存器间接寻址
(3)其他
2.4 总结
第三章 熟悉调试工具 OllyDbg
OllyDbg
调试
OD插件
OD脚本
3.1 认识OD调试环境
3.1.1 启动调试
1.直接打开被调试程序
2.附加到被调试程序所产生的进程上
3.实时调试
3.1.2 熟悉OD窗口
1.CPU窗口
(1)反汇编窗口
(2)寄存器窗口
(3)栈窗口
(4)数据窗口
2.内存窗口
3.断点窗口
4.调用堆栈窗口
5.Window窗口
6.补丁窗口
7.其他
3.2 OD中的断点及跟踪功能
3.2.1 OD中设置断点的方法
1.软件断点
(1)普通操作
(2)命令操作
2.硬件断点
(1)菜单操作
3.内存断点
4.一次性内存访问断点
5.条件断点
(1)条件断点
(2)条件记录断点
6.消息断点
3.2.2 OD中跟踪代码的介绍
1.单步
2.查看/运行到指定的位置
3.查看CALL/JMP指令目的地址的反汇编代码
4.返回调用处
3.3 OD中的查找功能和编辑功能
3.3.1 OD的搜索功能
1.命令
2.命令序列
3.二进制字符串
4.所有模块间的掉偶用
5.所有文本字串参考
3.3.2 OD修改的编辑功能
1.OD的修改功能
(1)修改代码
(2)修改十六进制数据
2.OD的保存功能
3.4 OD中的插件功能
3.4.1 OD常用插件介绍
1.CmdBar插件(CmdBar.dll)
2.StringRef插件(ustrrefadd.dll)
3.Cleanup插件(CleanupEx.dll)
4.ApiBreak插件(ApiBreak.dll)
5.OllyFlow插件(OllyFlow.dll)
6.OllyDump插件(OllyDump.dll)
7.ODbgScript插件(ODbgScript.dll)
8.其他
3.4.2 OD脚本编写
1.从例子开始介绍
2.写ODS脚本获取序列号
3.在OD中调试脚本
3.4.3 OD插件的开发
1.准备工作
2.基本插件开发介绍
(1)OD基本导出函数
(2)OD插件开发简单模板
3.插件实例
3.5 总结
第四章 PE工具详解
PE解析
PE修改
4.1 常用PE工具介绍
4.1.1 PE工具
4.1.2 Stud_PE介绍
4.1.3 PEiD介绍
4.1.4 LordPE介绍
4.2 PE文件格式详解
4.2.1 PE文件结构全貌介绍
1.PE文件结构全貌
2.PE结构各部分简介
(1)DOS头
(2)PE头
(3)节表
(4)节数据
4.2.2 详解PE文件结构
1.DOS头部详解——IMAGE_DOS_HEADER
2.PE头部详解——IMAGE_NT_HEADERS
3.文件头部详解——IMAGE_FILE_HEADER
4.可选头详解——IMAGE_OPTIONAL_HEADER
5.节表详解——IMAGE_SECTION_HEADER
4.2.3 PE结构的三种地址
1.与PE结构相关的三种地址
(1)VA(虚拟地址)
(2)RVA(相对虚拟地址)
(3)FOA(文件偏移地址)
2.三种地址的转换
(1)地址转换前的准备工作
(2)相同对齐值的地址转换
(3)不同对齐值的地址转换
(4)FOA与RVA转换工具
4.3 数据目录相关结构详解
4.3.1 导入表
1.导入表的查看
2.导入表的结构
(1)导入表结构体介绍
(2)OriginalFirstThunk和FirstThunk区别
(3)手动分析PE文件在磁盘上的导入表
(4)手动分析PE文件在内存中的导入表
(5)导入表的作用
(6)绑定导入表
4.3.2 导出表
1.导出函数的定义和调用
(1)导出函数的定义
(2)导出函数的调用
2.导出函数的查看
3.导出表的结构体
(1)导出表结构体介绍
(2)手动分析导出表
4.3.3 重定位表
1.重定位表的介绍
(1)建议装入地址ImageBase
(2)举例查看ImageBase被占用的情况
(3)DLL如何被重新定位
(4)重定位表的查看
2.手动分析重定位表
(1)重定位表的介绍
(2)重定位表的手动分析
4.4 总结
第五章 PE文件格式实例
手写PE
加壳
脱壳
5.1 手写PE文件
5.1.1 手写PE文件的准备工作
5.1.2 用十六字节完成PE文件
1.构造IMAGE_DOS_HEADER结构
2.构造PE标识符
3.构造IMAGE_FILE_HEADER结构
4.构造IMAGE_OPTIONAL_HEADER结构
5.构造IMAGE_SECTION_HEADER结构
6.0数据的填充
7.填充.data节的数据
8.填充.idata节的数据
9.填充.text节的数据
(1)在OD中查看PE文件
(2)填充.text的代码
5.2 手工对PE文件进行减肥
5.2.1 修改压缩节区
1.修改文件对齐字段
2.修改节表相关属性
3.删除节区中多余的0字节
5.2.2 节表合并
1.对.data节和.idata节数据的规划
2.移动.data节中的数据
3.移动.idata节中的数据
4.合并节表信息
5.修正PE头部信息
6.修正代码
5.2.3 结构重叠
1.结构重叠规划
2.移动字符串
3.移动代码
4.移动导入表
(1)移动导入表中的字符串
(2)移动导入表
5.调整PE文件的节表
6.修正PE头部
7.修正PE中的代码
5.2.4 小结
5.3 PE结构相关工具
5.3.1 增加节区
5.3.2 资源编辑
1.浏览资源
2.导出资源
(1)导出位图
(2)导出二进制PE文件
3.替换资源
4.编辑菜单资源
5.修改对话框资源
5.4 加壳与脱壳工具的使用
5.4.1 什么是壳
5.4.2 简单壳的原理
1.壳的执行流程
2.模拟壳的工作
(1)对代码节进行加密
(2)增加节
(3)修改程序的入口点
(4)修改代码节的属性
(5)添加解密代码
3.导入表的隐藏
(1)隐藏导入表的介绍
(2)添加新的节区
(3)添加新的导入表项
(4)原导入表的转存及删除
(5)修改外壳代码
(6)其他
5.4.3 加壳工具与脱壳工具的使用
1.加壳工具的介绍
(1)压缩可介绍
ASPack
UPX
Nspack
(2)加密壳介绍
Themida
VMP
2.脱壳工具的介绍
(1)通用脱壳机
(2)专用脱壳机
3.手动脱壳的介绍
(1)识别外壳
(2)寻找OEP
ESP定律
两次内存断点
其他
(3)转存可执行文件
使用OD插件进行转存
使用LordPE进行转存
(4)修复导入表
(5)附加数据(OverLay)的处理
5.5 PE32+简介
5.5.1 文件头
5.5.2 可选头
5.6 总结
0 条评论
回复 删除
下一页