热门排行
简介
IDA Pro 是一款交互式反汇编器,广泛用于逆向工程,它极其灵活,内置命令语言,支持多种可执行文件格式,适用于大量处理器和操作系统,目前Hexrays为了充分调动大家主观能动性, 主动公开了测试版的完整IDA Pro 9.0,欢迎大家前来下载。
软件介绍
它的原作者和主要开发者是 Ilfak Gilfanov。
它允许你构建流程图、更改标签名称、查看堆栈上的本地过程等等。
作为反汇编程序,它能创建执行图,以符号表示(汇编语言)显示处理器实际执行的二进制指令。IDA Pro 采用先进的技术,从机器可执行代码生成汇编语言源代码,并使这些复杂的代码更易于人类阅读。
在一定程度上,IDA 能够利用交叉引用、标准库函数调用参数知识和其他信息自动执行代码分析。不过,通过与用户的交互式互动,IDA 才能发挥其全部威力。在研究开始时,反汇编器对程序进行自动分析,然后用户在交互式 IDA 工具的帮助下,开始给出有意义的名称、注释、创建复杂的数据结构,并以其他方式在反汇编器生成的列表中添加信息,直到所研究的程序做了什么以及如何做变得清晰为止。
反汇编程序有控制台版本和图形版本。它支持大量可执行文件格式。IDA Pro的特色之一是能够反汇编Java和.NET虚拟机的字节码。它还支持宏、插件和脚本,最新版本还包含一个集成调试器。
功能特色
1、敌对代码分析
考虑到当今恶意代码的速度和复杂性,需要一种功能强大的分析解决方案。IDA Pro已成为恶意软件分析领域的标准,以至于有关新病毒的信息通常以“ IDA数据库”的形式交换。防病毒,恶意软件和间谍软件分析师每天都会使用IDA Pro来调查新的病毒样本威胁并提供及时的解决方案。
2、漏洞研究
漏洞披露的话题仍然颇具争议,但实际上,软件通常很容易受到外部攻击。IDA Pro是调查此类漏洞的理想工具。如果不固定它们,则第三方可能出于不诚实或犯罪意图利用它们。例如,威斯康星州安全分析器是一个非常有趣的项目,旨在研究软件漏洞,其中IDA Pro扮演着重要角色。
3、商用现货(COTS)验证
许多软件是在使用它们的国家以外开发的。由于这些程序难以验证,而且由于完整的源代码审核和重建并不总是可行或可行的,因此IDA之类的工具提供了一种方便的方法来检查程序是否确实按照其声明的方式运行,是否没有有害漏洞并且不泄漏任何敏感信息。
4、隐私保护
软件正在各个层面入侵我们的生活。在可能被收集,出售或利用的有关单个用户的数据量激增到前所未有的水平时,尊重基本隐私权是许多人的关注点。IDA Pro帮助调查可能引起关注的软件,从而保护您的基本权利。
5、其他用途
IDA Pro在学术界引起了很多兴趣。在这里可以看到IDA Pro发挥作用的部分论文清单。
系统要求
Windows
需要当前支持的 x64 操作系统(Windows 8 或更高版本,建议使用 Windows 11 或更高版本)。
Linux
x64 (x86_64) CentOS 7 或更高版本、Ubuntu 16.04 或更高版本。其他等效发行版也可使用,但不保证。
操作系统 X
macOS Catalina 或更高版本(x64 或 ARM64)。
使用说明
解压运行安装程序idapro_90_x64win.exe,然后输入安装密码即可免费使用。
2、编辑许可证信息,注意到期时间不要超过10年
3、将ida/ida64 dll/so/dylib放在与script相同的目录下
4、运行脚本生成license
5、复制生成的license,并将dll替换为补丁
6、运行激活
更新日志
IDA 9.0 beta 2 中修复的问题
IDA 首页:云反编译器无法使用
将所有对 ida.key 的引用替换为 ida.hexlic
IDA Linux 安装程序在安装程序目录中创建了一个奇怪的目录
IDA Home:缺少 IDA Pyton 模块 "ida_mergemod"
MacOS 上缺少 style dylib
反编译器:导航到不可反编译函数时崩溃
asmtil:interr 918 + 过滤大量类型时崩溃
idapython:idc.get_ordinal_qty() 不可用
添加了 wasm 加载器和处理器模块
IDA 9.0 beta 1 的已知问题
IDA Teams 服务器(保险库)尚不可用
IDA 浮动许可证服务器 (licsrv) 尚未提供
Linux 安装程序中的对话框文本在深色主题处于活动状态的 Ubuntu 上不可读
Linux 安装程序创建名为“***unknown variable uninstallerdirectory***”的空目录
iOS18 DSC objc 分析缺乏开箱即用(__OBJC_RO暂时必须手动加载)
IDA 可能会在文件加载时在 x64 macOS 上崩溃
使用 IDAlib 进行无头处理
借助 IDAlib,可以从 IDA 外部使用 C++ 和 Python API 来构建独立应用程序。这 生成的程序或脚本不必在 IDA 中加载,而是从 IDA 调用引擎 在您的应用程序中。
这使得针对 IDA API 进行开发变得更加容易 - 如果配置正确,您可以获得自动完成功能 并在您最喜欢的 C++/Python IDE 中进行调试
无需 RCP 或 IPC 即可连接到外部 IDA 流程,这意味着您可以获得原生的执行速度
WASM 反汇编器和文件格式加载器
随着许多应用程序转向客户端浏览器应用程序,我们看到需要一个新的 Web 反汇编器。 程序集 (WASM)。
WASM 代码嵌入到其自己的二进制文件格式中。因此,我们还提供了一个文件加载器,可以解码 WASM 文件格式
nanoMIPS 反汇编器和解编译器 + md1rom 加载器
MIPS 反汇编器和解编译器都增加了对 nanoMIPS 指令的支持。nanoMIPS支持 包含在经典 MIPS (HEXMIPS) 反编译器中,因此无需购买额外的许可证。
为 nanoMIPS 编译的固件通常以 md1rom 格式提供,这就是我们将 md1rom 文件加载器添加到 IDA(包括解析和应用调试符号,如果可用)
新的 RISC-V 反编译器和反汇编器扩展
针对 32 位和 64 位 RISC-V 代码(HEXRV 和 HEXRV64)的新反编译器现已推出。
我们扩展了 RISC-V 处理器模块,以支持 T-Head 扩展指令(用于玄铁和 全志处理器)
反编译器中的 C++ 异常支持
反编译器现在可以发出 / 块。作为第一步,我们实施了 在使用 Microsoft VC++ 为 x64 编译的二进制文件中支持 C++ 异常方案trycatch
IDAPython 改进
现在,大多数 IDAPython API 都有类型注释,从而减少了 API 的使用障碍。
现在支持 Python 虚拟环境 - 只需指向包含以下内容的目录 虚拟环境中的解释器(由激活脚本自动完成)。$PATH
Python API 中返回的对象已正确零初始化。
IDA CLI 中的自动完成功能现在忽略并自动生成的 SWIG 方法, 这样可以减少噪音并有助于更轻松地找到特定功能。__magic_methods__
FLIRT更新
我们进行了大规模更新、现代化改造,并扩大了可用于IDA的FLIRT签名数量。如 在此版本中,我们为以下操作系统提供(并计划维护)签名: 语言、架构和软件包:
高朗:
版本:稳定版本从 1.10.0 到 1.22.5 和不稳定版本 1.23.0-rc1/1.23.0-rc2
Windows:x86、x64、arm、arm64
Linux的:i386、amd64、arm、arm64
达尔文:amd64、arm64
C/C++
Windows (MSVC):
架构:arm、arm64、i386、amd64
包:ATL、CTL、MFC、Windows SDK 10、Windows SDK 11
Linux的:
发行版:Ubuntu 和 Debian
架构:i386、amd64、arm64、armhf、armel、arm、s390x、mips64el、mipsel、mips、ppc64el
软件包:libc6、libselinux1、libpcre2、libidn2、libssl、zlib1g、lib32z1、libunistring、 libcurl4-gnutls、libcurl4-nss、libcurl4-openssl、libnghttp2、libidn2、librtmp、libssh、 libssh-gcrypt、libpsl、libldap、libzstd、libbrotli、libgnutls28、nettle、libgmp、comerr、libsasl2、 libbrotli、libtasn1-6、libkeyutils、libffi、uuid、libprotobuf、heimdal-multidev、musl、libplib、 libsdl1.2-bundle (libsdl-console、libsdl-sge、libsdl1.2、libsdl-ocaml、libsdl-image1.2、 libsdl-kitchensink、libsdl-mixer1.2、libsdl-net1.2、libsdl-sound1.2、libsdl-ttf2.0、 libsdl1.2-compat、libsdl-gfx1.2、libsdl-pango)、libsdl2-bundle(libsdl2、libsdl2-gfx、libsdl2-image、 libsdl2-混频器、libsdl2-net、libsdl2-ttf)
插件的元数据描述符
ida-plugin.json现在为插件提供了一个标准化的入口点。这使插件作者能够 要遵循他们自己的插件目录结构,他们需要做的就是将 IDA 指向主插件条目 点。为了保持向后兼容性,IDA 将在几个 9.0 之前的方式继续加载插件 释放。
使用以下目录结构:
plugins
└── ida_greeter
├── ida-plugin.json
└── main.py
可能的可能如下所示:ida-plugin.json
{
"plugin" :
{
"name" : "greeter",
"entryPoint" : "main.py"
}
}
不再有IDA32
我们在几个版本前弃用了 IDA32。在 IDA 9.0 中,我们将统一针对 32 或 64 的 IDA 二进制文件 将代码仅位到一个 IDA64 二进制文件中。这意味着:
已安装文件的数量减少了一半
对于原生插件维护者来说,生活更轻松,因为只需要一个版本 () 保持。__EA64__
IDA64 透明且自动地将 IDB 文件转换为 I64 文件格式。
UI 改进
旧的枚举和结构视图将被完全删除,并由局部类型替换。这也意味着 那个和他们的对应物,并从 API 中消失。现在,两个接头/模块的替换功能都已实现 位于(大部分)位于 / 中。将提供移植指南 用于发布。struct.hppenum.hppida_structida_enumtypeinf.hppida_typeinf
函数原型编辑器(又名函数名称的快捷方式)现在可以在 经典的自由文本单行编辑器和新的多行编辑器,具有通常的快捷方式和控件。由 同时,我们增加了对基于 UI 的参数位置编辑的基本支持,以制作原型语法 记住起来不那么麻烦。y
现在可以为结构指定固定尺寸,并轻松实现现场包装
现在可以选择一组更新的快捷方式,这些快捷方式更符合现代操作系统的约定,而不是 传统的捷径
更改和新功能的完整列表
处理器模块
ARM:改进对间接跳转指令目标的检测
ARM:改进了 prolog 分析,以识别和标记对chkstk_darwin
AVR:更新 ATmega640 的缺失位定义
MIPS:支持NanoMIPS指令集
RISCV:增加了对遗留指令 sfence.vm 的支持
RISCV:增加对 T-Head 自定义指令的支持
wasm:新的处理器模块(Web Assembly)
文件格式
ELF:增加了对 nanoMIPS 的支持
ELF:ARM64:增加了对 ILP32 使用的重定位类型的支持R_AARCH64_P32_TLS_TPREL
md1img:联发科调制解调器固件映像(nanoMIPS 和 MIPS16e2)的加载器
MACHO:支持格式 5 (__chain_startsDYLD_CHAINED_PTR_32_FIRMWARE)
调情 / 瓷砖 / IDS
FLAIR:PCF:添加了对 ARM64 COFF 文件的支持
pelf:正确处理 ELF32 用于 AArch64 (ILP32)
标准插件
eh_parse:跳过 PE 文件在 x64 中的前导和尾随零条目(真正的二进制文件有 他们);改进了调试版本中对异常调度器函数的识别.pdata
eh_parse:x64 异常处理程序是独立函数,而不是函数块
EH34:用于处理 MSVC x64 构建的二进制文件的 C++ 异常的新插件
PDB:添加了一个选项,用于仅加载名称(当您不需要类型时,对于大型 PDB 很有用)
内核/杂项
goodname.cfg:改进 MSVC STL 类的简化
kernel:支持ida-plugin.json
内核:改进了 strlit 检测(短的已转换为数据项)
noret.cfg:将 terminate std_terminate添加到不返回函数列表中
安装程序:macOS:将所有内容安装到一个捆绑包中.app
许可:用自定义的 Hex-Rays 许可服务器替换 FlexNet 许可服务器(仅限浮动许可)
脚本和 SDK
IDAPython:添加和find_binaryfind_string
IDAPython:添加了虚拟环境检测 (venv)
IDAPython:为 pro.h 中定义的整数类型添加了更多指针包装器
IDAPython:idapyswitch 现在可以用于只读 IDA 安装
IDAPython:已从 CLI 自动完成中删除__magic_methods__
IDAPython:零初始化 Python API 中公开的 C++ 对象
IDAPython:读取时应返回一个空对象 错误,不是loader_input_t.read()bytesNone
SDK:为插件和加载器添加 Visual Studio 模板
SDK:添加了 / 函数标志来标记异常处理程序,它们 在反编译时将被忽略FUNC_UNWINDFUNC_CATCH
SDK:添加以启动进程并与其建立双向通信pipe_process()
SDK:已添加qlist::splice()
SDK:移至node_ordering_tgdl.hpp
SDK:发布基础撤销界面(创建撤销点、撤销、重做)
SDK:重命名abstract_graph_t -> drawable_graph_t; mutable_graph_t -> interactive_graph_t
用户界面
UI:添加了保留结构大小的选项(固定大小的结构体)
UI:添加了“打包字段”复选框以控制结构体字段之间的间隙
UI:命令面板:修复有关“命令失败”的错误报告
用户界面:以更灵活的方式将本地类型导出/导入到 IDC。用户可以选择 不同的策略,例如:加载类型并跳过相等的策略。
UI:如果 IDA 已经打开了一个文件,则“打开”会在新的 IDA 实例中打开一个文件
用户界面:现在可以通过在 “类型库”视图
UI:新的快捷方式集更符合现代操作系统惯例
UI:去掉了“结构体”和“枚举”小部件
UI:新快捷方式:Alt-(和 CMD-)跳转到窗口
反编译器
反编译器: RISCV: 添加了 RV32 和 RV64 反编译器
decompiler:添加了 try/catch ctree 语句
DeCompiler:改进了对可变参数类型的检测
decompiler:引入了一个新事件:hxe_inlining_func
反编译器:发布了一些图形算法(pre/port ordering 和 dominator 计算)
反编译器:发布了 control_graph_t 类;使第三方插件能够执行 结构分析
decompiler: arm: 添加了对 VSEL insn (ARMv8-M) 的支持
反编译器:Impoved 结构复制识别
反编译器:通过引入“saved_to_idb”改进了cfunc_t缓存;否则,我们将保存所有反编译的 对每个“save_database”起作用,一次又一次
反编译器:改进了与二进制运算符相比的常量表示
Decompiler:改进了 HexRay 历史记录以支持 C++ 异常处理程序
decompiler:改进了关于丢失许可证的错误消息:告诉用户缺少什么许可证
decompiler: MIPS: 添加了对 movtz 和 movtn 的支持 (MIPS16e2)
Bug修复
BUGFIX:ARM:在大型 32 位固件二进制文件上分析速度可能很慢
BUGFIX: ARM: 修复了在主函数进入之前分析函数块时可能发生的无限循环
BUGFIX:ARM:停止解码未定义的 MOV Wx、#imm 变体(imm 不适合 32 位)
BUGFIX: cvt64: 如果旧的 .idb 路径包含空格,则将旧的 .idb 转换为 .i64 将失败
BUGFIX:调试器:win32_remote.exe不必要地需要在 Windows Vista 中引入的 API,并且会 不再在XP上运行
BUGFIX: 反编译器: 具有可变大小结构的表达式可能会被误处理
BUGFIX: 反编译器: IDA 可能会在多个时抱怨 “找不到匹配的产品许可证” 已安装反编译器
BUGFIX: 反编译器: 由 UI 相关代码触发的内部错误(例如生成工具提示)可能导致 “未知的 C++ 异常”致命错误
BUGFIX:反编译器:在某些情况下,按 F5 不会刷新伪代码窗口;我们丢弃了 反编译结果
BUGFIX: 反编译器: 值范围优化可能导致代码被错误删除
BUGFIX:DSCU:跨多个子缓存文件的 GAP 无法加载
BUGFIX: kernel: IDA on Linux 对 libsecret 有不必要的硬依赖性,并且拒绝在没有的情况下运行 它。
BUGFIX:导航到与已知类型名称匹配的全局名称将失败
BUGFIX: objc: NS*块引用检测错误最终会导致在 不相关的数据
BUGFIX: PC: / 不修改 x64 代码中的 rsp 或 rax, 与 x86 不同alloca_probechkstk_ms
修复:PC:REX前缀可能被错误地应用于32位指令
BUGFIX: PC: vmovw 指令被解码为使用 16 位寄存器(实际上使用 32 位寄存器)
BUGFIX: PDB: 从一些大型 PDB 移植类型会失败,并显示 “达到最大递归级别”
修正:RISCV:fence.i 指令未解码
BUGFIX: SDK: 修复了 reg_finder_t 中的调试/opt 构建不兼容问题 (std::map member)
BUGFIX: SDK: 并且在位图上会表现得很错误 大小不是 8 的倍数set_all_bits()clear_all_bits()
BUGFIX:有时有关新创建的类似范围的实体(段/函数/...)的信息可能会丢失 在撤消期间
BUGFIX: tinfo: 已删除枚举的外部参照未被删除
BUGFIX: UI: “输出”窗口中的大量行可能会导致速度变慢
BUGFIX: UI:使用颜色代码时(例如在自定义查看器中),IDA 将使用默认值 文本的颜色,而不是以前的背景颜色COLOR_INV