行业解决方案
查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
IDA Pro的反汇编窗口忽然找不见了,该怎么处理,还有反汇编窗口的布局如果乱掉了,又能怎么把它给恢复过来,遇到这种事,先不用急着去怀疑是不是IDB文件已经坏掉了。很多情况下,其实就是那个窗口被关掉了、被拖到了别的位置、切到了其他的视图里面,再或者,就是桌面布局把某一次不正常的状态给保存下来了。IDA的桌面,是会记住主窗口、工具栏,还有数据库窗口的这些配置的,所以窗口本身是个什么状态,也会影响到下一次打开的时候,它到底会怎么显示。
IDA Pro的F5伪代码里,变量名之所以非常混乱,以及在这伪代码当中,类型的信息又该用什么方法去补充,这当中的主要原因,在于反编译器所面对的,是编译之后的二进制结果,而并不是最初的源代码。程序在编译之后,很多变量名、结构体的名称、注释,还有局部的语义信息,都已经丢失了,再加上优化编译还会把寄存器反复使用、把多个变量合并到一处、把表达式拆开,所以F5生成的伪代码里面,就经常会见到v1、v2、a1、result这一类的临时命名。Hex-Rays的资料里也提到过,反编译视图当中的变量名和类型,是可以进行交互式修改的,IDA基础使用文档里也说明了,变量可以通过Rename操作去重新命名。
IDA Pro的F5插件在安装完成以后为什么仍然没有效果,以及F5插件加载失败通常卡在哪一个步骤,是很多人在进行反汇编分析时会碰到的问题。这里需要先明确一个概念,许多人所说的“F5插件”,一般指的是Hex-Rays Decompiler反编译功能,也就是在函数界面中按下F5后,将汇编代码转换为伪代码的那套工具。如果在安装以后按F5没有任何反应,菜单里也找不到反编译入口,或者系统直接提示无法反编译,那么问题的根源未必出在快捷键本身,更常见的情形是版本、架构、许可证、插件目录或者目标文件的类型这几项没有对应上。
IDA Pro调试Android时总连不上设备,以及调试Android时环境配置到底该核对哪些项目,这在很多情况下并不是IDA单独的问题。Android调试牵扯到电脑端、ADB、设备权限、调试服务、端口转发、目标进程和架构匹配,当中任何一个环节没有对上,IDA里面都有可能出现连接失败、进程列表一片空白,或者刚一attach就断开的现象。IDA的Android原生调试支持ARM32、AArch64、x86、x64这些架构,远程调试一般也需要先在目标端把调试服务运行起来,再由IDA去连接对应的主机和端口。
只有安装包、固件或者可执行文件,手里却没有任何源代码的时候,想要把程序内部的逻辑排查清楚,往往会变得特别费劲;而很多人会问IDA软件到底是做什么用的,以及IDA更适合去处理哪一类二进制文件,通常都得从二进制分析的场景里慢慢理解。简单来说,IDA能够把机器指令翻译成汇编代码,再配合函数识别、交叉引用、字符串、导入函数和控制流图这些信息,帮使用者把原本很难读的程序一点点拆开来看;其中IDA Pro这一款还提供了反编译和动态调试的本事,比较适合用来做软件分析、兼容性问题排查、固件研究还有程序故障的定位。
在分析那些带有中文资源、日志文本或者配置内容的程序时,字符串窗口里时不时就会跳出问号、方框,或者干脆是一些没法阅读的字符。要弄清楚IDA里头的中文乱码通常跟哪些设置有关,还有乱码出现后编码方式该怎么去调整,先得分辨清楚这些乱码到底是出现在反汇编里的字符串、是Hex View右侧显示的那部分文本,还是旧数据库里留下来的注释。从7.0版本开始,IDA内部已经统一换成了UTF-8,但被分析的那个程序本身的原始字节,它照样可能用的是GBK、UTF-8、UTF-16LE这些不一样的编码,一旦判断错了,显示出来的东西就会不正常。
很多人拿到bin文件以后,第一反应就是直接想看伪代码,但raw binary和PE、ELF这类带文件头的格式不一样,IDA读不出处理器类型、装载地址和段布局,所以如果前面的加载动作没做对,后面反汇编和反编译通常都会跟着偏。Hex-Rays官方资料也明确说明,bin文件更适合通过binary loader手动装入,处理器和装载位置需要用户自己确认,载入后还要把真正的代码区域手动转成代码。
很多人把APK丢进IDA Pro以后,第一反应就是直接找核心函数或敏感字符串,结果越看越乱。真正更稳的顺序,通常不是先扎进某个类里,而是先把APK的入口、代码承载方式和资源结构摸清。Hex-Rays官方文档已经说明,IDA既可以直接处理`.apk`,也可以处理其中的`.dex`;如果用`APK`loader,IDA会加载所有`classes*.dex`,而如果用`ZIP`方式,则只是从APK里提取某一个dex来看。Android官方资料则明确了APK里常见关键文件的位置,比如根目录下的`AndroidManifest.xml`、`classes.dex`和`resources.arsc`。这也意味着,先看什么、资源去哪里找,本来就是两条线。
拿到ELF文件后,先别急着盯伪代码。更稳的顺序,是先把现成信息吃干净,再补缺的名字和类型。IDA自带的Names、Strings、Signatures、Type Libraries这些窗口,本来就是给这一步准备的;如果文件里还有DWARF,甚至还能直接补回函数名、原型、局部变量和全局变量类型。
在IDA里看C++程序,vtable这件事最怕的不是找不到,而是看到了却没真正认出来。很多人一开始只是顺着函数跳,看见一串函数指针就觉得像虚表,可继续往下追时,this指针不稳、虚调用显示不完整、继承关系也对不上,最后越看越乱。Hex-Rays官方文档其实把关键前提说得很明确,IDA和反编译器能利用VFT也就是虚函数表生成更清楚的虚调用表达,但前提是类类型、虚表指针名字和目标编译器设置要尽量对上。