IDA PRO
- IDA是按照区块装载PE文件的。
.text | 代码块
.data | 数据块
.rsrc | 资源块
.idata | 输入表
.cdata | 输出表
IDA反汇编选项配置
Option->General(选项->常规)
左侧从上至下分别为
-
函数偏移
包含段地址
使用段名 -
空白行
数据/代码分界
基础块边界
源程序行号 -
行前缀范例
空白下限
空白上限
右侧从上至下分别是
-
行前缀
栈指针
注释
可重复注释
自动注释
坏指令标记
机器码数 -
指令缩进
注释缩进
右边距
IDA界面简介
A:反汇编窗口 通过空格键切换图形界面和文字界面
B:输入窗口中列出了可执行文件调用的所有函数,列出了函数名称和包含该函数库的名称,列出的地址为虚拟地址,双击即转跳
C:导航栏提供加载文件地址空间线性视图
D:提示窗口用来反馈文件分析进度,状态消息,错误消息及IDA脚本或插件信息。
E:字符串窗口使用Shift+F12打开,它显示从二进制文件中提取的一组字符串,双击反汇编窗口则会跳转到该处与交叉引用结合使用,可以实现快速定位。
F:Ctrl+G 跳转到地址窗口,知道目标地址即可实现输入跳转。
交叉参考
XREF
CODE XREF:sub_XXXXXX+B(上箭头)j
j表示跳转
o表示偏移量
p表示子程序
参考重命名
将反汇编中默认名称改为你认为更适合自己理解的名称,增加代码可读性。方法:单击需要修改的名称,使用快捷键N打开更名对话框
Local name:局部符号名的作用域仅限了当前函数
Include in name list :将有一个名称被添加到名称窗口中
Public name: 由二进制文件输出的名称(DLL)
Autogenerated name:自动创建符号名
Weak name:弱符号,是公共符号的一种特殊形式
标签
Jump->Mark position,打开标记当前位置功能。使用快捷键Ctrl+M或者双击标签,执行跳转到标记位置,即可转跳到指定代码。
创建函数
IDA允许手动干预创建,编辑,删除函数。新函数由不属于某个函数的现有指令创建,或者由未被IDA以任何方式定义的原始数据创建。
将光标移动到创建的函数的第一个字节上Edit->Functions->Creat Functions,创建一个函数。(快捷键未P)必要时,IDA会将数据转化为代码,以便分析函数的结构,如果找到函数的结束部分,IDA将生成一个新的函数名,以函数形式重组代码。如果无法确定函数结束部分,或者发现非法指令,这个操作将会终止。删除函数Edit->Functions->Delete Function
代码和数据的转换
很多工具在进行反汇编的时候可能无法正确分区数据和代码,数据字节和代码字节可能会被互相错误的识别,程序可以利用这一点对抗反汇编。IDA可以使用人脑手动鉴别二者。
如果确信某段十六进制数据是一段指令,将光标移动至第一个字节的偏移位置,执行菜单Edit->Code(快捷键C)。P可以将某段代码定义为子程序,并列出参数调用。取消定义则Edit->Undefine(快捷键U)数据将重新以16进制的方式显示。
在代码行按D键,数据类型会在db,dw,dd之间转换.执行菜单Options->SetUp->Data types可以设置能多数据类型。
IDA 对简单结构的处理
字符串:
-
以0结尾的C语言字符串 快捷键A转化确定未字符串的16进制数据 按U可转换会16进制数据
-
以$结尾的DOS字符串 A默认是C语言字符串,可以在Options->ASCII string style中更改
-
有时无法确定ASCII字符串 原因为字符串在程序中没有被直接调用过
-
所有生成的字符串都可以在Names窗口看到(View->Open subviews->Names)
数组:
-
将光标移动到需要处理的数据处,选择菜单栏Edit->Array(快捷键*)打开数组排列调整窗口
-
每行项数会自动调整,调整右边距可以增加。三个填空分别是:数组大小,每行项数,对齐方式。
IDA对复杂结构的处理
结构体:
-
创建结构体:
对于一些常见的文件类型,IDA会自动加载相应的类库,在底层分析时,可以增加mssdk(windows.h),ntddk(ntddk.h)。这些类型库中由相应的结构体,用户分析代码的时候可以直接引用。快捷键Shift+F11(打开加载类型库窗口)单击右键菜单Load Type library弹出窗口Available Type Libraries窗口中选择类型库,查看并选择内置的结构体数据结构。View->Open subviews->Structures打开结构体管理窗口,单击Insert在弹出窗口中单击Add Standard Structure按钮,打开添加标准结构库窗口,查找所需函数名,就可以使用这些库了。
IDA调试器
Debugger->Select debugger 选择适合的调试器列表,根据文件类型选择后,就可以打开本机模式调试目标软件,Debugger菜单会以其他形式展开,通过Start Process调试目标文件。附加进程Debugger->Attach to process
A:反汇编
B:通用寄存器
C:显示加载到进程内存空间的可执行文件和共享库,双击打开符号的输出列表。
D:栈窗口
操作和OD差不多 不再赘述 有兴趣的老哥们可以研究下IDC