【Tech-so】So文件静态分析Step by Step(一) --------入门,利用IDA pro查看代码
来源:互联网 发布:淘宝帐号为什么被冻结 编辑:程序博客网 时间:2024/05/24 03:13
之前搞腾了两个月的Cocos-Lua , 主要是把java的代码导出去给于Lua项目组调用,过程那个叫苦呀,其实到最后才发现,那是一个很简单的原理。
因为之前提及过,Lua与Java的互调要使用中间层C/C++来衔接,所以过程中也接触了一版的C/C++的代码,也了解了一下其静态库与动态库的链接。
由于中间层主要是使用NDK来编写,编写是没有问题的,毕竟无论是Eclipse还是Android studio中还是支持NDK,与C代码编写的,但是对于调试,
就显得尤其的麻烦了。虽然在Android的ADT22版本之后,Eclipse可以通过NDK debug=1来设置调试NDK打包出来的so文件,但是对于并不是保存在Android
工程中的C/C++文件如何去调式呢?而Vs2013却又不支持Android。所以当时的调试如何主要就通过log日记输出了。Vs调试C/C++的接口,Eclipse调试NDK本身
的代码,所以只能希望NDK再去调用其他C/C++的时候一定不能报错了,否则排查起来十分麻烦。例如:上一遍中说到使用lua_tostring的时候,字符串指针会
错乱一样,我只能从Log来判断究竟是其他的C/C++代码问题,还是NDK层的C/C++代码问题。
鉴于此,我们必须要有能力进行so代码的调试,这种调试是一种动态调试,在app运行过程中插入断点,进行一步一步看堆栈,看内存地址的调试模式。
在进行so代码调试之前,我们必须先学会静态分析so。意思就是,在调试前,我们应该先弄明白so里面的内容写的是什么。~~~~
1.先准备好一堆破解工具先,就好似撬锁的话,也需要一把好的锤子和螺丝刀,说得好像我有偷东西的经验的一样。
1.1 IDA pro 6.6 其实6.5版本我也有,6.6是一个绿色版本,密码是:um6q
1.2 vs2013 2013用来干嘛?其实在调试so的过程中,确实没有多大用处,但用来写C/C++的时候,
确实很好用,而且和Eclipse不是一个等次,密码:9kop ,需要注册码。
1.3 NDK 用来生成so
1.4 cygwin 用来生成so
2. 一本辅导书。我选择了旧版的Android软件安全与逆向分析(完整版。
这本说好处是,让你先了解了Android应用的整体架构,如何运行,如何通过我们代码转换为用户可操作的指令。
而且还带有动态调试机器指令的教程,不过由于版本旧,很多方法和说明都旧了,所以可以看的是其中的原理,了解为主,真正要研究的话,
还是根据我们目前常用的系统版本入手。
准备好这些东西之后,我们就立即进行so的分析了吗?一开始我是这样认为了,通过NDK,把一个本地getNumber()的方法编译成so,
然后把这个so,直接拖到IDA Pro中,然后通过虚拟机的指令集来分析代码,但结果往往令人失望的,
因为你会发现一些陌生的东西:
以下是一个native方法:getNumber()
这些LDR ,TST 指令是什么鬼??不是应该是Dalvik虚拟机的指令吗?
然后我就在我工程中的java层写了个if的方法:
TextView num = (TextView)findViewById(R.id.num);num.setText(""+NativeSoTest.getNumber(20));if(NativeSoTest.getNumber(20)==100){Toast.makeText(this, "Yes cpp", 1000).show();}
然后再生成Apk,把apk用rar的形式解压出来获取到classes.dex文件。
把这个classes.dex 拖到IDA pro中,然后利用Alt+T的快捷键,搜索字符串“Yes cpp”。
结果:
红框中可以看出,java层的代码,是已经被转换为Dalivk的虚拟机指令集代码了。也就是说,C/C++所生成的代码是与一般的虚拟机指令集代码不一样的。
Oh,MyGod,难道C/C++又存在了另一套指令集?
等等,这个IDA pro所呈现出来的代码,是怎么样的?为何是这样排列的?前面的数字是内存地址还是什么?中间的英文是指令集和什么?后面的说明又是怎么看?
所以要进行so的分析,首先应该先弄懂IDA pro。下班了,明天就来看看这个IDA pro展示了什么代码给我们~!
- 【Tech-so】So文件静态分析Step by Step(一) --------入门,利用IDA pro查看代码
- 【Tech-so】So文件静态分析Step by Step(二) --------读懂IDA Pro
- Android之使用IDA Pro静态分析so文件
- 安卓逆向学习笔记 (3)- 使用IDA Pro静态分析so文件
- 使用IDA Pro调试so文件
- IDA Pro动态调试Android so文件
- 使用IDA Pro动态调试SO文件
- 代码静态分析工具PC-LINT安装配置--step by step
- 代码静态分析工具PC-LINT安装配置--step by step
- 代码静态分析工具PC-LINT安装配置--step by step[转]
- 代码静态分析工具PC-LINT安装配置--step by step
- OpenGL step by step 一
- CANoe 入门 Step by step系列(一)
- CANoe 入门 Step by step系列(一)
- 用IDA分析so
- Ida 调试so文件
- 菜鸟总结so分析,arm 汇编,IDA静态分析
- NDK开发-之4-ida工具ndk对so文件静态分析
- AIDL实现及原理
- iOS简单的文件操作
- 欢迎使用CSDN-markdown编辑器
- jQuery.extend 和 jQuery.fn.extend 的区别
- Ext中renderer用法及参数
- 【Tech-so】So文件静态分析Step by Step(一) --------入门,利用IDA pro查看代码
- uiimage 转换为像素数据 以及从像素数据生成为uiimage
- git 无法启动此程序,因为计算机中丢失libiconv-2.dll
- C语言宏定义和宏定义函数
- JQuery.Ajax()的data参数类型
- 美化必备,<#ffffffff>语句的解析和透明度数值参照表
- 文章标题
- 安卓混合开发中原生页面与web页面的交互
- HTTPie:一个不错的 HTTP 命令行客户端