我们在已经弄过了很多app了,不管是协议还是外挂,我们都是那么一路走过来了,在操作的过程中也发现了很多问题就是应用不在乎安全问题带来的后果,因为安全始终都是不可忽视的问题,辛辛苦苦写的代码被人看的体无完肤对不起自己也对不起公司,所以如果你做了这几件事至少可以防止一些人把你的app给无情的强奸了。本文就来总结一下不用加固方式也可以让你的应用变得更加安全可靠。
一、代码资源混淆
这里说的混淆不是说的传统大家都知道的简单混淆策略,而是高级一点的混淆策略,首先是代码混淆,大家可以参考小黄车app的代码:
看到了吧人家把代码混淆成中国人可以看懂的信息,可惜这样的信息对于我们破解来说就很麻烦了,关于怎么做到的,之前的文章已经介绍了,大家可以查阅这里:Android中把代码混淆成中文,当然可以简单一点就是用 -classobfuscationdictionary实现也可以。代码混淆成这样不算什么,还有更厉害的就是把资源混淆成一坨屎的应用:
看到了吗资源文件反编译之后全是这鸟样了,感觉世界都快崩溃了,这个方案暂时没研究不过大家可以进入编码美丽小密圈咨询bin神找MT管理器作者咨询方案。当把代码混淆成一坨屎,把资源混淆成一坨翔的时候,让破解者顶着一坨翔破解吧。
二、防止应用被抓包
在混淆之后我们还是觉得不够安全,因为有的人很贱,总是抓包偷窥我们的数据,不过我一般不会这么贱因为我一般正大光明的抓包看数据,应用的网络访问接口和返回数据有的时候很重要,所以为了防止应用不被干,能用https的一定要用,虽然用了也不管用,因为我们有Xposed。用了https之后也要重写SSLSocketFactory类,不懂这个技术可以看看这篇文章:Android中破解防止被抓包应用方案 有了这个还是不行,因为我们会反编译干掉这个类。还需要加上系统的api来判断当前设备有没有挂代理不管是Fiddler还是VPN只要有就认为是不安全的,这两个api方法很简单:
System.getProperty("http.proxyHost");
System.getProperty("http.proxyPort");
正常情况下这两个返回值是null,所以你们懂得怎么做了,如果发现不为空那么就表示当前设备被挂代理了,那么就有可能被抓包的风险了,这里额外说一下破解者在除了用Fiddler抓包,还可以直接在手机上用Packet Capture和Debug Proxy这两个工具进行抓包:
不过可惜这两个工具都用了系统的VPNService功能做的,所以这时候上面接口返回的值就不为空了,那么这两个工具就等于废了。那么加了这些就一定管用吗?肯定不管用,因为要是管用那我下面还说什么呢?因为这些都是Java层代码,所以安全点就把这些判断放到native层做。只要找到了这个地方直接nop掉就好了。所以我们还得想办法防止,抓包的时候我们要是隐藏我们的接口域名就好了,因为破解者通过抓包找到域名,然后再去Jadx中搜索就定位到了参数加密地方