• [安卓逆向]IDA Pro的认识及使用


    [安卓逆向]IDA Pro的认识及使用

    软件介绍

    IDA Pro全称是交互式反汇编器专业版,人们其简称为IDAIDA pro 是业界最成熟、先进的反汇编工具之一,是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉WindowsLinux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。

    目录结构

    IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容

    • cfg:包含各种配置文件。其中有以下几个重要的配置文件:

      ida.cfg:基本IDA配置文件;idagui.cfg:GUI配置文件;idatui.cfg:文本模式用户界面配置文件;

    • dbgsrv:下面有用于调试的服务器端软件,选择设备合适的使用。

    • idc:包含IDA内置脚本语言IDC所需要的核心文件。

    • ids:包含一些符号文件。

    • loaders:包含用于识别和解析PE或者ELF。

    • plugins:附加的插件模块。

    • procs:包含处理器模块。

    在这里插入图片描述

    启动页面

    在这里插入图片描述

    1. New(新建) :选择new将启动一个标准file open对话框来选择将要分析的文件。根据选择的文件,ida将显示外一个或多个对话框,再选择特定的文件分析选项。然后加载,分析并显示。
    2. Go(运行):go键终止加载程序,使IDA打开一个空白工作区域。可以将二进制文件直接拖入,或使用file菜单中的选项。IDA会利用已知扩展名的过滤器限制file对话框显示。请确保修改或清除该过滤器【如选择all files】,以便file对话框正确显示你想要打开的文件【在非windows系统中,可执行文件可能没有扩展名】。以这种方式打开文件时,IDA会尝试自动识别选定文件类型,需要注意loading对话框,看ida用哪个加载器处理。
    3. Pervious :使用previous可以打开“最近用过的文件”列表中的一个文件。“最近用过的文件”列表中包含IDAwindows注册表项的history子项中的值。默认长度为10,可以编辑idagui.cfgidatui.cfg修改其值。

    文件加载

    new打开一个新so文件后会看到一个对话框,如下图所示:

    在这里插入图片描述

    1. IDA会生成一个可能的文件类型列表,在顶部显示,它将显示最适合处理文件的加载器。
    2. Binary File(二进制文件) 是列表最后一个选项,会一直显示,是IDA加载无法识别文件的默认选项,提供最低级的加载方法。需要使用二进制加载器的情形包括:分析从网络数据包或日志文件中提取出来的rom镜像和破解程序负载。
    3. processor type【处理器类型】下拉菜单中,可以指定在反汇编过程中使用的处理器模块【在idaprocs目录中】。多数情况下,ida将根据可执行文件头中读取信息,选择合适的处理器。

    界面介绍

    • 导航栏:显示程序的不同类型数据【普通函数、未定义函数的代码、数据、未定义等】。

      蓝色:表示常规的指令函数;黑色:节与节之间的间隙;银白色:数据内容;
      粉色:表示外部导入符号;暗黄色:表示ida未识别内容;

    • 反汇编主窗口:显示反汇编的结果、控制流图等,可以进行拖动、选择等操作。

      IDA VIEW-A:三种反汇编视图,文本视图、图表视图、路径视图;HEX VIEW-1:十六进制窗口;
      Enums:枚举窗口;Struceures:结构体窗口;Imports:导入函数窗口;Exports:导出函数窗口;

    • 函数窗口:显示所有的函数名称和地址【拖动下方滚动条即可查看】,通过Ctrl+F组合进行筛选。

    • 输出窗口:显示运行过程中 IDA 的日志,也可以在下方的输入框中输入命令并执行。

    • 状态指示器:显示为“AU:idle”即代表IDA已经完成了对程序的自动化分析。

    在这里插入图片描述

    常用快捷键

    IDA中的快捷键都是和菜单栏的各个功能选项一一对应的,基本上你只要能在菜单栏上找到某个功能,也就能看到相应的快捷键,这里记录几个常用的:

    a键:将数据转换为字符串,会以该位置为起点定义一个以“\0”结尾的字符串类型。
    c键:让某一个位置变成指令。
    d键:让某一个位置变成数据。
    g键:搜索地址和符号。
    n键:对符号进行重命名。
    o键:将此处定义为一个地址偏移。
    P键:在反汇编窗口选中对应行后定义函数。
    u键:undefine,取消定义函数、代码、数据的定义,取消一个地方已有的数据。
    x键:对着某个函数、变量按该快捷键,可以查看它的交叉引用
    y键:更改变量的类型
    分号键:可重复注释
    Ctrl+E:在函数窗口中选中修改函数参数;
    Ctrl+F:在窗口中搜索内容;
    Ctrl+M:查看标签
    Ctrl+S:查看/选择跳转的段信息。
    Ctrl+w:保存ida数据库
    Ctrl+Enter:前进到下一位置视图
    Alt+M:添加标签
    Alt+T:搜索文本
    Alt+B:搜索十六进制
    Alt+P:在反汇编窗口的函数内部修改函数参数;
    F2键:对函数某位置打断点。
    F5键:一键反汇编,查看伪代码
    F7:单步调试(进入函数)
    F8:单步调试(不进入函数)
    空格键:切换文本视图与图表视图
    ESC键:后退到上一位置视图
    Delete键:函数窗口中选中函数后,删除函数。
    *键:此处定义为一个数组
    /键:在反编译后伪代码的界面中写下注释
    \键:在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述

    操作概述

    函数操作

    • 删除函数:函数窗口中选中函数后,按 Delete

    • 定义函数:在反汇编窗口选中对应行后,按P

    • 修改函数参数:在函数窗口中选中并按 Ctrl+E 组合键,或在反汇编窗口的函数内部按 Alt+P 组合键

    数据类型操作

    • U键:取消一个地方已有的数据
    • D键:让某一个位置变成数据
    • C键:让某一个位置变成指令
    • A键:会以该位置为起点定义一个以“\0”结尾的字符串类型
    • *键:此处定义为一个数组
    • O键:将此处定义为一个地址偏移

    导航操作

    • 后退到上一位置:Esc
    • 前进到下一位置:Ctrl+Enter
    • 跳转到某一个特定位置:G,然后可以输入地址/已经定义的名称
    • 跳转到某一区段:Ctrl+S,然后选择区段即可

    关闭数据库

    在这里插入图片描述

    • Don't pack database【不打包数据库】:仅刷新4个数据库,不创建idb文件;
    • pack database(Store)【打包数据库】:将4个数据库组件文件存到idb文件中;
    • pack database(Deflate)【打包数据库,压缩】:等同于上一个,压缩到idb归档;
    • collect garbage【收集垃圾】:在关闭数据库之前,删除没有的内存页面;
    • dont save the database【不保存数据库】:删除四个数据库组件文件,保留现有未经修改idb文件;

    参考文章:

    破解工具-IDA的认识及使用: https://blog.csdn.net/l17862868372/article/details/117429655

    IDA详细使用教程: https://blog.csdn.net/m0_55854679/article/details/127746844

  • 相关阅读:
    C和C++的区别(3) const增强
    Springboot 程序实现加密,禁止 jadx 反编译
    【环境栏Composer】Composer常见问题(持续更新)
    js之循环
    通讯录实现之进阶版将通讯录数据保存在文件中(完整代码)
    数据结构与算法(六):堆
    day57 动规.p17 子序列
    C#Socket
    Lilishop 开源商城系统代码审计
    HTML5新特性以及主体构成
  • 原文地址:https://blog.csdn.net/yi_rui_jie/article/details/127865485