《IDA Pro 权威指南》学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《IDA Pro 权威指南》学习相关的知识,希望对你有一定的参考价值。
在学习0day时,发现ida的知识没有跟上,所以此处进行相关IDA的基础学习。
X86汇编语法:
AT&T:%前缀,&文字常量前缀
Intel语法:源操作数位于右边,目的操作数位于左边。使用Interl语法。
反汇编:
线性扫描反汇编:GUN,WinDbg,OBJdump
递归下降:
最典型 IDA Pro
1.顺序流指令 2.条件分支指令 3.无条件分支指令 4.函数调用指令 5.返回指令
二 逆向与反汇编工具
摘要工具:
nm:声明的函数与全局变量名称
ldd:所需动态库
objdump:
otool:
c++filt:
深度检测工具:
strings:
仅扫描文件中可加载、初始化后的部分, 使用-a 强制strings扫描整个文件
strings 不指出字符串在文件中位置,-t 参数 显示所发现的每一个字符串的文件偏移量信息。
-e 搜索更广泛的字符,如16位Unicode字符。
反汇编器
x86指令集反汇编器:流式反汇编器ndsasm,distorm
IDA支持资源
正式帮助文档、Hex-Rays支持页面论团,openRCE.org,RCE论坛,IDA Palace、llfak博客(为什么这里会点名这个博客呢)
IDA目录结构
cfg:配置文件
idc:IDA内置脚本语言IDC所需核心文件
ids:
loaders:
plugins:插件
procs:
sig:
til:类型库信息
目前不清楚这些是否重要,看后面的实战利用吧
IDA 入门
启动 IDA:
这个没什么好演示的,,,
IDA数据库文件:
.ido:二叉树形式的数据库
.id1:包含描述整个程序字节的标记
.nam:与IDA的Names窗口中显示给定程序位置有关的索引信息
.til:存储与一个给定数据库的本地类型定义有关的信息。- -?
IDA桌面
IDA数据显示窗口
IDA主要数据显示窗口
反汇编窗口:IDA-View
IDA图形视图,IDA文本视图
函数窗口:
输出窗口:
次要的IDA显示窗口
十六进制窗口
导出窗口
导入窗口
结构体窗口
枚举窗口
其他IDA显示窗口
Strings窗口:与交叉引用结合
Names窗口:文件中所有全局名称(F,常规函数。L,库函数。I,导入的名称。C,命名代码。D,数据。A,字符串数据)
段窗口
签名窗口
类型库窗口
函数调用窗口
问题窗口
反汇编导航:
基本IDA导航
双击导航:双击跳转····
跳转到地址:Jump -> Jump to Address ,快捷键G
导航历史记录:Jump-> Jump to Previous Position 向后退,可按ESC(反汇编窗口)
Jump -> Jump to Next Position 向前进,CTRL+ENTER
栈帧:基本概念
调用约定:C调用约定,从右至左。stdcall调用约定,从右至左,函数结束执行时,由被帝欧用的函数负责删除栈中的函数参数。x86 fastcall约定:stdcall辩题,传递给函数的前两个参数分别位于ECX,EDX寄存器中;从右至左;返回调用方时,fastcall函数负责从栈中删除参数。c++调用约定:this指针;其他调用约定:blabala
局部变量布局
栈帧示例
void bar(int j,int k); void demo_stckframe(int a,int b,int c){ int x; char buffer[64]; int y; int z; bar(z,y); }
sub esp,76 //配置栈帧
调用 bar
push dword [esp+4]
push dword [esp+4]//说明eap一直在变化
call bar
add esp,8
从栈顶删除局部变量:
add esp,76 //栈指针指向所保存的返回地址
ret//弹出所需返回地址,插入指针寄存器(此处为eip)
了解使用专用帧指针:
push ebp//保存当前调用方使用的EBP的值
mov ebp,esp //栈指针当前值赋值到ebp
sub esp,76//局部变量在此处分配
正偏移量用于访问函数参数,负偏移量用于访问局部变量
对函数bar的调用如下
push dword [ebp-72] ;push y
push dword [ebp-76] ;push z
call bar
add esp,8 ;cdec1 requires caller to clear parameters
每次返回前,恢复调用方的帧指针
下次从这里开始
IDA栈视图
搜索数据库
文本搜索
二进制搜索
反汇编操作
名称与命名
参数和局部变量
已命名的位置
寄存器名称
IDA中的注释
常规注释
可重复注释
在前注释和在后注释
函数注释
基本代码转换
代码显示选项
格式化指令操作数
操纵函数
数据与代码互换转换
基本数据转换
指定数据大小
处理字符串
指定数组
数据类型与数据结构
识别数据结构的用法
数组成员访问
结构体成员访问
创建IDA结构体
创建一个新的结构体
编辑结构体成员
用栈帧作为专用结构体
使用结构体模板
导入新的结构体
解析C结构体声明
解析C头文件
使用标准结构体
IDA TIL文件
加载新的TIL文件
共享TIL文件
C++逆向工程基础
this指针
虚函数和虚表
对象生命周期
名称改编
运行时类型识别
继承关系
C++逆向工程参考文献
交叉引用与绘图功能
交叉引用
数据交叉引用
交叉引用列表
函数调用
IDA绘图
IDA的多种面孔
控制台模式IDA
控制台模式的共同特性
Windows控制台
linux控制台
OS X控制台
使用IDA的批量模式
以上是关于《IDA Pro 权威指南》学习的主要内容,如果未能解决你的问题,请参考以下文章