行业解决方案
查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
IDA Pro在反汇编ARM代码时,应当怎样去分辨它的模式,还有在分析ARM的跳转表时,又该采用怎样的方法,这是处理固件、so库和嵌入式程序时经常遇见的问题。ARM代码里常常会同时存在ARM和Thumb两种模式,较新的程序则可能是AArch64架构。如果模式判断出现错误,IDA所显示的指令就会变得异常,函数的边界、交叉引用以及F5生成的伪代码,也都会跟着出现问题。跳转表的情况与此类似,一旦IDA没有正确识别,switch语句的分支就会断开,分析人员就很容易遗漏关键逻辑。
IDA Pro的反汇编窗口忽然找不见了,该怎么处理,还有反汇编窗口的布局如果乱掉了,又能怎么把它给恢复过来,遇到这种事,先不用急着去怀疑是不是IDB文件已经坏掉了。很多情况下,其实就是那个窗口被关掉了、被拖到了别的位置、切到了其他的视图里面,再或者,就是桌面布局把某一次不正常的状态给保存下来了。IDA的桌面,是会记住主窗口、工具栏,还有数据库窗口的这些配置的,所以窗口本身是个什么状态,也会影响到下一次打开的时候,它到底会怎么显示。
IDA Pro反编译hex文件前需要准备什么,以及反编译hex文件时内存布局又该怎样核对,重点之处并不在于直接把hex文件拖进IDA然后按下F5,而在于先要判断清楚它到底是一份什么类型的镜像。hex文件常见于MCU固件、Bootloader、片上Flash数据或者烧录文件,它里面可能只包含代码段,也可能混杂着中断向量、校验区、配置字,还有多个不同的地址段。IDA本身能够处理原始二进制文件,也可以手动去布置段信息,Hex-Rays也专门说明过,在分析固件这一类原始文件的时候,正确的内存布局是极其重要的。
IDA Pro的F5伪代码里,变量名之所以非常混乱,以及在这伪代码当中,类型的信息又该用什么方法去补充,这当中的主要原因,在于反编译器所面对的,是编译之后的二进制结果,而并不是最初的源代码。程序在编译之后,很多变量名、结构体的名称、注释,还有局部的语义信息,都已经丢失了,再加上优化编译还会把寄存器反复使用、把多个变量合并到一处、把表达式拆开,所以F5生成的伪代码里面,就经常会见到v1、v2、a1、result这一类的临时命名。Hex-Rays的资料里也提到过,反编译视图当中的变量名和类型,是可以进行交互式修改的,IDA基础使用文档里也说明了,变量可以通过Rename操作去重新命名。
IDA Pro的F5插件在安装完成以后为什么仍然没有效果,以及F5插件加载失败通常卡在哪一个步骤,是很多人在进行反汇编分析时会碰到的问题。这里需要先明确一个概念,许多人所说的“F5插件”,一般指的是Hex-Rays Decompiler反编译功能,也就是在函数界面中按下F5后,将汇编代码转换为伪代码的那套工具。如果在安装以后按F5没有任何反应,菜单里也找不到反编译入口,或者系统直接提示无法反编译,那么问题的根源未必出在快捷键本身,更常见的情形是版本、架构、许可证、插件目录或者目标文件的类型这几项没有对应上。
IDA Pro在按下F5以后如果报了错,伪代码的窗口就打不开了,这种情况在逆向分析的时候是经常能遇到的。F5这个快捷键,它实际上做的事情就是去调用Hex-Rays反编译器,把当前这个函数给反编译成一段看起来有点像C语言的伪代码,而IDA里面的那个伪代码窗口,也正好就是拿来显示这种类似C代码的结果用的。不过这个功能并不是随便停在哪个位置上、随便碰到什么指令、随便打开什么二进制文件,都能够顺顺利利地把伪代码生成出来。所以在遇到F5报错的时候,先不要着急去把整个IDA软件都重新装一遍,因为有很多时候,问题其实是出在函数的边界没有划分好、处理器的架构没有匹配上、插件之间有冲突、类型的信息没有补齐,或者是程序本身所依赖的那些库文件没有被处理好。
IDA Pro里F5没有反应,通常是什么原因,还有F5没有反应的时候,应该先检查哪些组件,先要弄清楚,F5对应的是Hex-Rays的反编译功能,并不是普通的反汇编跳转。在Hex-Rays的官方说明里面,生成伪代码可以通过View→Open subviews→Generate pseudocode,也可以直接按下F5;要是当前的环境没有办法进行反编译,F5就很有可能没有明显的反应,或者只是弹出一条很短的错误提示。
很多人刚接触二进制分析的时候,很容易被IDA Pro的界面弄得不知所措,它的窗口多、地址多,汇编语句也排得密密麻麻。IDA Pro的使用教程到底适不适合零基础呢,答案是可以用来入门,只是不要刚上来就指望能看明白太复杂的样本。官方的入门资料里,也把IDA View、Pseudocode、Hex Dump View、Local Types和Functions View这几个窗口列为了初学者平时用得比较多的。所以零基础阶段最好先学会怎样加载文件、定位函数、查看字符串和跟踪调用关系,然后再逐步去补汇编与数据结构的知识,这样进入状态会更顺畅一些。
很多人第一次写IDA脚本,最容易一上来就想做“大功能”,比如自动重命名、批量批注、函数识别增强,结果写两行就卡住。更稳的做法通常不是先追求复杂功能,而是先把脚本语言、运行入口、示例来源和输出观察这几件事搭起来。Hex-Rays官方当前文档已经把这条路讲得很清楚,IDA现在主推的是IDAPython,同时又提供了更易上手的Domain API作为高层Python接口;而IDC仍然可用,但更适合维护旧脚本或学习一些基础自动化思路。
很多人拿到dmp文件以后,第一反应是直接找崩溃函数,但dmp和普通可执行文件不一样,它记录的是某个时刻的进程或系统内存状态,不是完整的原始程序工程。Hex-Rays官方文档明确说明,IDA可以通过Windmp loader直接装入Windows Crash Dump,也可以在静态分析之外,把dump放到windbg debugger module环境里继续看模块、线程和栈信息,所以开局顺序走对比一上来乱点窗口更重要。