1.3
二、什么是加壳?
移动平台攻防技术的发展基本是沿着PC端发展轨迹在进行,从windows平台的加壳脱壳反调试反到Andriod的平台apk加固,反调试代码混淆,加强壳
加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下:
三、加壳作用和分类
作用:
加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
分类:
从App的加固技术来看:主流分为dex加密和so加密,目前来看保护dex文件更为重要,应为dex反编译后的java代码可读性更强。
四、Android Dex文件加壳原理
4.1.APK文件结构
每个文件及文件夹的作用如下表所示。
文件或目录 | 说明 |
---|---|
assets文件夹 | 存放资源文件的目录 |
lib文件夹 | 存放ndk编译出来的so文件 |
META-INF文件夹 | 1. 该目录下存放的是签名信息,用来保证apk包的完整性和系统的安全性 2. CERT.RS 保存着该应用程序的证书和授权信息 3. CERT.SF 保存着SHA-1信息资源列表 4. MANIFEST.MF 清单信息 |
res文件夹 | 存放资源文件的目录 |
AndroidManifest.xml | 一个清单文件,它描述了应用的名字、版本、权限、注册的服务等信息。 |
classes.dex | java源码编译经过编译后生成的dalvik字节码文件,主要在Dalvik虚拟机上运行的主要代码部分 |
resources.arsc | 编译后的二进制资源文件索引。 |
4.2DEX文件格式
4.2.1什么是DEX文件?
他是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据
由于dalvik是一种针对嵌入式设备而特殊设计的java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别
当java程序编译成class后,还需要使用dx工具将所有的class文件整合到一个dex文件,目的是其中各个类能够共享数据,在一定程度上降低了冗余,同时也是文件结构更加经凑,实验表明,dex文件是传统jar文件大小的50%左右
4.2.2dex文件结构
Dex文件整体结构如下: