设置
- Options - General,选择Line prefixes并设置Number of Opcode Bytes 为6.可以看到16进制代码
- Options - General,选择Auto comments,IDA帮助注释
窗口
函数窗口:左拖拽,可以看到长度,以函数长度排序,过滤出规模大的函数
每个函数也关联了一些标志位(F,L,S)。L--库函数
名字窗口:函数名,命名代码,命名数据,字符串
字符串窗口:默认显示长度超过5个的字符ASCII字符串 通过setup来改动
导入表窗口
导出表窗口
结构窗口
链接
子链接:printf /sub_4010A0
本地链接:loc_40107E
偏移链接:内存偏移链接 字符串引用
导航栏
代码
浅蓝色:被FLIRT识别的库代码
红色:编译器生成的代码
深蓝色:用户编写的代码
数据
粉红色:导入数据
灰色:已定义数据
棕色:未定义数据
跳转
G键---跳转到虚拟地址或命名位置
Jump->Jump to File Offset---跳转到原始文件
搜索
Search--Next Code,移动光标到包含所指定的下一个位置
Search--Text,在整个反汇编窗口搜索一个指定的字符串
Search--Sequence of bites ,搜索指定数据和操作码组合
交叉
代码交叉:函数名 按X
数据交叉:跟踪二进制数据访问
p:是被调用的引用
r:是读取的引用
分析函数:
bp-based:基于EBP栈针的使用,局部变量和参数都通过EBP寄存器引用
var_4:局部变量,负位置
arg_0:参数,正位置
Alt+P 修正函数 勾选BP based frame 指定4bytes for Saved Registers
图形:
-----对当前的交叉引用,生成所有指向这一个函数
----本函数对其他函数的调用
使用命名常量:
可以任意选择
加载类型库:view - open subviews - type libraries查看当前加载的库
获取本地API的符号常量,ntapi
分析一个linux二进制时,gnuunx
重定义代码和数据:
U:取消定义
C :定义代码
D:定义数据
A:定义ASCII
IDAPython:
from idautils import *
from idc import *
heads = Heads(SegStart(ScreenEA()),SegEnd(ScreenEA()))
functionCalls = []
for i in heads:
if GetMnem(i) == "call":
functionCalls.append(i)
print "Number of calls found: %d" % (len(functionCalls))
for i in functionCalls:
SetColor(i,CIC_ITEM,0xc7fdff)
额外插件
zynamics bindiff使用:https://blog.csdn.net/lostspeed/article/details/71599430
Hex-Rays: