1.为什么要对app加固
- 反编译
定义:利用编译程序从源语言编写的源程序产生目标 程序的过程。
2.app加固方案的各个方案介绍
- 反模拟器
模拟器运行apk,可 以用模拟器监控到 apk的各种行为,所 以在实际的加固apk 运行中,一旦发现 模拟器在运行该APK, 就停止核心代码的 运行。 - 代码虚拟化
代码虚拟化在桌面平台 应用保护中已经是非常 的常见了,主要的思路 是自建一个虚拟执行引 擎,然后把原生的可执 行代码转换成自定义的 指令进行虚拟执行。 - 加密
样本的部分可执行代码 是以压缩或者加密的形 式存在的,比如,被保护过的代码被切割成多 个小段,前面的一段代 码先把后面的代码片段 在内存中解密,然后再 去执行解密之后的代码, 如此一块块的迭代执行。
3. dex文件加固方案原理
4.apk打包流程&dex文件构造解析
-
dex文件格式
每一个文件都有一个文件头,通过文件头可以判断这个文件的类型
可以加密数据区的内存
5.应用stream对apk中dex文件进行加密
6.如何进行NDK 层加密
一般情况下我们没有必要使用NDK,官方也提到了使用native开发会增加开发过 程的复杂性。但是对于一些计算密集型的应用,例如游戏、图像处理,使用NDK 能提高运算性能。还有一些情况为了复用现有库或者跨平台库,也会选择NDK。 上面提到的一些核心算法和秘钥,大家选择放到native层,潜意识中也是默认 native的破解难度比java高,还有欺负大部分Android程序员不会写C/C++代码:)
7.加密方式
- 对称加密:
加密和解密的秘钥使用的是同一个
例如:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES - 非对称加密算法:
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密, 只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用 对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种 算法叫作非对称加密算法