上文提及到,我们把一个so文件和classes.dex文件中的时候,两者在IDA Pro中的呈现完全不同。
首先我们先来看简单的dex文件,所谓简单是因为我觉得它在IDA中的代码类似于smali代码,smali是一种android虚拟机编译代码,是一种指令集,
如下图: (红框的就为Davlid虚拟机的指令集)
相关这些指令集的说明,可以去百度一下Android Smali语法分析,读懂了Smali语法再回头看IDA Pro中这些指令集就会完全明白了。
例如其中的一段:
invoke-static: 调用一个getNmuber的静态方法,传入参数V3寄存器的值
move-result: 返回值结果保存到V1寄存器中
const/16: 初始化一个16进制的常量,0x64 = 100
if-ne: 如果V1寄存器的值 不等于 V2寄存器的值 那么就跳到locret:方法段去
首先我们再看看classes.dex拖进IDA Pro后的界面。
以下的界面,可以作为IDA Pro静态分析的主界面,主要呈现了代码集。
我们先从左到右来看,主要关注于窗口栏。
1.首先是Functions window
顾名思义,这是就是一个展示方法名的窗口。这个窗口展示一个dex中或者一个so文件中所包含的所有的方法名称,利用这个窗口来找快速地知道你想要的方法。
当然,这种快速是需要经过过滤的。不然你看看,上图左边的滚动条,那么长,一看就是包含了极多的方法的。依靠滚动条去找到自己想要的方法也未免太SB了。
所以这个窗口中加入了过滤,类似于我们日记输出中的过滤,符合你所找的方法的方法就会保留,其他方法会被清空掉。
在Function name的窗口,点击鼠标右键:
红框中显示了这个Function View中几个重要的方法。删除/编辑 ---快速过滤/修改过滤
我们使用一下其过滤方法,过滤一个方法名中含有“OnCreate”的方法,并且用紫色来标注出来。
结果就是:
2.ManiView中的标签:
主视图:IDA View-A 反汇编窗口 他是操作和分析二进制文件的主要工具。
数据显示: 依然使用我们上图的方法块
红框:虚拟地址
黑框:指令集
黄框:数据存储与方法调用
点击方法名,然后右键,可以看到这个方法的调用视图。
次视图:Hex View-A 十六进制的反汇编窗口
数据显示:默认情况下,第一个十六进制窗口会与第一个反汇编窗口(IDA View-A)同步。
当反汇编窗口与十六进制窗口同步,在一个窗口中滚动鼠标,另一个窗口也会滚动到相同的位置(同一个虚拟地址)。
次视图:结构窗口 结构体窗口用于显示IDA确定的二进制文件中使用的任何复杂的数据结构的布局
数据显示:
次视图:枚举窗口 结构体窗口用于显示IDA确定的二进制文件中使用的任何复杂的数据结构的布局
数据显示:当IDA检测到标准枚举数据类型(C的枚举型),它将在枚举窗口中列出该数据类型。你可以使用枚举来代替整数常量,提高反汇编代码的可读性。