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

news/2024/7/8 17:12:55

[安卓逆向]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


http://www.niftyadmin.cn/n/4388906.html

相关文章

第6.6节 priority_queue 问题 A: 任务调度

问题 A: 任务调度 题目描述 读入任务调度序列&#xff0c;输出n个任务适合的一种调度方式。 输入 输入包含多组测试数据。每组第一行输入一个整数n&#xff08;n<100000&#xff09;&#xff0c;表示有n个任务。接下来n行&#xff0c;每行第一个表示前序任务&#xff0c…

CountDownLatch----线程计数器

问题 最近我在处理一批数据&#xff0c;用多线程来处理&#xff0c;我想知道大概多久能处理完。比如我先用多线程处理 100 条数据&#xff0c;统计下用时&#xff0c;然后根据总的数据量就可以大概估算出处理完这批数据要多久。 使用 CountDownLatch 计时 思路&#xff1a;用两…

PHP多进程初探 --- 开篇

[原文地址&#xff1a;https://blog.ti-node.com/blog...] 实际上PHP是有多线程的&#xff0c;只是很多人不常用。使用PHP的多线程首先需要下载安装一个线程安全版本&#xff08;ZTS版本&#xff09;的PHP&#xff0c;然后再安装pecl的pthread扩展。 实际上PHP是有多进程的&…

c++ 输入一个分数输出最简分式_分式及增长量的大小比较

大小比较。一定要结合选项&#xff01;比如题干问你&#xff0c;某一年哪个月最高&#xff0c;我们不需要从1月算到12月&#xff0c;我们只需要算选项中提到的四个月即可。分式大小比较&#xff1a;分子大分母小的大&#xff0c;分子小分母大的小&#xff1b;分子分母同大同小的…

Tachyon brief intro

作者&#xff1a;刘旭晖 Raymond 转载请注明出处 Email&#xff1a;colorant at 163.com BLOG&#xff1a;http://blog.csdn.net/colorant/ Tachyon是AmpLab的Li Haoyuan所开发的一个基于内存的分布式文件系统&#xff0c;出发点是作为AMPLAB的BDAS的一个组成部分 总体设计思想…

使用Python3开发的一款Android截屏神器

Android设备截屏神器 只需要一根数据线将手机连上电脑&#xff08;已打开USB调式并已允许调试&#xff09; 便可以在电脑上轻松的对手机进行截屏了&#xff0c;再也不需要先截个图然后登录个QQor微信将截屏发送至电脑了。 同时支持Windows和Mac平台哦 需要安装Python3.7 不会安…

python职业发展方向_软件测试行业职业发展路径-技术方向

大家好&#xff0c;我是小文&#xff0c;今天给大家介绍下软件测试行业的职业发展路径&#xff0c;很多同学不清楚这个行业的职业发展&#xff0c;工作职责&#xff0c;特别是刚入行的从业者。接下来我带大家一起了解下我们的软件测试行业。小文讲测试-软件测试行业职业发展路径…

NoSQL Intro

在过去几年&#xff0c;关系型数据库一直是数据持久化的唯一选择&#xff0c;数据工作者考虑的也只是在这些传统数据库中做筛选&#xff0c;比如SQL Server、Oracle或者是MySQL。甚至是做一些默认的选择&#xff0c;比如使用.NET的一般会选择SQL Server&#xff1b;使用Java的可…