小言_互联网的博客

安卓反编译逆向概述

309人阅读  评论(0)

Android的反编译

了解Android逆向不是为了攻击别人的软件,而是为了了解软件背后的技术和知己知彼提高自己软件的安全性。

整体Android的反编译逆向分为静态编译和动态编译。

静态编译技术

整体是分为原生静态反编译和C相关的静态编译。

原生Java相关的反编译,主要熟练掌握借助工具,包括IDA PRO等和反编译之后的语言,包括smail语法和java和安卓开发知识。这一块相对固定这里不展开讲,后续单独写一篇。

C相关的静态编译也是相关的工具和语言,C最终会变成ARM汇编语言,这一部分主要是ARM 汇编语法的了解,也不展开讲。

动态逆向反编译技术

静态编译是基础,但是对于庞大的软件和代码,一时找不到头绪,需要动态反编译的技术来快速的了解框架和切入点。核心思路是:
通过动态运行程序,观察程序的输出结果来判断程序的关键点。
所以动态反编译调试的技术必不可少。

下面从工具实战的角度,重点讲一下动态反编译的几种典型的方法。

Java语言的动态反编译

1.代码注入法

简单来讲就是apktool来反编译成smail语法,判断关键点,然后通过smail语法插入一些log输出,然后利用apktool重打包,观察log输出,来获取关键信息。

2.栈跟踪法

栈跟踪法属于特殊的代码注入方法,核心原理就是在反编译的smail中插入栈信息的输出代码,比如利用smail插入如下的java代码:
new Exception(“name”).printStacktrace();

3.Method Profiling

主要是利用Android Sdk的DDMS提供的Method Profiling功能进行分析,这个功能分为开始点和结束点,既可以通过devices界面手动操作弹出分析界面,也可以通过代码到处文件来分析。

DDMS图形化操作比较简单,这里重点说一下代码导出文件的方式。

1.代码插入

Android.os.debug.startMethodTrace("name");
//要分析的方法调用
Android.os.debug.stopMethodTrace();

2.导出并分析文件。

导出上面的代码里面的name命名的文件,位于SD卡的根目录。
用Android SDK的tools目录下的traceView工具打开即可。

4.不需要源码的AndroidBug调试

AndroidBug原理是通过JDWP协议与Dalvik虚拟机的DDM建立连接,通过提供的命令可以查询类和方法信息,然后断电调试,同样提供了method profiling功能。

网上查询安装AndroidBug,然后按照操作使用AndroidBug就行了,网上资料很多,不多做赘述。

原生C代码的动态反编译

1.IDA PRO

IDA PRO提供了动态调试功能,除了调试java也能调试C。
整体是把Android_Server push到手机,在特定端口建立和手机的连接,然后再汇编代码地址处断点调试。

2.gdb方式

gdb和gdb_server需要自己编译,整体使用和IDA PRO大同小异。

总结

以上主要是概述了动态调试的几种典型方法的使用背景和原理,具体使用可以网上查询,资料完整,在此不多做赘述。

本文是读完《Android软件安全与逆向分析》后总结所写。


转载:https://blog.csdn.net/u010321471/article/details/102324658
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场