一、什么是二次打包
二次打包流程:破解者需要对APK文件做反编译分析,反编译为smali代码,并对某些关键函数或者资源进行修改,再次编译为apk文件并重签名。
二、签名校验
1.原理
二次打包会篡改签名,通过签名前后的变化可以检测是否被二次打包
2.实现形式
本地校验(将APK原始签名的值保存在代码或者资源中,运行时本地代码里校验,不相等则证明被二次打包,最好放到jni层实现)
联网校验(联网时获取服务端签名值,如果校验不成功则证明被二次打包)
3.缺点
容易被HOOK patch掉
三、文件校验
1.原理
二次打包前后apk关键文件hash值比较,判断是否被修改
2.实现形式
也可以对应像签名校验一样有本地校验和联网校验两种形式
3.缺点:同上
四、核心函数转为jni层实现
1.原理
java层代码转为jni层实现,jni层代码相对而言篡改难度更大
2.实现形式
需要开发者自行在jni层实现代码。替代java层逻辑
3.缺点
jni层代码开发效率较低,可能会写大量反射代码降低了开发效率
五、APK加固+核心方法保护
1.原理
通过对APK加固增加反编译难度,对核心函数进行保护隐藏具体实现,同时可以应用以上三种对抗二次打包的形式
2.实现形式
DEX整体加固,对dex文件加壳并做指令抽取处理
使用vmp或者java2c方案,实现方法级加密,被保护的方法运行于被保护的so中。从而使破解者难以分析并篡改