IDA基础使用方法

打开IDA后,把需要分析的二进制文件丢入其中

1.展示类型

IDA会自动根据机器码生成汇编代码,并且以逻辑程序框的样子展示出来

按下空格后,可以将逻辑框变成代码的展示方式,逆向分析常用这样的方式

2.UI窗口结构

IDA一共有6个主要窗口,分别是:

反汇编窗口:IDA View-A

二进制文件经过IDA反编译后,会在这个窗口中显示

十六进制窗口:Hex View-1

这个是反汇编窗口的十六进制版本,会将反汇编得到的汇编代码以十六进制展示

导入表窗口:Imports

这个是记录这个二进制文件的导入表,也就是运行时会导入哪些DLL的哪些函数

导出表窗口:Exports

这个是记录这个二进制文件导出的内容,也就是PE的导出表

结构体窗口:Structures

IDA会识别反汇编后得到的一些结构体放入其中,但也并不是全部,IDA有可能会误识别或者漏掉某些结构体,这时候就需要自己对这个窗口的内容进行修改

枚举窗口:Enums

IDA会识别一些枚举类型,并加入其中,但也并不是全部,同样存在误识别或漏掉的情况,这时候也需要自己对这个窗口进行修改

上面这个蓝屎黄色相间的条,就是PE的结构,也就是DOS头,PE头,可选头,节表,节数据

拖动上面的小箭头可以让反汇编窗口到达对应的地方

3.硬编码

IDA反汇编窗口所看见的所有汇编代码,都是由IDA通过硬编码生成的,每一行硬编码都有对应的一行汇编代码

3.1修改每一行显示多少个字节的硬编码

硬编码最多一行显示16字节

点击Options->General->Number of opcode bytes(graph)

3.2 ACDU

ACDU指的是A、C、D、U四个按键,IDA虽然能够将硬编码翻译成汇编代码,但是准确率并非100%,有很小概率会出现出错的情况,例如,本来应该是一个数据,被翻译成代码,本来应该是一个字符串,被翻译成数据

(十六进制中90是null的意思)

A:将当前这行硬编码用字符串的方式显示

C:将当前这行硬编码用代码(code)的方式显示

D:将当前这行硬编码用数据(data)的方式显示(一下一个字节,两下两个字节,三下4个字节)

U:不定义这一行硬编码,以原始字节显示(undefined)

4.跳转

按下G(go)键跳转后,IDA会给弹出一个框,在框内输入需要跳转的位置即可

5.搜索

按下ALT+T组合键后,会IDA会弹出一个框,在框内可以根据需求进行搜索

6.起别名

N键

逆向分析本质上就是看懂反汇编得到的汇编代码,知道这个代码在做什么,而代码分为很多个函数组成的,只需要将汇编代码的函数看懂在做什么就能分析出整个代码在做什么,而起名指的是给函数或者每一行汇编代码起别名

7.新建结构体

当阅读汇编代码时,自己发现了新的结构体,就需要加入在结构体窗口中,目前结构体这边都是IDA自己默认生成的

先添加一个结构体类型:

起名为study

这个就是生成的结构体

现在,要在结构体里面新增成员,选定结构体,按D键,生成一个默认成员,在这里生成了一个field_0的单字节成员,双字节和四字节跟之前一样,多次按D即可

如若需要修改field_0的名字,则按N

如若成员是结构体,则选中默认生成的成员,按ALT+Q组合键,可以选择所列举出来的所有结构体,选择需要的结构体后,点击OK即可

如若成员是数组,则右键默认类型,点击array,输入数组长度即可

在汇编窗口中,引用结构体,如果是全局变量,则ALT+Q

如果是局部变量,则是T

8.注释

第一个方法,按;号,这种方式会导致跳转后也存在一个新的注释副本,常规来说,不使用这种方法

第二种方法,按住shift+;号

对于函数的备注来说,点击函数再按;号即可

9.交叉引用

这是逆向中经常使用的功能,目的是发现函数在哪些地方被调用,调用多少次等

简单举例,选择IDA识别出来的一个函数sub_4082C0

虽然后面这里也会显示哪些地方调用了这些函数,但是如果数量过多,并不会完全显示

此时应该采用交叉应用获取

点击函数名,点击左上角的View->open subviews->Cross references

也可以查看某一个变量在哪些地方被引用了

  1. 如果出现”Failed to find PE header”:
    → 样本可能被加壳,需先使用PEiD检测壳类型
    → 使用x64dbg等工具脱壳后再加载
  2. 如果IDA卡在分析阶段:
    → 可能是病毒包含大量混淆代码
    → 尝试在”Analysis”选项卡关闭”Auto analysis”
  3. 函数列表为空:
    → 检查是否误选Binary模式
    → 按Ctrl+S查看段结构是否异常

判断文件是否被加壳:

  1. 使用查壳工具(推荐新手优先使用)
    • 推荐工具:Exeinfo PE、PEiD、Detect It Easy
    • 关键指标:
      • 出现”UPX”、”ASPack”、”VMProtect”等已知壳标识
      • 显示”Overlay detected”(存在附加数据层)
      • 显示”Section names: .vmp0″(虚拟化保护特征)
  2. 入口点特征分析(通过IDA验证)
    • 未加壳样本:入口点代码逻辑清晰,有标准函数调用
    • 加壳样本特征:pushad/popad ; 典型壳的寄存器保护 call $+5 ; 动态计算解密地址 mov edx, dword ptr [esp] ; 栈操作异常频繁
  3. 区段异常检测(IDA快捷键:Ctrl+S)
    • 正常PE文件:.text/.data/.rdata等标准区段
    • 加壳特征:
      • 区段名异常:.UPX0、.ASPack、.vmp1
      • 区段数量过少(仅1-2个)
      • 区段属性异常(如代码段可写)
  4. 导入表分析(IDA视图:Imports窗口)
    • 未加壳:包含大量API函数(如CreateFile、RegSetValue)
    • 加壳样本:
      • 导入表极简(仅LoadLibrary/GetProcAddress)
      • 出现可疑API(如VirtualProtect、WriteProcessMemory)
  5. 字符串特征(IDA快捷键:Shift+F12)
    • 未加壳:可见可读字符串(如”C:\Windows\System32″)
    • 加壳样本:
      • 字符串全为乱码(如”x0A9#kLp^”)
      • 仅少量解密相关字符串(如”ABCDEFGHIJ”)
  6. 资源段异常(IDA资源视图)
    • 加壳样本常见特征:
      • 存在加密的.rsrc段
      • 资源中包含不明二进制块
      • 资源目录结构被破坏

相关选项解释:

1. 处理器类型选择区(关键设置)

  • Intel 80×86系列
    • 80686p → 32位保护模式(现代Windows程序)
    • 80586r → 16位实模式(DOS程序)
    • with MMX → 含多媒体指令集
  • MetaPC → 实验性反汇编引擎(不建议新手使用)
  • Intel 860 → 特殊嵌入式处理器(罕见)

2. 加载选项(Loading options)

选项推荐设置功能说明
Create segments✔️自动创建内存段(必须开启)
Load resources✔️加载图标/菜单等资源(分析恶意文档时关键)
Fill segment gaps填充段间隙(可能破坏壳代码结构)
Create FLAT group创建平面内存模型(仅特殊需求使用)
Rename DLL entries✔️自动重命名API函数(提升可读性)
Create imports segment✔️单独创建导入表段(方便追踪API调用)

3. 内核选项(Kernel options)

  • Loading segment:默认0x00400000(PE基址)
  • Loading offset:保持0x00000000(除非处理内存dump)
  • Manual load → 高级手动加载模式(处理破碎PE文件时使用)

4. 处理器选项(Processor options)

  • Indicator enabled → 显示指令副作用(如影响标志位)
  • Analysis → 自动分析开关(遇到混淆代码时应关闭)

三、操作建议流程

  1. 先用Exeinfo PE快速检测壳类型
  2. 在IDA加载时:
    • 处理器选80686p
    • 勾选所有推荐选项
  3. 加载后立即检查:
    • 入口点代码是否混乱(加壳标志)
    • 查看Imports是否异常
    • 检查字符串列表是否可读

四、遇到加壳样本的应对策略

  1. 单层压缩壳(如UPX):upx -d sample.exe # 直接脱壳
  2. 加密壳(如ASPack):
    • 使用x64dbg/OllyDbg进行内存dump
    • 寻找OEP后使用Scylla插件脱壳
  3. 虚拟化保护(如VMProtect):
    • 使用VMPDump工具提取代码片段
    • 重点分析未被虚拟化的部分

五、界面功能速查表

组件位置关键功能误操作风险
Processor type架构选择错误会导致反汇编错误代码解析完全错误
Create segments关闭会导致无法识别代码/数据所有地址显示为偏移量
Load resources关闭会丢失图标/字符串资源无法分析资源注入型病毒
Manual load错误设置会导致基址错位IDA无法正确重建PE结构

建议在初次分析时保持默认设置,仅当遇到以下情况时调整:

  • 处理内存dump文件 → 修改Loading offset
  • 分析BIOS级恶意代码 → 选择Binary模式
  • 遇到反调试陷阱 → 关闭Auto analysis