【Tech-so】So文件静态分析Step by Step(二) --------读懂IDA Pro

 上文提及到,我们把一个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的枚举型),它将在枚举窗口中列出该数据类型。你可以使用枚举来代替整数常量,提高反汇编代码的可读性。

           

                       

                     

     






猜你喜欢

转载自blog.csdn.net/A_AsinCEO/article/details/50034629