加密方案概述
下面整理一下常用的安卓的加密技术和方案:
- 代码混淆
- 常用(Android自带的)
ProGuard
- 常用(Android自带的)
- 加固
- 发展历史
- 目前加固技术基本都发展到第三代
- 前2代的加固技术破解难度不大,基本被淘汰
- 第三代加固技术,由于各加固服务商加固原理大致相同
- 目前加固技术基本都发展到第三代
- 第三代加固技术主要有2种方式:
- 对源apk整体做一个加固,放到指定位置,运行的时候再解密动态加载
- 对apk加固的破解,叫做:脱壳=去壳
- == Dex Method代码动态解密
- 对apk加固的破解,叫做:脱壳=去壳
- 对so进行加固,在so加载内存的时候进行解密释放
- 对so的加固的破解,叫做:so库反编译
- == So代码膨胀混淆
- 对so的加固的破解,叫做:so库反编译
- 对源apk整体做一个加固,放到指定位置,运行的时候再解密动态加载
- 发展历史
另外参考这里的总结:
- 鉴于现在很多破解脱壳方案,都是基于
Hook
框架,去从安卓app中导出dex文件- 典型的hook框架
XPosed
:从根上Hook了Android Java虚拟机Cydia
:支持jni和java层的HOOK功能
- 再去从dex中转换出java代码
- 典型的hook框架
- 而各大安卓厂商意识到了,如果只是代码用Java写,代码运行在Java层,则被破解和被篡改的概率很大
- 所以很多都把重要代码放到
JIN
层了- 比如:
- 微信 的 数据库的连接操作
- 比如:
- 不过从破解的技术角度说
- 你
加壳
-》 我脱壳
- 你把操作放在
so
-> 我就用IDA
调试 - 你有反调试(检测?) -> 我就绕过去
- 你
- 当然这样会增加破解难度
- 对于普通技术不行的,还是可以防得住的
- 但是对于高手,有一定毅力和能力,还是可以破解的
- 所以很多都把重要代码放到
如何防护安卓的安全
- 首要的:加强业务逻辑
- api接口通讯
- 全部接口都实现https
- 且做证书绑定 ssl pinning
- 全部接口都实现https
- api接口通讯
- 其次:加强安全防破解技术
- 代码
- 代码混淆
- 首选:Obfuscator-LLVM
- 其次:ProGuard
- 代码混淆
- 其他防护
- VMP
- 给dex(中的核心逻辑)做VMP
- 给SO库(中的核心逻辑)做VMP
- 加壳
- 用第三方加壳服务或自己实现
- 第三方加壳服务商
- 腾讯乐固legu
- 360加固保
- 网易易盾
- 等
- 第三方加壳服务商
- 用第三方加壳服务或自己实现
- VMP
- 代码