IDA:7.4版有什么新变化?

亮点

欢迎使用IDA 7.4! 我们很高兴宣布IDA的新版本已经发布!

  • 支持Python 3

    正如之前宣布的那样,IDA 7.4 即开即用Python 3。由于现有的绝大多数脚本和插件都是为Python 2编写的,所以仍然支持Python 2,并且仍然是默认版本。然而,你不必拘泥于一个版本:可以在Python 2和Python 3之间切换,甚至在不同版本的Python 3之间切换,而无需重新安装IDA。

    我们为选择使用Python 3的人准备了一份转移指南,可能需要对他们的脚本做一些调整。

  • Python 2: 6.95兼容API默认关闭

    IDA 7.4 也默认关闭了 6.95 API 的兼容性。我们也写了一份转移指南来帮助解决这个问题。

  • 新的处理器模块:

    S390(z /建筑)


    Renesas M16C/80, M32C and R32C.

    IDA’的处理器列表不断扩大。我们是否遗漏了您经常处理的东西?请告诉我们!
  • 新结构编辑器

    该编辑器在局部类型窗口中可用,让您轻松查看结构成员的偏移量和大小。
  • 简化的C++名称

    C++符号可能是出了名的长,尤其是在扩展了所有默认模板参数的情况下。我们已经添加了一些简单的规则来将这些名称折叠回它们的简化形式(目前涵盖了大多数STL容器)。你也可以通过编辑goodname.cfg来添加自己的规则。
  • 扩展的GDB支持

    通过GDB协议现在支持Tricore,68K,RH850。 这对于在QEMU或TRACE32等模拟器中调试代码很有用。

  • 反编译器改进

    除了不断改进反编译器引擎(见对比),我们还根据客户’的反馈不断调整UI。 此发行版中的几个示例:

    • 匹配的小括号/括号现在会在伪代码中高亮显示,您可以在它们之间快速跳转(默认热键:‘%’)。

    • 默认情况下可以折叠局部变量声明

    • 可以在“转换为结构*”对话框中轻松创建移位指针

    • “全局交叉引用”列表在伪代码视图中可用于结构成员和枚举(当然,结果将取决于你的数据库的类型填充情况)。与标准的xrefs显示反汇编不同,结果是以反编译的代码行显示的。默认的热键是Shift-X。

完整的变更清单

  • 处理器模块
    • + 68K: 允许使用特殊标签A5BASE和A4BASE来以任何文件格式(不仅是Palm PRC)对a5和a4相对地址进行寻址
    • + ARM: 添加PLDW A32 / T32指令
    • + ARM: 从ARMv8密码扩展中添加对A32和T32指令的支持
    • + ARM: 为AArch32状态实现了ARMv8 FPU指令(浮点条件选择等)
    • + ARM: 为AArch32实现ARMv8 SIMD指令
    • + ARM: ARMv8.1 AArch32 RDMA扩展支持(VQRDMLAH / VQRDMLSH)
    • + ARM: 假设BRK在iOS上停止执行
    • + ARM: 支持来自iOS 13的新A64开关版本
    • + ARM: 支持AArch64 ILP32文件(ELF32容器中的A64代码)
    • + PC: 添加了控制对thunk函数的识别的选项
    • + PPC: 增加了对Power ISA版本3.0 B的支持
    • + PPC: 支持使用e_slwi指令的开关
    • + PPC: 支持使用‘lr’寄存器代替‘ctr’进行分支的开关
    • + S390: 用于IBM S/390和z/Architecture处理器的新处理器模块(目前只支持ELF格式)
    • + M16C/80: Renesas M16C系列新的处理器系列
    • + R32C: Renesas M16C系列新的处理器系列
  • 文件格式
    • + ELF: 增加了对MSP430文件的基本支持(不需要处理e_flags,不需要重新定位)
    • + PDB: 对于旧的MSF 2.0 PDB文件自动回退到MSDIA(仅Windows)
    • + Amiga: 默认情况下将大块文件加载到0x10000,因为操作系统使用0左右的区域
    • + MACHO: 将__DATA_CONST段的部分标记为只读
  • 调试器
    • + 调试器:增加了对Motorola 68K处理器的支持
    • + 调试器:增加了对Renesas RH850处理器的支持
    • + 调试器:增加了对Tricore处理器的支持
    • + 调试器:GDB: 增加了对 Lauterbach’s TRACE32 模拟器的支持
    • + 调试器:iOS:添加了对iPadOS 13的支持
  • 内核/杂项
    • + 内核:改进的数据融合
    • + 内核:改进的功能识别
    • + 内核:现在生成HTML将把颜色放在CSS类中,而不是对每个元素进行硬编码
    • + 内核:带尾部的函数不能是重排函数
    • + 内核:对浮点数使用NaN,+ Inf或-Inf
    • + 内核:使用正则表达式美化IDA名称(例如STL模板名称)。 有关详细信息,请参见cfg / goodname.cfg
    • + 内核:添加了新的ABI位ABI_HUGEARG_ALIGN:即使参数的对齐方式超过了本机字长的两倍,也使用自然类型对齐方式作为参数
    • + FLAIR: PCF: 支持更多TMS320C55 COFF重定位
    • + FLAIR: 删除了对解析omf166文件的支持
    • + FLIRT: 添加了vc1422,vc1423的签名(Visual Studio 2019.2,2019.3)
    • + FLIRT: 为vc1422,vc1423添加了MFC签名(Visual Studio 2019.2,2019.3)
  • 用户界面
    • + ui/qt: 添加了“克隆”命令到“执行脚本”部件
    • + ui/qt:添加了get_custom_viewer_location()以检索适合与custom_viewer_jump()一起使用的位置
    • + ui/qt: 添加了用户贡献的‘darcula’主题
    • + ui/qt: 按住Ctrl键并单击导航带将使IDA向导航历史添加一个条目
    • + ui/qt: 按住Shift键并在导航栏中单击将导致IDA在反汇编列表中选择文本
    • + ui/qt: 在有地址的选择器中按<Alt+Enter>将在新的分解视图中跳转到该地址
    • + ui/qt: 重构了“编辑&8221;,以及用于设置自定义数据类型和格式的上下文菜单
    • + ui/qt: 颜色‘对话框现在提供了一个“应用”按钮,使其更容易看到更改对应用程序’部件的实际影响
    • + ui/qt: 本地类型编辑器现在可以在编辑过程中显示结构及其字段的大小和偏移量
    • + ui: 默认情况下不要求确认可以通过Undo轻松还原的操作,例如(‘detach function tail’, ‘Undefine’和‘Set function end’)
    • + ui: log “不再显示此消息”消息到输出窗口
  • 脚本&SDK
    • + IDAPython: 增加了对Python 3.x的支持(默认仍为2.7)
    • + IDAPython: 现在,Python脚本和插件示例已与IDA一起放在“python/examples”子目录中
    • + IDAPython: 添加了一个如何使用show_wait_box()/hide_wait_box()的例子
    • + IDAPython: 暴露的place_t::serialize() & place_t::deserialize()
    • + IDAPython: IDA < 7.0兼容层现在默认为关闭;请参见这里获取更多信息
    • SDK: 在set_highlight()中添加了HIF_NOCASE,用于设置不区分大小写的高亮
  • 反编译器
    • + hexrays: 增加了‘显示全局xrefs’; 它适用于struct和enum成员
    • + hexrays: 增加了对匹配小括号对的高亮支持
    • + hexrays: 增加了快捷键“%”,以跳转到伪代码窗口中匹配的小括号或(大括号/方括号)
    • + hexrays: 增加了配置变量 COLLAPSE_LVARS,以默认折叠局部变量声明
    • + hexrays: 当解析调用函数的省略号参数时,增加了对“格式”属性的支持
    • + hexrays: 增加了对 _m_prefetch, _m_prefetchw 内联函数的支持
    • + hexrays: 增加了对_InterlockedCompareExchange64内联函数的支持
    • + hexrays: 增加了对更多软件浮点助手(floatdidf等)的支持
    • + hexrays: 尝试在涉及枚举类型的表达式中自动将数字转换为符号常量
    • + hexrays: 更好地删除对__安全cookie的引用
    • + hexrays: 使用启发式规则更积极地创建数组
    • + hexrays: 现在我们尝试重命名接收GetProcAddress返回值的变量
    • + hexrays: 反编译器可以在简单情况下自动创建变量映射(例如,用于输入参数的副本)
    • + hexrays: 添加了DECOMP_ALL_BLKS以在微码中包含无法访问的块
    • + hexrays: sdk: 添加了modify_user_lvar_info()
    • + hexrays: 停止隐藏对fs:0的读取访问
    • + hexrays: 用户可以在“转换为结构体*…”动作中输入指针移位delta,以准备移位的指针
    • + hexrays: x86: int 3/__debugbreak()现在只在反汇编时发生的情况下停止执行流(由“分析int 3指令”处理器特定选项控制
  • 漏洞修复
    • 漏洞修复: 6816: 当打开6816处理器(可能还有其他一些处理器)保存的IDB时,IDA可能会崩溃
    • 漏洞修复: ARC:在延迟槽中初始化的函数参数未正确注释
    • 漏洞修复: ARM64:在某些情况下,无效指令可能被错误地解码为SMOV / UMOV
    • 漏洞修复: ARM:如果将位置解释为偏移量和OWORD,则分析可能会无限循环。 这在iOS 13.1内核缓存中很常见
    • 漏洞修复: ARM:__usercall函数原型中不能使用寄存器S0-S31
    • 漏洞修复: EBC:IDA可能无法分解一些EBC指令
    • 漏洞修复: M16C:PUSHC指令未更改堆栈指针值
    • 漏洞修复: MIPS:重新打开保存的数据库时,ABI选择设置可能不正确
    • 漏洞修复: MIPS:mftr / mttr指令可能无法正确解码
    • 漏洞修复: MSP430:函数流程图是错误的,因为调用指令未这样标记
    • 漏洞修复: MSP430:.rpt前缀的指令无法解码
    • 漏洞修复: MSP430:跟踪SP更改时未正确处理suba和incda指令
    • 漏洞修复: PIC16:相对跳转/呼叫目标地址被截断为16位
    • 漏洞修复: PPC:在regtracker中的VLE调用后修复了LR的不正确值
    • 漏洞修复: PPC:在某些情况下,ida将创建16位堆栈变量而不是8位堆栈变量。 列表中的差异很小
    • 漏洞修复: DWARF::IDA可能无法为某些原型参数确定正确的类型
    • 漏洞修复: DWARF:IDA可以使用调试信息中的某些类型的构造对代码30304进行INTERR
    • 漏洞修复: PDB:解析大小为0的调试条目时,IDA可能会崩溃
    • 漏洞修复: PE: IDA可以抱怨“无效的解卷数据”在有效的文件中(如Windows内核)
    • 漏洞修复: SWIFT: IDA将无法拆分带有“j_”前缀和“_N”后缀的名称
    • 漏洞修复: DBG: gdb:设置恢复模式时,检查是否有网络错误
    • 漏洞修复: DBG: ios,xnu调试器在arm64 CPSR寄存器中使用了错误的标志名
    • 漏洞修复: DBG: linux_server可能因为恶意客户端而崩溃(nullptr dereference)
    • 漏洞修复: DBG:如果一个恶意的ida拷贝在一个未打开的通道上发送‘close_file’请求,linux_server会崩溃
    • 漏洞修复: DBG: ida的恶意拷贝会导致调试器服务器崩溃
    • 漏洞修复: DBG: 如果IDA的恶意副本在发送没有密码的数据包时,受密码保护的调试服务器可能会崩溃
    • 漏洞修复: kernel: 当分析接近最大地址(0xFFFFFFFF)的数据时,IDA(32位)可能会挂起
    • 漏洞修复: kernel:IDA可能为特别段中未命名的条目生成过多的空行
    • 漏洞修复: kernel: IDA可以截断Delphi字符串的表示方法
    • 漏洞修复: kernel: 现在,当段边界被改变和地址被禁用时,我们会删除有关修补字节的信息
    • 漏洞修复: kernel:在从7.0之前的数据库升级时,结构中的Unicode字符串会被错误地转换
    • 漏洞修复: kernel:保存超过65535个段选择器是不可能的
    • 漏洞修复: idat:使用快速搜索时,光标在选择器行上的位置错误
    • 漏洞修复: idat:更改清单选项后未刷新反汇编清单
    • 漏洞修复: idat:ida截短选择器中所有太长名称的开头,但是此逻辑应仅应用于文件路径
    • 漏洞修复:ui:“切换调试器”;如果当前数据库只有一个调试器可用,则对话框不会显示(事实上,它也可以用来设置“无调试器”为默认值)
    • 漏洞修复:ui:当处理折叠函数时,函数窗口可能会不必要地重新加载
    • 漏洞修复:ui/qt: “提示”背景色和“高光”颜色没有从IDA 7.2’的注册表转换到IDA 7.3 CSS中
    • 漏洞修复: ui/qt: 当调用上下文菜单时,选择器的动作不会被更新
    • 漏洞修复: ui/qt: 根据光标放置在线条上的位置,切换到图形视图可能会导致动画被触发,即使是在没有调整的情况下
    • 漏洞修复:ui/qt:双击“Local types”中的一个条目,使其与IDB同步,但无法撤销
    • 漏洞修复: ui/qt: 拖动之前在分割器中的widget会导致IDA崩溃
    • 漏洞修复: ui/qt: ida64.app在macOS 10.15上的文件对话框被破坏
    • 漏洞修复: ui/qt.Pseudocode-A”和“Pseudocode-A”同步时,IDA会崩溃
    • 漏洞修复: ui/qt: IDA在切换桌面时可能会崩溃
    • 漏洞修复: ui/qt: IDA有时会在“桌面重置时挂起
    • 漏洞修复: ui/qt: 在“输出窗口中”Ctrl+左/右没有像应该的那样在单词中导航
    • 漏洞修复: ui/qt: 对于相同的文件,初始自动分析的时间可能比以前版本的IDA要长得多
    • 漏洞修复: ui/qt: 如果在标签式部件上进行快速拖放操作,OSX IDA可能会崩溃
    • 漏洞修复: ui/qt: snippets视图:我们必须在运行之前保存当前脚本,否则undo会破坏它
    • 漏洞修复: ui/qt: 一旦设置了颜色,颜色按钮可能缺少一个‘reset’伴生按钮
    • 漏洞修复: ui/qt: #8220;加载文件”对话框可能会错位,特别是在现有的IDA实例中打开一个新文件时
    • 漏洞修复: ui/qt: “输出窗口”在导航到结尾或选择时,可能会跳转到错误的地方(对于长行,问题更加明显)
    • 漏洞修复: ui/qt: 当选择超出边界时,#8220;输出窗口”可以跳转
    • 漏洞修复: ui/qt: 在还原桌面后,输出窗口总是在看不到的地方出现
    • 漏洞修复: ui/qt: 深色主题会导致常规的表格视图隐藏其垂直标题(在左侧)
    • 漏洞修复: ui/qt: 撤销操作会错误地重置导航条的缩放级别
    • 漏洞修复: ui/qt: 在创建选择器时,如果选择器在之前被修改过,并且保存了数据库,那么IDA可以忽略一些列的属性
    • 漏洞修复: ui/qt: 当创建模态选择器时,IDA可能会计算错误的最佳尺寸,即使在不需要的情况下也会使水平滚动条可见
    • 漏洞修复: ui/qt: 当对接小部件时,可能会发生一些小部件意外地向右滚动的情况
    • 漏洞修复: ui/qt: 当在“输出窗口中用鼠标进行选择时”,如果选区离开视口,光标不会滚动视图
    • 漏洞修复: ui/qt: IDA会不必要地要求OSX 10.14 Mojave上的Accessibility权限
    • 漏洞修复: ui: 在归还借来的许可证后,IDA会抱怨无法连接到许可证服务器;改变行为,使IDA在归还许可证后立即退出(因为它没有许可证了)
    • 漏洞修复: ui: 当试图分离一个有多个父函数的函数块时,点击“OK”而不是使用Enter将无法工作
    • 漏洞修复: ui: 签署的枚举成员在Enums窗口中被打印成无符号数字
    • 漏洞修复: IDAPython: 在自定义图形中,无法重新设置选择
    • 漏洞修复: IDAPython: 当脚本本身已经调用show_wait_box()时,不要触发“运行Python脚本”等待对话框
    • 漏洞修复: IDAPython: 如果没有设置‘node_info_t.ea;字段,GraphViewer.SetNodeInfos可能会触发错误
    • 漏洞修复: IDAPython: 保存udt_member_t类型字段的引用会导致IDA崩溃
    • 漏洞修复: IDAPython: mbl_array_t.deserialize()无法使用
    • 漏洞修复: IDAPython: SWiG生成的docstrings中的一些返回类型是错误的
    • 漏洞修复: IDAPython: 使用argloc_t::consume_scattered()会使IDA崩溃
    • 漏洞修复: IDAPython::当ida_kernwin.Choose实例中缺少一些属性时,Show()方法可能会返回-1,而不说明错误所在
    • 漏洞修复: IDC: idc.idc对dt_ldbl、dt_byte32、dt_byte64的定义有误
    • 漏洞修复: hexrays: 一个显式不同步的“伪代码”视图,可以在下一次按下<Tab>时重新与“IDA View-A”同步(如果PSEUDOCODE_SYNCED被设置为YES)
    • 漏洞修复: hexrays: arm: 修正了CDP、CDP2指令的反编译错误(CRd在固有函数调用中错误地表示为Rd)
    • 漏洞修复: hexrays: arm64: 修正了指令CSINV的错误翻译
    • 漏洞修复: hexrays: 反编译器在浏览伪代码时可能会崩溃
    • 漏洞修复: hexrays: 反编译器可能会错误地将分散的寄存器参数转换为_cdecl函数
    • 漏洞修复: hexrays:由零固定一个除法
    • 漏洞修复: hexrays: 修正了interr 50194(当移位指针是结构体成员时发生)
    • 漏洞修复: hexrays: 修正了mbl_array_t序列化的错误
    • 漏洞修复: hexrays: 修正了一些cexpr_t对象的‘ea’字段的值
    • 漏洞修复: hexrays: hxe_curpos生成的时间太早,并且‘vdui_t::cpos’可能持有过期信息
    • 漏洞修复: hexrays: 在某些情况下,inlined的‘strcpy’可能会在Big Endian平台上错误地组合
    • 漏洞修复: hexrays: 在某些情况下,开关值计算错误
    • 漏洞修复: hexrays: 将64位负数常数保持不变,以无符号形式输出
    • 漏洞修复: hexrays: 一些未定义的变量没有被标记为变量
    • 漏洞修复: hexrays: 当使用Hexrays_Hooks时,从‘create_hint’中返回代码2(指示反编译器添加自己的提示),如果反编译器没有添加自己的提示,则根本无法显示任何提示
    • 漏洞修复: hexrays: 一些push/pop序列可能会被错误地优化掉