IDA:7.1版有什么新内容?

亮点

欢迎来到IDA 7.1!
  • 在此版本的IDA中,我们发布了反编译器中间语言:微代码,由于很长一段时间我们一直打算这样做,但是微代码不断发展,我们无法做到这一点。 经过十年的发展,它看起来很成熟,可以发布了。 我们相信,它将使我们的用户能够实现比以前更强大,更高级的分析算法。 将来,我们也计划在IDA中使用微码:如果存在反编译器,分析将自动得到改善。

  • 其次,我们改进了IDA v7.1中的调试器模块API。 尽管其余API在v7.0中进行了现代化,但我们没有时间处理调试器API。 现在完成了,我们有了新的亮点(摆脱了旧的定义)。 同时,我们还提高了二进制搜索的速度,并增加了对命名线程的支持。 然而,API的更改意味着需要将第三方调试器插件移植到IDA v7.1。 我们为此准备了一个简短的移植指南,请参见:此处。

  • 我们还改进了DEX加载程序,以处理multidex android程序包。 它们正变得越来越受欢迎,而这个缺点正变得越来越有限。

    请注意HEADER2,TYPES2,METHODS2等段。

  • 我们在这个版本中删除了两个调试器模块WinCESymbian。我们已经很久没有听到关于它们的任何反馈了,而且当我们在论坛上对用户进行调查时,也没有人表示反对,所以我们决定让这些过时的东西消失。

  • 无论是在Decompiler还是IDA中,都有许多微小的改进。虽然我们没有在下面列出所有的改进,但在很多情况下,这两个工具的输出变得更清晰,更容易阅读。

完整的变更清单

  • 处理器模块
    • + ARM: 添加其余的ARMv8.1指令(SQRDMLAH和SQRDMLSH)
    • + ARM: 将MOV + MOVK序列合并为一个具有最终立即值(ARM64)的宏指令
    • + ARM: 使用‘imagerel’运算符进行RVA抵消
    • + MIPS: 将lwl/lwr和类似的序列转换为相应的不对齐的加载/存储宏(ulw/uld/等)
    • + PC: 增加了UD0和UD1指令的解码功能
    • + PPC: 始终允许VLE代码,并在加载二进制文件时,为用户提供将所有代码设置为VLE的服务
    • + DALVIK: 增加对“调用多态”、“调用多态/范围”、“调用自定义”、“调用自定义/范围”指令的支持
  • 文件格式
    • + COFF: i386文件默认为Windows-1252(或本地8位编码)
    • + Mach-O: IDA现在加载存在于可能的、单独的.dsYM文件中的符号
    • + dex: 增加了对multidex android软件包的支持
    • + dex: 增加对DEX文件格式的支持038
  • 调试器
    • + 调试器:OSX: 在dbg_macosx.cfg中引入SYMBOL_PATH。当使用远程Mac OSX调试器时,这可以显著加快符号加载速度
    • + 调试器:增加了对线程名称的支持
    • + 调试器:iOS:支持iOS 10及更高版本的远程进程列表
    • + 调试器:提高了进程内存中二进制搜索的速度(1000倍或更多)
    • + 调试器:如果设置了“使用硬件临时断点”,则使用硬件断点进行跟踪
    • + ios_deploy: 增加了“applist”阶段
    • + ios_deploy: 增加了“探头”阶段
    • + ios_deploy: 修复“杀”相,适用于iOS 10及以后的版本
    • + ios_deploy: 修复“proclist”相,适用于iOS 10及以后的版本
    • + ios_deploy: 改进了“启动”和“杀死”阶段,使其能与任何任意应用程序(甚至是系统应用程序)一起工作
    • + GDB: 增加了对GDB存根报告不可用寄存器的支持
    • + GDB: 增加了对QPassSignals的支持(当一个异常被设置为传递给应用程序,而不是暂停,并且是静默的时候
    • + GDB: 改进了远程存根所支持的最大数据包大小的计算
    • + GDB: 改进的结构检测和寄存器组的设置
    • – 删除了WinCE和Symbian调试器
  • 内核/杂项
    • + 内核:在ida64中增加了对64位‘字节&8217;的支持
    • + 内核:改进了对noret函数的处理
    • + 内核:改进了函数检测的启发式方法
    • + 内核:改进的开关识别
    • + 内核:改进的系统eh区域检测和分析
    • + 内核:使create_generic_linput()和相关函数具有线程安全性
    • + rtti: 改进了自动检测‘完整对象定位器’作为vtable前的引用
    • + FLIRT: ICL: 为icl175添加了签名(Intel C ++ 17.5)
    • + FLIRT: ICL: 为icl180添加了签名(Intel C ++ 18.0)
    • + FLIRT: ICL: 为icl181添加了签名(Intel C ++ 18.1)
    • + FLIRT: VC: 为vc1412添加了签名(Visual Studio 2017.5)
    • + FLIRT: pelf: 增加了对x86_64重定位41(R_X86_64_GOTPCRELX)和42(R_X86_64_REX_GOTPCRELX)的支持
    • + FLIRT: vc/vc64: 为ucrt ..16299添加了签名(Windows 10 Fall Creators Update SDK)
    • + TIL: 为Objective-C添加了类型库
    • + TIL: 向macosx.til添加了dispatch_sync(),dispatch_async()和其他与块相关的函数的原型
    • + TIL: 向macosx.til添加了结构Block_layout和相关的_Block_xxx函数
    • + CFG: 新增‘中文’文化档案
    • + CFG: 添加了配置变量APPEND_IDB_EXT:在构造IDB名称时,用数据库扩展名附加或替换输入文件扩展名
    • + CFG: 删除了CACHE_NODE_SIZE,将配置参数XREF_CACHE_LIMIT更改为XREF_CACHE_COUNT,可以指定外部参照缓存条目的最大数量
  • 用户界面
    • + ui/qt: “导出数据”现在将提出一个文件名,该文件名源自正在导出的第一个项目的名称’
    • + ui/qt: 增加了API来清除、保存和检索“输出窗口中的行数”
    • + ui/qt: 选择者现在可以为其描述性较低的列名提供工具提示
    • + ui/qt: 在调试过程中,现在可以使用Alt+T、Ctrl+T搜索locals & watch
    • + ui/qt: 除了字体外,现在还可以指定列表行的顶部和底部的垫子
    • + ui/qt: 现在可以更改表格数据部件的字体了
    • + ui/qt: 脚本片段:当创建一个新的片段时,继承前一个片段的语言
    • + ui/qt: 现在,搜索二进制数据使用户可以选择应将输入文本的字符串文字部分编码为哪种编码,以便执行搜索
    • + ui/qt: “脚本片段”编辑器现在在左侧显示行号
    • + ui/qt: 当将一个字符串文字分配给一个地址时,现在可以先选择编码,然后再选择字符串文字类型
    • + ui/txt: 模仿linux对非ASCII输入字母的行为,这样他们就不会无意中映射到不相关的操作上
    • + ui: 能够从任何地方运行当前脚本片段(使用Ctrl + Shift + X)
    • + ui: 添加了第三组内核选项,以允许通过UI修改AF_DORTTI和AF_DOEH
  • 脚本& SDK
    • + SDK: 现代化调试器模块api
    • + IDC: 字符串比较从第一个零字符停止,现在我们考虑了字符串的实际长度(中间可能有零)
    • + Python,IDC: 现在,默认情况下,脚本化的加载程序/ procmods /插件会默认加载到其自己的名称空间中,以防止名称空间污染(前提是脚本引擎支持)。
    • + SDK: 增加了‘ui_screen_ea_changed’通知,让插件知道什么东西改变了全球可用的&##8220;当前地址”
    • + SDK: 在ua.hpp中添加了format_charlit(),这是print_charlit()的一个更精细的版本
    • + SDK: 已废弃的get_min_spd_ea()
    • + SDK: tryblks: 增加了 find_syseh()
  • 反编译器
    • + 导出的微码api
    • + 增加了UI操作“设置调用类型…”
    • + 改进结构域重建的处理
    • + 引入了KERNEL_NREGS配置参数
    • + 在某些情况下引入了摆脱__OFSUB__的规则
    • + 对优化引擎进行了许多小的改进
    • + pc: 增加了对xadd指令的支持
    • + 识别浮点算术aeabi辅助函数
    • + 识别内存管理助手aeabi_memcpy *,aeabi_memset *,aeabi_memclr *
    • + 具有相同分支的简化的if-then-else构造
    • + 如果它们之间有矛盾,请使用用户定义的stroff而不是udt字段引用
    • + x64: 增加了对syscall指令的支持(可能时转换为linux系统调用)
  • 漏洞修复
    • 漏洞修复: pc: 修复间歇10148
    • 漏洞修复: DWARF: 插件可能会显示一个警告,当它不能使重复的typedefs的意义
    • 漏洞修复: 在没有加载IDB的情况下,编辑脚本片段并关闭其窗口,当用户决定加载IDB时,可能会导致IDA崩溃
    • 漏洞修复: 对于超出第二个操作数的操作数,一些操作数的集体应用(例如,将立即进制设置为八进制)会失败
    • 漏洞修复: 对于指向有未初始化数据的地址的值,集体偏移转换可能失败
    • 漏洞修复: 集体偏移转换可能会使一些有效值无法转换
    • 漏洞修复: 集体偏移量转换会将不在指定范围内的值转化为偏移量,但还是会将其转化为偏移量
    • 漏洞修复: 对于具有字符串文字类型的结构成员,某些字符串布局(例如,delphi的4字节长度头)没有得到尊重
    • 漏洞修复: IDA SDK 7.0’的插件/script_plg/procext.py没有被移植到IDA 7.0处理器模块API中
    • 漏洞修复: IDA可以INTERR(40481),以防用户在一个隐藏的函数上的平面&图形视图之间来回切换,并且在一个显示一些额外信息的段的开始阶段
    • 漏洞修复: 在某些ARM64文件中,IDA可能会因内存外错误而崩溃,尤其是在使用反编译器时
    • 漏洞修复: IDA’的调试器内存缓存在地址0处读取失败后可能会产生坏的缓存命中
    • 漏洞修复: IDAPython/bc695: action_ctx_base_t::form & action_ctx_base_t::form_title缺失
    • 漏洞修复: IDAPython/bc695: 许多“inf”字段已无法访问(例如,‘mf’)
    • 漏洞修复: IDAPython: 不能将-1作为‘len’传递给get_strlit_contents()
    • 漏洞修复: IDAPython: 在MFF_NOWAIT下使用execute_sync()会导致IDA中止()
    • 漏洞修复: IDAPython: 向后兼容的多选择器会在双击/进入时失去选择
    • 漏洞修复: IDAPython: 派生自IDP_Hooks,可能会导致错误信息的形式为“ValueError: invalid null reference in method ‘IDP_Hooks_ev_adjust_argloc'”被打印在“Output window”
    • 漏洞修复: IDAPython: 如果没有给插件一个“wanted_name”,可能导致IDA崩溃
    • 漏洞修复: IDAPython: ida_diskio.get_ida_subdirs()无法使用
    • 漏洞修复: IDAPython: ida_hexrays.cexpr_t()’的copy-constructor不会创建底层C树的重复
    • 漏洞修复: IDAPython: 处理器_t.is_sp_based()在按照proctemplate.py中的例子进行操作时无法使用
    • 漏洞修复: IDAPython: processor_t.set_func_start()/set_func_end()通知无法使用
    • 漏洞修复: IDAPython: rebase_program()不会接受一个最重要的位数设置为1的delta(例如0x80000000),这使得使用起来非常困难
    • 漏洞修复: IDAPython: 标签完成可能无法工作,这取决于处理器模块(例如,ARM)
    • 漏洞修复: 在‘Structures’窗口中,具有字符串文字类型的结构成员,其编码每单位占用超过2个字节(例如,UTF-32),将被表示为‘word’s,而不是‘dword’s
    • 漏洞修复: 在没有打开数据库的情况下打开脚本代码段,会导致默认代码段的名称为空
    • 漏洞修复: 含有联合结构和匿名结构的PDB可能会导致r 815之间的相互
    • 漏洞修复: 检索的地址名称是一个函数块的最后一个地址,而这个函数块本身是放在主函数块之前的,可能会提供错误的结果
    • 漏洞修复: TRICORE: 注册跟踪器计算的偏移量可以覆盖用户定义的偏移量
    • 漏洞修复: 在计算器中输入‘0x23’(即热键‘?’)将导致截断字符显示
    • 漏洞修复: gdb: IDA不会显示“运行直到返回&8221的等待框
    • 漏洞修复: 加载一个pdb文件会在文件菜单的文件历史中添加当前的idb
    • 漏洞修复: pdb插件在远程调试时可能会使msdia库崩溃
    • 漏洞修复: qlist::swap()被破坏了
    • 漏洞修复: 刷新一个选择器可能会导致IDA在非常特殊的情况下挂起
    • 漏洞修复: ui/qt: “报告一个错误/问题”对话框’的文本编辑在文本区域的右侧有空的空间
    • 漏洞修复: ui/qt: 在将结构成员设置为字符串文字后,重新打开对话框不会显示正确的字符串类型
    • 漏洞修复: ui/qt: 在图形视图中,转到长线的开头/结尾,可能会导致节点移出屏幕
    • 漏洞修复: ui/qt: 在“IDA Colors”配置对话框中用键盘导航预览列表是不可能的
    • 漏洞修复: ui/qt: 从快捷方式编辑器中保存快捷方式,对于清除了快捷方式的操作会失败
    • 漏洞修复: ui/qt: 在联合体中设置字段类型可能会导致联合体被截断
    • 漏洞修复: ui/qt: 当自动拍摄快照时,不要显示等待对话框,因为它可能会干扰用户的工作
    • 漏洞修复: ui/txt: 创建反编译器视图时,idat [64]可能在退出时崩溃
    • 漏洞修复: hexrays: ARM cinv指令未正确反编译
    • 漏洞修复: hexrays: 结合规则24(64位否定)可能会产生错误的代码
    • 漏洞修复: hexrays: 如果先前的用户操作要将函数参数类型的类型更改为不兼容的类型,则在重命名堆栈上的函数参数后,反编译器可能会崩溃
    • 漏洞修复: hexrays: 删除用户定义的标签是不可能的
    • 漏洞修复: hexrays: 在某些情况下,64位操作数的组合可能会产生错误的结果
    • 漏洞修复: hexrays: 在极少数情况下,将规则组合为64位加法可能会产生错误的代码
    • 漏洞修复: hexrays: 无法重命名“结果”变量
    • 漏洞修复: hexrays: 在伪代码窗口中重命名功能可能会导致崩溃
    • 漏洞修复: hexrays: 修正了许多中间环节
    • 漏洞修复: 调试iOS框架时,缺少exe模块的HEADER段