Android之使用IDA Pro静态分析so文件
来源:互联网 发布:seo研究中心是什么 编辑:程序博客网 时间:2024/06/15 16:16
安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发。关于NDK的开发知识点,请看这篇博客:Android之NDK开发。
关于NDK环境搭建的知识点,请看这篇博客:Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。这里使用的IDA Pro的版本为6.5版本。下面就介绍一下如何利用IDA Pro静态分析so文件的步骤:
(0) 打开IDA Pro,将libTestJniSo.so直接拖入到IDA Pro中,在弹出的”load a new file”窗口中,
选择”ELF for ARM(Shared object)[elf.ldw]”选项,然后再点击ok按钮。如图1所示:
等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。
(1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。
例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,
只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:
(2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:
(3)我们一般是在Text View模式中查看汇编代码,这样很难看出程序的设计流程。另外IDA Pro还提供了一个Graph View,能够帮助我们更好地查看代码的设计流程。只需要在对应的函数处右击再点击”Graph View”即可切换到Graph View模式,forTest0函数的Graph View如图4所示:
等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。
(1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。
例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,
只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:
如果想要查看某条指令的16进制代码,只需要单击该指令,再切换到Hex View-A窗口即可。
(2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:
从图4可以看出,BLE loc_E42这条语句后面跟了两个箭头,其中绿色箭头表示当 BLE loc_E42 条件成立后所跳转到的地方,红色箭头表示当条件不成立后所跳转到的地方。如果想要切换到Text View模式,则只需在对应函数处右击再点击“Text View”即可。
本文简单介绍了如何通过IDA Pro静态分析so文件,从而查看对应的汇编代码。另外需要注意的是IDA Pro只能查看汇编代码,不能修改汇编指令对应的机器码。如果想要修改so文件,需要使用UltraEdit等二进制编辑软件。逆向分析so文件,需要熟练掌握ARM汇编语言。这里有一篇介绍ARM汇编语言的博客ARM汇编编程基础(一) -- ARM CPU寄存器,有兴趣的同学可以看看。
本文资源下载地址:安卓逆向学习笔记(3)
等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。
(1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。
例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,
只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:
(2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:
- Android之使用IDA Pro静态分析so文件
- 安卓逆向学习笔记 (3)- 使用IDA Pro静态分析so文件
- 【Tech-so】So文件静态分析Step by Step(一) --------入门,利用IDA pro查看代码
- 【Tech-so】So文件静态分析Step by Step(二) --------读懂IDA Pro
- IDA Pro动态调试Android so文件
- 使用IDA Pro调试so文件
- 使用IDA Pro动态调试SO文件
- android调试系列--使用ida pro调试so
- NDK开发-之4-ida工具ndk对so文件静态分析
- IDA Pro使用(静态分析+动态调试)
- IDA Pro分析Android软件
- 静态分析技术-IDA Pro简介
- IDA调试Android so文件
- 安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
- 【已解决】使用ida pro进行动态调试so文件遇到的问题
- 使用IDA逆向Android的.so动态库文件
- 使用IDA逆向Android的.so动态库文件
- android逆向学习,笔记(四)IDA Pro Android 静态分析
- 数据挖掘之关联分析
- Codeforces Round #353 (Div. 2) D. Tree Construction(每个点按照二叉树排序树的插入插入到树中,问最后每个点的父亲节点的值是多少)
- java提高篇之集合大家族
- 欢迎使用CSDN-markdown编辑器
- 合并map中key相同的value
- Android之使用IDA Pro静态分析so文件
- [BZOJ100题留念]
- Android 6.0运行时权限
- 五步搞定Android开发环境部署
- 详解C中volatile关键字
- 高精度 hdu 2940 Hex Factorial
- 翻硬币问题
- Java开发岗位面试题归类
- POJ 2253