新闻动态
Android NDK程序的逆向分析
http://sytm.net 发布日期:2014/2/16 20:42:26

现如今,Android平台下的软件应用复杂多变,仅使用Android SDK通过JAVA语言编写程序已经不能满足开发者了,譬如:音频、视频播放软件解码器的编写就涉及到CPU的高性能运算;其他平台开发的游戏如采用C、C++编写的,则因为涉及到时移植而可能面临重写所有代码;传统的Java语言编写的程序容易遭到逆向破解,需要一种新的代码保护手段来防御攻击等。这一个个显着的需求都涌现了出来,为了解决这些问题,Google凭借java语言的JNI特性为开发者提供了Android NDK。

Android NDK直译为“安卓原生开发套件”。它是一款强大的工具,可以将原生C、C++代码的强大功能和Android 应用的图形界面结合在一起,解决软件的夸平台问题。通过使用该工具,一些应用程序能直接通过JNI调用与CPU打交道而使性能得到提升。同时,能够将程序的核心功能封装进基于“原生开发套件”的模板中,从而大大提高软件的安全性。

Android NDK从R8版本开始,支持生成X86、MIPS、ARM三种架构的原生程序。原生程序的优化属于gcc编译器控制的部分,未经过优化代码与经过优化的代码有很大的区别,在实际逆向分析中大多遇见的是优化过程的代码。Gcc编译优化通过-O选项来提供,有0、1、2、3、s共五个优化等级。

等级0:不优化。在makefile文件中未指定-0选项时默认不优化。

等级1:开启部分优化。该模式下,编译会尝试减少代码体积和代码运行时间,但是并不执行会花费大量时间的优化操作。

等级2、比等级1更进一步优化,在该模式下,并不执行循环展开和函数内联优化操作,与-o1比较该模式会花费更多的编译时间,并生成性能更好的代码。

等级3、包括等级2所有的优化,并开启循环展开和函数内联优化操作。

等级s:针对程序大小进行优化,该模式下会执行-O2等级中除了会增加程序空间的所有优化参数,同时增加了一些优化程序空间的选项。

编译器优化的选项非常之多,我们不去深究具体每个等级的优化选项,只通过使用不同等级优化来比较程序的大小及代码差异。


更多阅读
返回列表
© 2010 TianMei Technology All rights reserved. ICP:辽B-2-4-20100065辽公网安备 21010202000010号  网站地图