防止apk二次打包

一、什么是二次打包

二次打包流程:破解者需要对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中。从而使破解者难以分析并篡改

猜你喜欢

转载自blog.csdn.net/weixin_42600398/article/details/125041792