NDK开发-之4-ida工具ndk对so文件静态分析
来源:互联网 发布:连续统假设知乎 编辑:程序博客网 时间:2024/06/04 01:01
继续ndk开发系列。
动态调试参见
NDK开发-之3——ida调试自己的ndk生成的so文件
使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。这里使用的IDA Pro的版本为6.8版本。下面就介绍一下如何利用IDA Pro静态分析so文件的步骤:
由于需要查看比较复杂的逻辑,文本的例子就不再用自己的ndk工程作为历史,而是采用google提供的ndk开发hello-jniCallback作为例子。google的提供大量的ndk例子存放在官方的github地址:https://github.com/googlesamples/android-ndk
环境准备:
正常的android nkd开发环境
下班hello-jniCallback例子,并运行得到apk文件
ida 工具安装
提取so文件:
更改apk的扩展名为zip,用解压软件winRar直接打开文件
so文件用ida打开或拖入:
等待一段时间后,我们就能看到反汇编libhello-jnicallback.so文件所得到的汇编代码了
简单介绍一下ida
几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。
F5功能还能将汇编语言反编译成c/c++程序,程序会在Pseudocode窗口显示
如果想要查看某条指令的16进制代码,只需要单击该指令,再切换到Hex View-A窗口即可。
一般是在Text View模式中查看汇编代码,这样很难看出程序的设计流程。另外IDA Pro还提供了一个Graph View,能够帮助我们更好地查看代码的设计流程。只需要在对应的函数处右击再点击”Graph View”即可切换到Graph View模式
从图以看出,BNE loc_1410这条语句后面跟了两个箭头,其中绿色箭头表示当BNE loc_1410 条件成立后所跳转到的地方,红色箭头表示当条件不成立后所跳转到的地方。如果想要切换到Text View模式,则只需在对应函数处右击再点击“Text View”即可。
注意的是IDA Pro只能查看汇编代码,不能修改汇编指令对应的机器码。如果想要修改so文件,需要使用UltraEdit等二进制编辑软件。逆向分析so文件,需要熟练掌握ARM汇编语言。
注ida打开so文件时有个cpu处理的选择,通常情况下选择arm 或x86体系。
查看手机或模拟器的cup类型方法如下图所示:
动态调试办法参见:
NDK开发-之3——ida调试自己的ndk生成的so文件
- NDK开发-之4-ida工具ndk对so文件静态分析
- Android之使用IDA Pro静态分析so文件
- AndroidStudio NDK开发 之 jni生成so文件
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- android ndk开发编译生成so文件
- Android-NDK-之so文件签名校验
- NDK开发之so与JAVA
- NDK生成so文件
- NDK生成so文件
- so文件和ndk
- Android NDK开发(上)---jni的编译和调用so静态库文件
- ndk开发之利用android系统中.so库文件(例:libsqlite.so)
- ndk-build调试 .SO 文件
- 利用NDK生成.so文件
- 进程与线程的一个简单解释
- IOS-Archive快速打包
- mapreduce
- SVN版本控制
- Tcp 简单通信例子
- NDK开发-之4-ida工具ndk对so文件静态分析
- Android之性能优化【高级篇】
- webpack多页应用架构
- 程序员安装完Ubuntu后
- 算法提高 c++_ch02_01
- android使用timer和timertask实现计时器
- C++作业4
- Ubuntu16.04搭建redis集群
- js实现标题无缝向上滚动