Android逆向工程-基础概念:Arm、Art、Dalvik、Smali、dex、NDK、JNI之间的关系
接触逆向以来遇到过Smali、dex几个概念,接触脱壳的时候又遇到ART、Dalvik、的概念,.so文件逆向的时候接触到Arm汇编、NDK、JNI的概念,今天简单梳理下这几者的关系。
一、Dalvik虚拟机
安卓(Android)是google收购的自由及开放源代码的操作系统,运行于Linux kernel之上。谷歌为了降低应用的开发难度,在Linux底层之上构筑了一个名为“Dalvik”的虚拟机。Dex文件是Dalvik Executable file,是Dalvik虚拟机上的可执行程序。Smali则是Dex文件运行在Dalvik虚拟机上的汇编语言。
二、NDK与JNI
NDK(Native Development Kit,原生开发工具包)是一组可以让开发人员在Android应用中调用C和c++代码的工具集。而JNI是一种Java字节码调用C/C++的解决方案,JNI描述的是一种技术。
JNI技术调用的C/C++代码会被编译成动态链接库(.so)文件,.so文件的文件格式是ELF,也就是linux下的可执行文件。.so文件可以采用多种架构,包括x86、arm等,ARM架构的文件逆向会需要ARM汇编知识。我们直接解压.apk看到lib文件夹下的x86、armeabi文件夹就是不同