方案总结
签名
加固
DEX文件保护
通过使用DEX壳、JAVA代码反编译、JAVA指令虚拟化、JAVA字符常量加密等技术对DEX文件进行全面性保护。
SO文件保护
通过对SO文件进行反编译、防篡改、防盗用、虚机保护、代码压缩等技术对SO文件进行全面性保护。
资源文件保护
对应用中的资源文件以及JS文件进行加密保护和防篡改保护
运行时保护
对应用的运行环境进行实时检测,保护应用运行在安全的环境中。
数据文件保护
对应用使用到的本地文件、数据库、配置文件进行加密保护。
代码混淆
android平台的混淆原理是用“ 不能直接猜出含义 的通用变量名和函数名a b c等”替换编译后程序包中“ 具有明显语义信息 的变量名和函数名”
把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。
proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。
在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。
缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。
- 我们用到反射的地方。
- 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
- 是我们的java 元素名称是在配置文件中配置好的。
所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的
Android 混淆代码的原理与实施
https://blog.csdn.net/kepoon/article/details/7482058
做一个有”问题“的程序员
提高app安全性的方法?
安卓的app加固如何做?
谈谈你对安卓签名的理解。