[转]让你的App对破解无懈可击,多管齐下达到银行保险箱水准
经过几个月甚至上几十个版本迭代了出来的app,积累毕生经验开发出来的项目。结果别人快速的反编译就复制你的成果,你是否透露出心酸与无奈。安全是一个不可忽视的问题,所以接下来给大家分享如何让你的app更加安全的干货。
1. 1一混淆永远都不可或缺
这里说的混淆不是说的传统大家都知道的简单混淆策略,而是高级一点的混淆策略,
这种混淆太简单了,no,我们今天是给大家分享干货的。
首先我们对混淆的概念先理清下:
我们知道每个正式app发布之前都会进行代码混淆,混淆有很多好处,优化代码,增加安全性等,而混淆一般是采用了proguard.jar工具,这个工具混淆之后的代码默认都是26个大小写字母,原理就在重新命名,让反编译不是那么好看,比如:
混淆前
1 2 3 4 |
<span class="">public PersongetPerson()</span>{ <span class="">retrun newPerson()</span>; } |
混淆后
1 2 3 4 |
<span class="">public a b()</span>{ <span class="">return</span> newa(); } |
这样对你来说是不是很简单,只是变量名发生了改变而已,也就是说这种混淆仍能被反编译。
道高一尺 魔高一丈 26个字母太少了 ,中文博大精深,5000多个汉字够用吧
Java语言是支持双字节的编码,两个字节的运行在安卓手机上是没有问题的。
比如:
public String 我是大象 (只不过编译器会给我们报错,但是运行时是没有问题的,并且性能是一致的,最终是字节命名)
这就是高级混淆的出发点。
1-1. 修改混淆工具
我们知道proguard.jar是又java编写的混淆工具类,入口类是Proguard.java,Proguard在main函数会初始化命名工厂 NameFactory我们增加几种选项:
这里可以看到韩文,日文的范围,所以我们不仅可以修改成中文,也可以修改成其他国家的语言,然后定义一个随机五字词语的方法,混淆时的命名 是调用stringAt这个方法,所以需要proguard的源码。
1-2. 运行混淆工具
需要混淆 工具的小伙伴门可以加司徒老师的微信(文末)。
2. 2防止应用被抓包
在混淆之后我们还是觉得不够安全,因为反编译你的app绝对是专业的,通过抓包能偷窥我们的与后台交互数据,应用的网络访问接口和返回数据有的时候很重要。
有开发者认为https能够一劳永逸解决被抓包问题,那就显得太天真了,反编译是专业的,他们会拿着root后的手机安装你的app,做各种实验,比如修改Https通信代码,自己做 X509TrustManager接口去做一套证书校验:
通过Xposed 的hook技术将X509TrustManager实现类注入到SSLSocketFactory类中。
解决方式
第一、Xposed框架将Hook信息存储在字段fieldCache,methodCache,constructorCache 中, 利用java 反射机制获取这些信息,检测Hook信息中是否含有支付宝App中敏感的方法,字段,构造方法;
第二、检测进程中使用so名中包含关键”hack|inject|hook|call” 的信息,这个主要是防止有的人不用这个Xposed框架,而是直接自己写一个注入功能;
第三、root检测原理是:是否含有su程序和ro.secure是否为1;
第四、防止被Hook的方式就是可以查看XposedBridge这个类,有一个全局的hook开关,所有有的应用在启动的时候就用反射把这个值设置成true,这样Xposed的hook功能就是失效了;
第五、如果应用被Xposed进行hook操作之后,抛出的异常堆栈信息中就会包含Xposed字样,所以可以通过应用自身内部抛出异常来检测是否包含Xposed字段来进行防护。
3. 3高级加固方案
加固方案是一劳永逸的解决反编译的首选,因为只有自己才知道解密的秘钥,市面上的jadx反编译工具,对于加固的也无能为力,高级加固方案中采取非对称加密方式,与二次混淆结合使用。让你的APP达到银行级别保险箱的水准。
这些都在动脑学院的性能优化体系中:
- 需要加密的Apk(源Apk)
- 壳程序Apk(负责解密Apk工作)
-
3-1-1-1. 加密工具(将源Apk进行加密和壳Dex合并成新的Dex)
用加密算法对源dex进行加密 和壳dex进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载经加密的源APK,让其正常运行起来
[source]让你的App对破解无懈可击,多管齐下达到银行保险箱水准