亮点
欢迎来到IDA 7.2!
-
这次我们有很多消息,但先说说大家最希望和要求的:支持ARM v8.3指令。随着新 iPhone XS 的出现,许多逆向工程师开始偶然发现了这些新的指令。此外,它们还包含了一种新的安全机制: 指针验证码。它使得利用软件漏洞的难度大大增加,但它需要修改我们的文件解析和分析方法。没错,即将推出的IDA Pro就很好地支持了它。
反编译器也支持它们,并且可以在输出代码中显示PAC验证作为编译器固有的内容,或者隐藏它们,这是默认行为:
新的 iOS 12 dyld 缓存和带有 标记指针的内核缓存也得到了很好的处理。
在 IDA 7.1 中加载 iOS12 内核缓存时,许多指针行不通,而且 kexts 也未被检测到。
在IDA 7.2中,指针被正确解析,kexts被标记起来。
说到dyld缓存,其中一个常见的抱怨,通常你必须选择加载一个完整的缓存来查看所有的模块(这需要很长的时间),或一个单一的模块(并看到指针导致无处时,他们指向其他,未加载的模块)。我们’已经尝试用“加载模块与依赖关系”选项来解决这个问题,但事实证明它在实践中相当有限。
现在你不用再选择了! 即使你加载一个模块,并看到一个红色的指针表示不存在的内存,只需右键单击它,就可以将丢失的模块加载到数据库中:
稍等加载完成,根据需要重复加载其他地址
…并导航到目的地继续分析!
当然,这只有在你还有原始缓存文件存在的情况下才有效,但它仍然应该加快你的工作速度。
对了,对于苹果软件,我们也实现了区块的识别。我们同时支持全局和本地(基于堆栈)的块。objc插件解析块描述符,并自动做出代表块所捕获的本地上下文的结构。现在反编译器的输出是这样的:
其实还有很多其他Objective-C的改进,都可以在子菜单中看到:
注意:有些功能只有在你有被分析平台的反编译器时才有效。
我们的调试器可以处理许多新的OSX和iOS功能,并且可以调试iOS 12应用程序,包括使用PAC指令在代码中进行堆栈解卷:
-
关于更多更深入的mac特定新功能,请参阅IDA 7.2 – The Mac Rundown
-
但关于苹果的话题已经够多了。Linux 和 Mac 用户会喜欢的一项改进:对PDB文件的本地支持。是的,我们实现了一个完整的 PDB 解析器,现在 Unix 上的 IDA 可以从 PDB 文件中加载信息,而无需任何 MS Windows 计算机。你甚至可以做一些像
export_NT_SYMBOL_PATH='srv*/home/symbols*https://msdl.microsoft.com/download/symbols'
这样的技巧,IDA将自动为你下载PDB文件。在这种情况下,一张截图并不能说明问题,但请注意,这是在Linux上完成的。我们在所有的平台上都使用自己的PDB解析器,但如果有需要,也可以换回MS DIA。
-
Microchip公司为16位PIC24和dsPIC处理器推出的全新处理器模块:
它支持PIC24/30/33系列,并带有丰富的配置文件。
我们’还扩展了经典的8位PIC系列,支持“Enhanced Mid range”(PIC1XF1XXX)指令。IDA会自动跟踪用movlb和movlp对银行寄存器的变化,这在分析分布在多个银行的大程序时非常有用。
-
NEC 850 处理器模块已经扩展,以处理来自 Renesas 的 V850E2M 和 RH850 的新寻址模式和指令。例如,我们对处理单精度和双精度浮点的全套指令进行了解码:
也支持许多新的RH850指令,如位操作或长程条件分支:
-
我们用移位指针的概念改进了我们的类型系统。当一个指针指向一个结构的中间时,这个概念很有用。现在输出看起来非常整洁,以至于我们的一个用户说:“__移位指针真棒,Delphi代码从来没有看起来这么性感!”
-
反编译器知道C++类的层次结构和虚拟函数。我们甚至支持多重(但不是虚拟)继承。IDA v7.1中的输出是这样的:
现在看起来晶莹剔透:
这里“C”是一个有多个基类的复杂类,而基类又有多个基类等…。
-
事实上,反编译器还有很多其他改进。我们计划准备一个单独的网页来介绍更多的细节,但现在还有一个重大的改进值得一提。现在反编译器有了一个强大的值域分析引擎。不仅如此,它还可以从反编译器SDK中使用。值域分析提高了反编译质量,也将用于改进IDA所进行的分析。左边是v7.1的反编译器输出,右边是v7.2的反编译器输出。
在其他反编译器的改进中:有了处理占用同一栈槽的多个栈变量的方法,有了更好的优化引擎,有了更好的对投射运算符的处理,有了更好的类型推导,有了更积极的C表达式简化,有了for-loop识别,很多细微的bug都没有了等等。我们希望与反编译器的合作能够更加愉快和无缝。
我们还改进了最初在 v7.1 中发布的微代码 API。不幸的是,我们不得不对很多东西进行了调整,以至于新的API与旧的API不兼容,但我们承诺,从现在开始,我们将努力保持它的稳定性。
-
最后,在IDA v7.2中,我们引入了一个新的(实验性的)Lumina服务器。把它看作是关于流行函数模式的公共存储。lumina服务器保存着函数的元数据(如名称、注释、原型、操作数表示等)。IDA可以要求Lumina识别当前数据库中的函数,并应用相应的元数据。它和FLIRT一样,但它是动态的,存储的信息更多,可以识别FLIRT不能识别的函数。
(是的,你猜对了,绿色代表lumina 🙂)
任何用户都可以向Lumina推送信息。目前,Lumina的数据库还不是很大,但我们希望它能很快得到填充,变得有用。所以,如果它还不能识别你所有的标准功能,也不要太快失望,但我们会努力的!
完整的变更清单
-
处理器模块
- + 68k: print pc-relative operands with explicit “(pc)”后缀;看来gas接受这两种形式,有一个明确的后缀是件好事
- + ARC: 提高转换器识别能力
- + ARM : 增加了 ARM-v8.3a PAC(指针验证码)指令
- + ARM: 增加对A64基本加密指令(AES、SHA1、SHA2)的支持
- + ARM: 改进Mach-O和PE二进制文件中ARM64导入函数存根的检测
- + ARM: 简化A64指令别名MUL,MNEG,SMULL,SMNEGL,UMULL,UMNEGL
- + DWARF 现在在Android平台上可以进行源码级调试了
- + H8*: 提高转换器识别能力
- + MC6812: 追踪SP寄存器的变化
- + NEC850: 增加了V80E2M和RH850浮点指令(以及许多其他指令)
- + PIC: 增加了更多的16F1x和12F1x指令的解码
- + PIC24: 新处理器模块
- + PC: 又增加了一个序言模式
- + PC: 改进了对函数 prolog 的 ‘push ecx’ 的检测
- + PC: 减少错误创建的偏移表达式的数量
- + PC: 改进了对gcc vararg prolog的识别
- + PIC16: 增加了PIC24,30,33系列的处理器模块
- + PPC: 增强型交换器识别
- + PPC: 改进的交换器识别
- + SH3: 改进的SP分析
- + SH3: 提高交换器识别能力
- + SPARC: 提高交换器识别能力
- + TMS320C28X: 提高交换器识别能力
- + V850:提高交换器识别能力
-
文件格式
- + CLI: 现在可以加载LUT表损坏的文件
- + DEX: 增加对VDEX文件格式的支持
- + ELF: 能够从同伴文件中加载外部符号(即使DWARF信息缺失)
- + ELF: 为核心文件增加了NT_PRSTATUS和NT_PRPSINFO注释
- + ELF: 增加了对打包的安卓重新定位的支持(APS2格式)
- + ELF: 允许在加载器选项中独立加载PHT和SHT
- + ELF: 检测从PHT加载不一致的重叠数据
- + MACHO: 允许用户从dyld_shared_cache中加载给定模块的on-command
- + MACHO: 始终使用段前缀来处理内核缓存文件,即使不通过KEXTs进行分割也是如此
- + MACHO: 改进内核缓存文件中__PRELINK_INFO的XML解析
- + MACHO: 支持ARM64_32.只在ida64中支持(目前)
- + MACHO: 支持加载 iOS 12 预链接的内核缓存
- + MACHO: 支持为arm64e架构加载新的dyld缓存格式(如iPhone XS)
- + MACHO: 当加载单个dyldcache模块时,应用缓存’的符号表中的相关符号
- + MACHO: 在数据库中存储段保护(以前是忽略的)
- + PE: 标签守卫调用检查功能,如果存在于加载配置目录中的话
- + PE: 为IMAGE_DEBUG_TYPE_REPRO添加了注释
-
调试器
- + 支持在带有ARMv8.3-A扩展的iOS设备上进行调试(iPhone XS、XS Max、XR)
- + 支持远程iOS调试器中的观察点
- + iOS: 提高与旧设备的兼容性 (我们已经彻底测试了最古老的是一个 armv7 iPhone 4 与 iOS 6.0.1)
- + dalvik: 使用“track-jdwp”服务代替“jdwp”,它使用更可靠的协议
- + ios_deploy: 增加了“afc”阶段
- + ios_deploy: 增加了“battr”阶段
- + ios_deploy: 增加了“dattr”阶段
- + ios_deploy: 增加了“debug”阶段,这使我们能够在启动/连接到一个进程时轻松地排除问题
-
内核/杂项
- + CFG: 删除了过时的配置参数CHECK_MANUAL_ARGS
- + FLIRT: ICL: 添加了icl177(Intel C++ 17.7)的签名
- + FLIRT: ICL: 添加了 icl178 (Intel C++ 17.8) 的签名
- + FLIRT: ICL: 添加了 icl182 (Intel C++ 18.2) 的签名
- + FLIRT: ICL: 添加了 icl183 (Intel C++ 18.3) 的签名
- + FLIRT: ICL: 添加了icl190(Intel C++ 19.0)的签名
- + FLIRT: VC: 添加了vc1413(Visual Studio 2017.6)的签名
- + FLIRT: VC: 添加了vc1414(Visual Studio 2017.7)的签名
- + FLIRT: VC: 已添加ucrt 17134的签名(Windows 10 2018年4月更新SDK)
- + FLIRT: VC: 添加了vc1415(Visual Studio 2017.8)的签名
- + 改进的代码检测启发式规则
- + 改进的SP分析
- + 为arm/pc引入-8align4 abi选项
- + 增加了对使用虚拟函数解析简单的c++类的支持
- + strlit注释:即使是对字符串指针的引用,也尽量打印出来
- + types: 改进的til <->美洲开发银行结构同步化
-
Objective-C
- + OBJC: 在objc.cfg中添加了OBJC_LAZY_MODE,防止IDA在加载时解析objc数据
- + OBJC: 允许用户通过-Oobjc传递选项给objc插件
- + OBJC: 通过检测堆栈上分配的Block_layout对象,改进对块函数的分析
- + OBJC: 改进伪代码中的类型传播;特别是在ARC相关函数(objc_retain, objc_retainAutoreleasedReturnValue等)中
- + OBJC: 介绍objc功能的子菜单。参见Edit>Other>Objective-C
- + OBJC: 当加载mach-o文件时,解析__block_literal_global结构
- + OBJC: 在__objc_opt_ro中解析预先优化的数据结构
- + OBJC: 在JumpSelector动作的选择器字符串中支持正则表达式
-
用户界面
- + ui/qt: 增加了在加载桌面布局时恢复自定义小部件的功能(通过‘ui_create_desktop_widget’ 通知)
- + ui/qt: 增加了借用和归还浮动许可证的用户界面(在浮动许可证IDA版本的菜单选项-浮动许可证下可用)
- + ui/qt: 任何最后在浮动状态下关闭的widget(单独),用WOPN_RESTORE重新打开后,现在将以浮动状态恢复到之前的位置
- + ui/qt: 用户注册的自定义数据类型& 格式现在出现在内容菜单中
- + ui/qt: 在“Exports”窗口中的条目现在将根据其类型(函数、数据、未定义、…)有不同的图标
- + ui/qt: 在接近视图中,现在可以通过from地址来添加节点,而不是只访问(非虚构的)命名的项目
- + ui/qt: 引入了‘get_window_id(const char *name=NULL)’来检索底层操作系统特定的窗口ID
- + ui/qt: 当重新打开时,一些特定的浮动部件的几何形状/位置现在将被恢复(例如,“脚本片段”)
- + ui/qt: 观察观点:无法像带浇铸的表达式那样指定一个idc表达式:(type)expr
- + ui/qt: 当在插件中实现‘ui_get_custom_viewer_hint’时,现在可以要求IDA在返回的文本中的任何地方注入其“regular”提示
- + ui: “二进制搜索”现在允许在不同的项目之间用制表符代替空格(例如,0x89\t0xE5),允许更容易地从GDB等工具中复制粘贴
- + ui: API: 增加导航带 ea_t <-> 像素转换
- + ui: 增加了快捷键Ctrl+Shift+Up/Ctrl+Shift+Down,可以跳到上一个/下一个函数的开始
- + ui: 创建段:如果没有指定段的结束地址,则将位于指定起始地址的段拆分
- + ui: 按<Shift+Enter>在“跳转”选择器(即Ctrl+P、Ctrl+X、Ctrl+L、Ctrl+E、…)将在不关闭选择器的情况下进行跳转,从而起到预览/快速导航的作用
- + ui: 在模块调试名称列表中默认显示已解密的名称
- + ui: 当由于权限问题无法创建新的idb时,建议在主目录下创建
- + ui: 当从数据中创建结构时,结构将被命名为“struc_<addr>”(其中‘addr’对应于选择开始的地址),而不是有一个无关的数字后缀
- + ui: 改进了操作数的位域枚举应用
-
脚本和SDK
- + IDAPython: 增加了Hexrays_Hooks,在hexrays_event_t的基础上提供了更好的抽象(方法是类型化的,并且会自动生成绑定,这意味着它’会跟随C++ SDK的增加而增加)
- + IDAPython: 所有在C++ SDK中没有标记为THREAD_SAFE的函数,现在将检查它们是否被主线程调用,以避免可能的损坏或崩溃
- + IDAPython: ida_dbg: 暴露memory_info_t(), meminfo_vec_t(), set_manual_regions()
- + IDAPython: 能够为用户图的边缘提供用户提示
- + IDC: 增加了__IDAVER__作为一个数字版本号
- + IDC: 增加调试器寄存器作为变量名
- + SDK: 为get_name()添加了GN_NOT_DUMMY位
- + SDK: 增加了UTF-8编码的qrmdir()
- + SDK: 增加了calc_func_size()
- + SDK: 增加了idb_event::bookmark_changed
- + SDK: 增加了对移位指针的支持
- + SDK: 增加了 item_color_changed 和 colee_addr_changed 事件
- + SDK: append_cmt()不会在现有注释的末尾添加注释
- + SDK: 删除段寄存器现在会发送一个‘sgr_deleted’事件
- + SDK: 导出copy_named_type()
- + SDK: 重命名了regex函数,以避免与POSIX符号冲突(qregcomp/qregerror/qregexec/qregfree)
- + SDK: 引入INSN_64BIT位
- + SDK: 增加了颜色位值()
- + SDK: 使request_refresh(),clear_request_refresh()和is_refresh_requested()接受64位掩码
-
反编译器
- + hexrays: ARM: 支持RRX寻址模式
- + hexrays: 在64位代码中增加了对魔力除法的支持
- + hexrays: 增加了“强制新变量”命令,它可以用来强制反编译器在指定位置创建一个新的可别名的栈变量
- + hexrays: 添加了“变量可能未定义”警告
- + hexrays: 增加了MAX_STRLIT_LEN配置参数
- + hexrays: 增加了一个新的规则来简化一些三元运算符
- + hexrays: 增加了一个新的规则:(x ^ y) & 1 => x !=y 如果x,y是布尔运算,则x =y
- + hexrays: 增加了 hxe_cmt_changed 通知
- + hexrays: 增加了删除异常处理代码的逻辑(SjLj)
- + hexrays: 输出idaloc2vd和vd2idaloc
- + hexrays: 摆脱内部微调器数量的限制
- + hexrays: 去掉微操作中的虚拟寄存器
- + hexrays: 处理 ARMv8.3 指针认证指令
- + hexrays: 改进了对一些开关类成语的处理
- + hexrays: 改进对联合表达式的处理
- + hexrays: 改进了常数值奇数部分的传播
- + hexrays: 改进了对被调用函数中寄存器参数的识别
- + hexrays: 改进了函数原型解析器:考虑到返回类型可以包含括号
- + hexrays: 改进了对 dyldcaches 中只读数据的检测
- + hexrays: 魔法除法的识别度略有提高
- + hexrays: x86: 增加了对gnu mcount()的识别
- + hexrays: 对虚拟函数的调用进行了很好的反编译
- + hexrays: 增加了对64位字符常量的支持
- + hexrays: 无法反编译一个返回奇数大小的udt的调用(!is_valid_size)
- + hexrays: sdk: 增加了宏HEXRAYS_MEMORY_ALLOCATION_FUNCS()和函数hexrays_alloc/hexrays_free
- + hexrays: sdk: 增加了新的标志CVAR_NOPTR,LVINF_NOPTR,用它们来表示一个变量的类型应该是非指针型的
- + hexrays: sdk: 增加了外部块(BLT_XTRN),它们极大地改善了代码段的反编译
- + hexrays: sdk: 在计算使用/定义列表时考虑到lvars;又导出了2个与mlist相关的函数
- + hexrays: sdk: 清理了API;从现在开始,我们将努力保持兼容性
-
漏洞修复
- 漏洞修复:“生成文件>将数据库转储到IDC文件…”会生成IDC脚本,其‘create_strlit’指令有错误的‘长度’参数
- 漏洞修复: “调试启动时暂停”选项对于基于GDB的调试器被破坏了
- 漏洞修复: “ida -B”没有对输入文件进行最后的传递,这可能会导致输出列表中出现巨大范围的未探索字节
- 漏洞修复: 68K:注意:在“MC68xxx通用仿真器”模式下,一些Coldfire专用指令未被解码
- 漏洞修复: COFF: 一些XCOFF64文件可能被错误加载
- 漏洞修复: 从图形视图复制到剪贴板,可能会导致文本被移动
- 漏洞修复: DWARF:在源码级调试过程中,插件可能会发出C++异常,而没有被捕获,导致IDA退出
- 漏洞修复: DWARF: 包含只读或只写通道的Golang类型,将变成匿名类型
- 漏洞修复: DWARF: 具有可变大小的最后一个成员(由数组组成)的结构将无法正确处理
- 漏洞修复: EH: 在arm32 Mach-O二进制文件中解析异常数据可能会产生虚假的”;坏的尝试块信息”;警告
- 漏洞修复: ELF: ARM: 在Thumb模式下,一些带有ARM模式入口点的文件可能会被错误地反汇编
- 漏洞修复: ELF: 加载大endian ARM文件将在“加载文件对话框中显示“ARM小endian”。同样,加载小endian PPC文件将显示“Power-PC大endian”而不是“Power-PC小endian"
- 漏洞修复: ELF: 解析SHT_NOTE可能产生无效内容
- 漏洞修复: GDB: 序列化的对话(为了排除故障)可能包含未封装的‘\’字符
- 漏洞修复: GDB: 当连接到gdbserver时,如果比特度被错误检测到,IDA可能会崩溃
- 漏洞修复: GDB: 一些android aarch64存根可能会被误检测为32位arm
- 漏洞修复: GDB: 在QEMU中使用代码段模式调试时,以未定义字节开头的段可能会在运行时将数据清零
- 漏洞修复: GDB: 附加到QEMU i386或x86_64(从2.10版开始)时,IDA可能会崩溃
- 漏洞修复: 使用gdb调试器时,IDA可以INTERR 40029
- 漏洞修复: IDA可能会挂起,试图加载一些psx图像
- 漏洞修复: IDA可能会在尝试解析错误的objc元数据时崩溃
- 漏洞修复: 删除本地类型时IDA可能会崩溃
- 漏洞修复: 在远程调试期间尝试从致命的网络错误中恢复时,IDA可能卡死于Interr 40193
- 漏洞修复: IDA可能会将编译器误检测为gcc
- 漏洞修复: 当调试器处于活动状态并且调试的应用程序自由运行时,IDA会变得非常慢
- 漏洞修复: 解析tryblk信息时IDA会崩溃
- 漏洞修复: 在调试过程中,IDA不会从dll中导出的名称中拆分
- 漏洞修复: 如果字符不能从源编码转换,IDA将打印空字符常量
- 漏洞修复: 如果指定了一个带有堆栈组件的分散位置,IDA会以代码1004崩溃
- 漏洞修复: IDAPython: ‘reg’action_update_ctx_t &action_activation_ctx_t的成员,实际上是无法使用的,因为它对应的是调试器寄存器,而调试器寄存器的编号与处理器模块提供的不同。它已被替换为‘regname’
- 漏洞修复: IDAPython: (低级函数) ‘set_numbered_type()’不会和‘get_numbered_type()’返回的‘sclass_t’参数一起工作
- 漏洞修复: IDAPython: 695 compat’的‘ida_kernwin.get_highlighted_identifier()’可能导致IDA崩溃
- 漏洞修复: IDAPython: IDP_Hooks::ev_get_bg_color() 无法使用ctypes
- 漏洞修复: IDAPython: 如果将‘None’作为第一个参数传递给它,calc_thunk_func_target()会使IDA崩溃
- 漏洞修复: IDAPython: 在定时器回调中发生的异常不会被立即报告(可能会被完全报告失败)
- 漏洞修复: IDAPython: get_member_by_id() & get_member_by_fullname()返回的是垃圾,而不是一个正确的‘struc_t *’实例
- 漏洞修复: IDAPython: ida_hexrays.ccase_t.values无法使用
- 漏洞修复: IDAPython: ida_lines.get_extra_cmt()对于空字符串将返回None,即使它后面存在更多注释行
- 漏洞修复: IDAPython: idaapi.py’的‘set_func_start’和‘set_func_end’来自‘ida_funcs’的常量覆盖了来自‘ida_idp’
- 漏洞修复: IDAPython: 当一个嵌入式选择器的父表单被接受后,无法从该选择器中检索选择
- 漏洞修复: IDAPython: load_plugin()可能会因为违反分段规则而导致IDA崩溃
- 漏洞修复: IDAPython: 尽管文档中提到了它,op_t.addr不能用作‘get_stkvar’的值
- 漏洞修复: IDAPython: 在没有设置‘op’类型的情况下,设置cinsn_t’联合体的成员,将无声地失败
- 漏洞修复: IDAPython: 一些PLFM_*常量没有导出
- 漏洞修复: IDAPython: 出乎意料(处理不当)的“等待对话框”可以在其他模态对话框被激活时显示,以防在后台启动定时器
- 漏洞修复: 出乎意料(且处理不当)的“等待对话框”可以在其他模态对话框被激活时显示,以防在后台启动计时器在“结构”视图中,IDA可以在结构被损坏/删除的情况下多次显示标题文本
- 漏洞修复: KERNEL: qfindfirst/qfindnext不能用于Windows上的非ASCII路径
- 漏洞修复: MC68K: 在IDA64中,引用高位设置的地址的程序可能会被错误地打印出来
- 漏洞修复: MC68K: 在“MC68xxx通用仿真器”模式下,一些有效的指令不会被解码
- 漏洞修复: MIPS: 在mips16模式下,位于延迟槽中的指令ADDIUPC和LWPC可以使用错误的PC值进行反汇编
- 漏洞修复: MinGW/Cygwin制作的PE x64文件可以将__fastcall’s显示为__usercall,即使代码尊重微软’的x64 ABI惯例
- 漏洞修复: NEC850: 漏洞修复: 在Windows上,用“windows”样式和Hi-DPI显示器上,复选框中的复选标记会显得很小
- 漏洞修复: PC: IDA有时在创建多个nop指令后的函数时过于激进
- 漏洞修复: PPC: 如果使用奇数位移值,一些配对的单条加载/存储指令无法解码
- 漏洞修复: 显示否定值的枚举值,将显示原始值的匹配枚举列表
- 漏洞修复: DWARF插件可以在一些Rust类型上进行投诉(例如,‘()’)
- 漏洞修复: DWARF在解析函数数据时,如果加载一些调试信息失败,就会提前停止,而它可以继续前进,并尝试解析以下函数
- 漏洞修复: UI: IDA在Windows上无法打开当前ANSI字符集无法表示的文件名
- 漏洞修复: UI: 在Windows上,IDA可能会以错误的编码打印与网络相关的错误信息,导致无法读取文本
- 漏洞修复: 当调试Linux/ELF应用程序时,来自“debuglink”-提供的配套文件的符号将无法在IDA中使用
- 漏洞修复: 当要求时,段名不会出现在图形模式下的行前缀中
- 漏洞修复: Win32: 在调试过程中,无法打开一个.exe的导出列表
- 漏洞修复: Win32: 当连接到进程进行调试时,IDA可能无法加载与可执行文件相关的PDB信息
- 漏洞修复: arm: ida64在解码32位代码时不会将地址截断为32位
- 漏洞修复: 多线程Objective-C应用程序的调试动作objc:RunUntilMessageReceived可能失败
- 漏洞修复: 调试器:在IDC条件下调用get_event_module_name(),如果调试事件不是正确的类型(PROCESS_STARTED, PROCESS_ATTACHED或LIB_LOADED)就会崩溃
- 漏洞修复: 调试器: win32: “SEH list”功能在使用本地调试时对wow64进程不起作用
- 漏洞修复: 调试器: win32: 在Win10上调试32位(WOW64)进程时,IDA可能会挂起
- 漏洞修复: 过大的移位数处理不正确(例如:“shl eax, 33” 不应产生0)
- 漏洞修复: 来自AR档案的文件名可能会因为对其编码的错误假设而出现乱码
- 漏洞修复: 修复了加载损坏的LE文件时的崩溃问题
- 漏洞修复: 修复了可能在损坏的IDB中发生的内部50983
- 漏洞修复: gas for arm需要使用小写字母的指令条件,但ida并不总是为其使用小写字母
- 漏洞修复: get_strlit_contents()可能会超出要求检索的字节范围
- 漏洞修复: get_strlit_contents()不应该停在代码点零点,而是继续前进,直到到达‘len’gth
- 漏洞修复: 在某些情况下,无法设置“基于bp的框架”函数属性,ida会立即将其重置
- 漏洞修复: 无法正确指定返回一个大结构的thiscall函数的原型
- 漏洞修复: 它可以让mac调试器从文件中加载调试名称,而该文件与内存中的图像不匹配
- 漏洞修复: 内核:当使用借来的许可证和许可证服务器无法访问时,IDA可能会在退出时挂起
- 漏洞修复: ldr/coff: 不要使用DT_NON符号来描述一个部分,如果一个过程计划在那里进行,并且已经设置了一个非虚拟的名称
- 漏洞修复: m65816: abs,x / abs,y寻址可能无法创建外部参照
- 漏洞修复: mac调试器可能无法加载从头创建的数据库
- 漏洞修复: 在多线程环境中进行源代码级调试时,mac调试器可能无法单步执行
- 漏洞修复: mac调试器可能无法正确更新线程列表,这可能导致IDA无法添加/删除硬件断点
- 漏洞修复: mac调试器可以在模块的名称列表中产生重复的调试名称’
- 漏洞修复: 在OSX 10.14上设置软件断点后,mac调试器可能会触发错误的SIGBUS信号
- 漏洞修复: mac调试器将无法在新创建的线程中设置用户定义的硬件断点
- 漏洞修复: mach-o加载程序可能会错误地截断iOS 11内核缓存中的段
- 漏洞修复: mach-o加载程序无法正确加载带有非零文件偏移量的__TEXT段的文件
- 漏洞修复: mips: 修正了mips16e ‘addiu’ insn的分析
- 漏洞修复: 当用户切换操作数符号或位否定操作数时,不会产生任何事件
- 漏洞修复: objc插件可以要求解析Objective-C信息,而实际上数据库中并没有这些信息
- 漏洞修复: pc: 如果最终处理程序属于2个不同的函数,则ida可能会无限循环
- 漏洞修复: pdp-11: 偏移量表达式未创建外部参照
- 漏洞修复: pdp-11: 从ida.cfg中删除了过时的PDP_XLAT_ASCII参数
- 漏洞修复: Analysis,ANALYSIS2和其他一些位掩码配置参数的范围更改错误
- 漏洞修复: rtti评论将在重新分析后重复
- 漏洞修复: 以‘*’开头的rtti类型描述符名称未被识别
- 漏洞修复: rtti以*Z开头的类型描述符名称未被识别
- 漏洞修复: 脚本加载器必须在load_file()函数的开头寻找到文件的开头
- 漏洞修复: sdk: tinfo_visitor_t::apply_to()在编辑类型时可能会破坏类型修饰符(const/volatile)和属性
- 漏洞修复: 打开非常旧的数据库(在2001年之前创建)时,细分信息可能会丢失
- 漏洞修复: set_fixup()有6个参数,但是文档声称有5个参数
- 漏洞修复: 将结构成员类型设置为“int[]”(不指定数组大小)可能会导致数组(int[][])
- 漏洞修复: simplecustviewer_t::OnPopup不会’允许接收‘widget’和‘popup_handle’,因为其他widget会
- 漏洞修复: 一些损坏的mach-o文件可能会导致ida崩溃
- 漏洞修复: 可能缺少一些流程图边缘(可能在指令中间存在外部参照时发生)
- 漏洞修复: 有时‘溢出’位会在cmp或子指令后被错误计算
- 漏洞修复: 堆栈展开可能会中断对前缀调用指令的分析
- 漏洞修复: 停止修改‘ev_is_jump_func’事件中的函数
- 漏洞修复: linux调试器可能会导致ELR文件损坏而导致INTERR 20099
- 漏洞修复: 连接到启用了ASLR的进程后,mac调试器可能会创建错误的内存布局
- 漏洞修复: Win32调试器服务器将无法从符号服务器检索pdb文件
- 漏洞修复: ui/qt: 如果有多个线程正在使用logging.py,则IDA很容易死锁,或者只是试图在控制台中打印任何内容,同时保持两个线程可能都需要的其他锁
- 漏洞修复: ui/qt: IDA可以为“Jump > Clear mark…”动作显示错误的书签内容
- 漏洞修复: ui/qt: 增加了“添加手表”到(旧式)手表列表上下文菜单中
- 漏洞修复: ui/qt: 在某些情况下,线条的背景色可能无法应用
- 漏洞修复: ui/qt: 改变段寄存器值不会导致“段寄存器”选择器刷新
- 漏洞修复: ui/qt: 删除(或修改)段寄存器范围可能会使反汇编视图超时
- 漏洞修复: ui/qt: 如果缺少描述,不要在折叠区域页脚显示“(null)”
- 漏洞修复: ui/qt: 在调试过程中,“flags”寄存器列可以被部分隐形(取决于显示DPI)
- 漏洞修复: ui/qt: 如果在“Functions window”中给定一个足够长的函数列表,删除函数范围可能会导致IDA崩溃
- 漏洞修复: ui/qt: 当字节被解码为UTF-8时,十六进制视图将显示虚假字符,并产生代用代码点
- 漏洞修复: ui/qt: 在不同分辨率的显示器之间移动IDA,可能会导致图形视图显示垃圾
- 漏洞修复: ui/qt: 在HiDPI显示器上(如4k),提示可能最终被部分截断
- 漏洞修复: ui/qt: 对简单line_t的前缀使用‘COLOR_DEFAULT’将导致该行中标为COLOR_PREFIX的部分看不见
- 漏洞修复: ui/qt: 当2个小部件在同一个标签页中相邻放置时,关闭最左边的一个,可能会导致最右边的一个也消失(而不会被破坏)
- 漏洞修复: ui/qt: 当在图形视图中的节点之间跳转时,动画可能会在错误的地方结束
- 漏洞修复: ui/qt: 当停止调试会话时,可能会发生一些行渲染选项(操作码字节数,缩进,…)不能正确地恢复到应有的状态
- 漏洞修复: ui/qt: 当使用线的顶部/底部填充时,图形视图可能会显示出伪影,例如,高亮显示
- 漏洞修复: ui: “Strict ASCII”选项在“字符串窗口”不起作用“Strict ASCII”选项在“字符串窗口”不起作用
- 漏洞修复: ui: 在open_disasm_window()返回的TWidget上调用set_view_renderer_type(),会使IDA崩溃
- 漏洞修复: ui: 在“Structures”视图中,“Shrink structure”操作将在对齐字节上可用,但无法实际删除这些
- 漏洞修复: ui: 地址空间中结构实例的部分字符串字元,可能无法在“字符串窗口”中显示
- 漏洞修复: ui: 当连接到一个进程时,可能无法立即加载PDB或DWARF调试信息(但在分离& 重新连接后就可以工作了)
- 漏洞修复: 即使STORE_USER_INFO被关闭,用户信息也会被存储在idb中
- 漏洞修复: 忽略了用户指定的‘数据项的手动指令’
- 漏洞修复: 在命令行中使用-DTRICORE_DEVICE会导致警告
- 漏洞修复: hexrays: “(x>>8)&1”在某些情况下将表示为“x>>8”
- 漏洞修复: hexrays: ‘jl(N-x),x’会被反编译错误
- 漏洞修复: hexrays: 1字节函数无法反编译
- 漏洞修复: hexrays: 64位乘法在某些情况下不能正确识别
- 漏洞修复: hexrays: 在某些情况下,反编译器不能将零常数表示为一个枚举成员
- 漏洞修复: hexrays: 在某些情况下,对全局变量的赋值可能会被错误地优化掉
- 漏洞修复: hexrays: append_use_list()在大恩人平台上可能会给出错误的结果
- 漏洞修复: hexrays: arm: 一些多寄存器/内存传输指令在微代码中没有被标记为多移动序列
- 漏洞修复: hexrays: 反编译器在访问用户定义类型的变量时可能会产生错误的偏移
- 漏洞修复: hexrays: 反编译器可能会产生错误的偏移量,用于访问具有用户定义的变量的一部分 反编译器会将.text段视为readonly,即使它们的权限是otherwisetype
- 漏洞修复: hexrays: find_def/find_use只对寄存器操作数工作正确,其他操作数类型的处理很差
- 漏洞修复: hexrays: 修正了set_to_le_ge()中的一个错误
- 漏洞修复: hexrays: 修复了一个无尽的循环(幸运的是,这很罕见)
- 漏洞修复: hexrays: 修复Combine_hinsn_mov()中的错误
- 漏洞修复: hexrays: 修正了许多中间环节
- 漏洞修复: hexrays: 在某些情况下,“smod power2”规则可能会在生成的微指令中产生错误的操作数
- 漏洞修复: hexrays: 在某些情况下,反编译器可能会丢失‘default:’开关语句的分支
- 漏洞修复: hexrays: 在一些罕见的情况下,一些比较会被反编译错误
- 漏洞修复: hexrays: 在一些罕见的情况下,大恩田平台上的部分操作数传播不正确
- 漏洞修复: hexrays: offsetof(type,field)在一些罕见的情况下可能会有空的字段名
- 漏洞修复: hexrays: pc: 循环/循环指令的处理不正确
- 漏洞修复: hexrays: signed modulo 2 was sometimes recognized with wrong size
- 漏洞修复: hexrays: 一些64位比较会被反编译错误
- 漏洞修复: hexrays: 当反编译一个包含函数内部和外部代码的混合范围时,堆栈指针可能被计算错误
- 漏洞修复: hexrays: “lxe_lvar_type_changed”可以提供过时的lvar_t信息
- 漏洞修复: hexrays: BACKPROP_CC规则可以反转一个‘if’条件
- 漏洞修复: hexrays: 规则“~x >0”=>“x <=0”太激进了
- 漏洞修复: hexrays: guard_dispatch_icall()的类型会在猜测被调用函数的protype时产生干扰
- 漏洞修复: 当调用‘set_member_tinfo()’时,struc_member_changed事件将在tinfo_t对象被实际应用之前被发送
- 漏洞修复: 当解析omf文件时,ida在idb中存储了错误的extdef名称长度
- 漏洞修复: 当使用mac调试器的“Suspend on debugging start”选项时,模块列表中会缺少/usr/lib/dyld
- 漏洞修复: win32: ida在某些情况下错误地设置了一个borland调试钩子;这将改变程序的执行方式
- 漏洞修复: win32: 如果被调试的应用程序擦除了软件断点,appcall将停止工作
- 漏洞修复: windbg: 当加载DLL加载超过2GB的进程的32位minidump时,IDA可能会用interr 1491崩溃(0x80000000)
- 漏洞修复: 错误的函数原型可能会引起互斥
- 漏洞修复: 68000: ida不会将函数和指令地址截断为24位
- 漏洞修复: IDA可能会因为选择者使用空标题而崩溃
- 漏洞修复: IDAPython: 如果源节点或目标节点越界,GraphViewer.AddEdge()可能会使IDA崩溃
- 漏洞修复: 提示不能显示在用户图上
- 漏洞修复: 调试器: win32: 当调试一个32位进程时,IDA可能会在win10预览版上用interr 1419崩溃
- 漏洞修复: 修正了第40372条(如果idb中存在条件性bpt,而idapython被禁用或不存在,ida会卡死)
- 漏洞修复: hexrays: 如果存在多个功能相同的窗口,则可以用一个不活动的窗口作为跳转目标
- 漏洞修复: mips: 固定延时槽处理
- 漏洞修复: print_operand()对于大恩迪安处理器来说,会错误地打印数据操作数(这个函数不是用来生成反汇编列表的)
- 漏洞修复: 当试图在GDB调试器中打开寄存器视图时,IDA可能会崩溃
- 漏洞修复: enumplace_t::adjust()在使用bitfields+serials时不能正常工作
- 漏洞修复: 旧版iOS调试器坏了 (< 9.0)
- 漏洞修复: 字符串读写器对话框中的“当前:”按钮文本在OSX上很难阅读