码迷,mamicode.com
首页 > 其他好文 > 详细

ida pro静态分析

时间:2018-08-27 16:03:30      阅读:1124      评论:0      收藏:0      [点我收藏+]

标签:ssd   字符串   class   visual   用户分析   arc   frame   鼠标   type   

一、几个概念

1. 反汇编与反编译
源代码程序-->可执行程序,需要经过编译器-->汇编器-->链接器;用来撤销编译和汇编的过程,称之为反编译和反汇编
反汇编:从机器码到汇编代码
反编译:以汇编代码或机器码到高级语言
 
2. 常见的指令架构
指令架构:x86、ARM、MIPS
x86主要应用于pc机上,主要有两种语法表示汇编代码:Intel和AT&T
ARM主要应用于移动端,它的分类也很多,这里不展开
MIPS主要应用于路由器等设备上
 
3. 反汇编的主要方法
反汇编的主要方法:线性扫描、递归下降
 
4. ida
ida是一种递归下降的反汇编器,它支持静态分析和动态调试程序,尤其是在静态分析领域,ida是一款神器
下面介绍了ida静态分析程序的相关约定
ida的命名方式与虚拟地址和栈帧变量有关,常见的有以下几个
    sub_xxxx  地址xxxx处的子例程(过程/方法)
    loc_xxxx  地址xxxx处的一个指令
    byte_xxxx  位置xxxx处的8位数据
    unk_xxxx  位置xxxx处的大小未知的数据


栈是程序运行是的一种数据传输方式,ida在静态分析中提供了栈视图来方便用户的使用
    .text:00401020 ; Attributes: bp-based frame
    .text:00401020
    .text:00401020 ; int __cdecl sub_401020(char *)
    .text:00401020 sub_401020  proc near   ; CODE XREF: sub_401005↑j
    .text:00401020
    .text:00401020 var_4C  = byte ptr -4Ch        //IDA提供的一个摘要栈视图,列出栈帧内被直接引用的每一个变量,以及大小与帧指针的偏移量
    .text:00401020 var_C   = byte ptr -0Ch         // var_为局部变量名称的前缀,后面表示变量与被保存的帧指针之间距离
    .text:00401020 var_4   = dword ptr -4
    .text:00401020 arg_0   = dword ptr  8         // 函数参数名以arg_为前缀,后面表示与最顶端参数之间的相对距离(十六进制)
    .text:00401020
    .text:00401020 push ebp ;  
    .text:00401021 mov ebp, esp
    .text:00401023 sub esp, 4Ch
    .text:00401026 push ebx

 下图为ida通过两种寄存器ESP和EBP来表示栈

二、ida中具体的操作            技术分享图片

1、静态分析中常用快捷键

shift+F12 : strings
shift+F7 :segments
alt+t :text search
ctrl+t: next text
g :快速查找到对应地址
shift+e :提取数据
Enter:跟进函数实现,查看标号对应的地址
Esc  返回跟进处
A  解释光标处的地址为一个字符串的首地址
B  十六进制数与二进制数转换
C  解释光标处的地址为一条指令
D  解释光标处的地址为数据
H  十六进制数与十进制数转换
K  将数据解释为栈变量
X  转换视图到交叉参考模式
 
2、ida 对于结构体的定义及标识
 
结构体:IDA会根据文件的类型自动加载相应的类型库,如vc6win(VisualC++6.0),用户做底层分析时,可以添加mssdk(windows.h)、ntddk(ntddk.h)等。这些库中有相应的结构体,用户分析代码时,可以直接引用。可以通过快捷键”Shitft+F11“,打开加载类型库窗口,然后用鼠标右键选择”Load Type Library(或快捷键Insert)“,在弹出的窗口中选择相应类型库。
选择好类型库后就可以查看内置数据结构了。选择菜单”View/Open subviews/Structure就可以打开结构体管理窗口。按Insert键,在弹出的窗口中选择”Add Standard Structure“,打开标准结构库窗口查找需要的结构名,然后就可以正常使用这些库了。? 在默认情况下,IDA会加载常用的结构,程序类常用的结构体会显示出来,在WNDCLASSA结构一行单击右键,在弹出的菜单中选择Unhide,快捷键是Ctrl++可展开结构,程序相应代码处直接以结构体显示。收起结构的快捷键是Ctrl+-。
定义新的结构体
打开结构体窗口,按下Insert键增加一个新的结构体类型,命名为student。把光标停留在student结构的ends一行,按D键可以键入数据(如id、age)等,重复D键可以在db、dw、dd间切换,直到变成dd,表示是dword类型。而按A键则是键入ASCII字符(如name)为结构体成员。通过N键可以修改相应名称。
创建好结构体后,可以将鼠标放在要被定义的这个位置处,然后执行菜单”Edit/Structs/Sturcuvar“命令,或者快捷键alt+Q,然后选择student结构体。这时对应的数据会被标识为相应的结构体。然后在对应的代码位置x00401006处,选择需要重新定义的数据,如[esi+18h] 通过”Edit/Operand types/Offset/Offset(Struct)“或者快捷键T可将相应位置的代码修改为有意义的结构体名称。

 

三、在linux中安装ida
wine安装(官网)-->安装ida(不安装python27 x64)-->下载 Python 2.7 的 MSI 文件,命令行下执行:wine64 msiexec /i python-2.7.15.amd64.msi
wine安装的文件在/home/.wine/drive_c/中,这个相当与windows的c盘

ida pro静态分析

标签:ssd   字符串   class   visual   用户分析   arc   frame   鼠标   type   

原文地址:https://www.cnblogs.com/keepcuriosity/p/9246524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!