桥下红药

机器应该工作、人类应该思考

论Android数据接口安全

Android, 总分类 0 评

在Android开发中很少有程序员会注意到App的安全问题,因为就算出了问题也是后台人员的锅,比如发送短信的接口被抓包,然后别人(这里不说是“黑客”是因为这技术太Low了 )随机11位数

手机号,挂上代理IP就可以疯狂的请求接口,消耗你的短信余额。而且这样成本还很低 使用一个代理IP市面上只需要一分钱,通常一晚上你短信几千块钱就没了。

通常开发都是 接口Api 需要计算签名来验证是否合法的请求,那么计算签名肯定是在本地的,会Java的都知道 Java代码 真的太好反编译了基本没有秘密可言,别人可以轻易的读你写代码,在没有混淆的情况下,代码还原度接近99%,签名算法无所遁形。市面上也有第三方的加固服务:乐固,360加固,爱加密等等,但是 第三方加密原理也都是差不多的,360加固的原理就是把原本的dex包装一层壳,App运行时释放到内存里面,其他加密方式也都是大同小异,既然要运行App必然会释放出真正的dex数据,有大佬直接到内存里面dump出dex数据出来,所以说然并卵,网上还有付费提供各种脱壳服务的,一个壳300~500就可以搞定,就看你的App人家有没有兴趣。

被逆向是不可避免,只有无限加大逆向成本,当成本大于利益别人就没兴趣去逆向你的App了。

本人见识一般只提供一些力所能及的方案了。

● 针对上述栗子遇到无聊的人去刷你的短信接口,可以在接口上增加图片验证码即可。

● 尽量混淆你的代码,混淆后比较难阅读,加大别人阅读难度。涉及到保密的地方就把 目录起名和 系统的目录一样来混淆别人的眼睛 : package java.util.xxxx (曾经看混淆后的代码,看了大半天,心中草泥马奔腾)

● 数据接口使用 https ,有条件的使用 RPC 框架 ,WebSocket 数据通信 。

● 接口签名参数验证是必须的,比如和支付宝学习下参数排序验证。服务端和客户端 Rsa 加密通信。

● 其实重点还是在 签名算法的保护,可以用 C/C++ 写签名算法再加壳等。(问题在于别人也会拿你的so直接去调用,C/C++ 逆向成本高些。所以再加大点难度,so里面校验java层代码)

● 涉及加密的地方多使用反射以及动态代理,(别人会崩溃,明明这里是这样赋值但是运行到后面就被动态代理替换了~)

● 以上已经挺恶心人的了,我要是遇到这样的App直接放弃了,还可以更恶心点,启动页的时候 从网络下载 jar、apk、so 来动态加载某些算法或数据、代码里再用反射调用。

● 上面的方法综合灵活穿插运用,最后再加上第三方的壳,第三方的壳虽然可以脱出dex来,但是还原apk难度还是比较高的,可以有效防止 Xposed。

上一篇

发表评论