apk安全方案
- 签名
- 混淆
- 加固
- 核心代码从java移到ndk/c++中
- 接口安全处理:验签+https+核心接口加密
一、签名
如果不对app进行签名,其他人员会利用未签名的包进行再打包,加一些广告信息,从而进行非法牟利,对我们造成影响的损失。
二、混淆
- 定义:代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
- 分析:如果不进行混淆的话,文件名、变量名等都可以被别人看到,这样代码将是非常容易被理解从而被找到漏洞进行攻击或者非法牟利的。各大app对进行过反编译后,某宝、某信、某多等全部都会进行混淆,混淆过之后,文件名、变量名等都会变成a、b、c、d等没有含义的字母,从而大大增加破解难度
- Android混淆怎么做
三、加固
- 定义:通过将核心dex加密,暴漏出一个没有核心代码的壳dex,从而做到安全防护的目的。
- 分析:即使进行了混淆,java代码仍然是裸露的,代码逻辑仍然能被分析出来,加固之后,就不能直接看到对应的java代码,除非破解加固算法,而加固算法一般都会放到c++层的so库中,而so库是很难被破解的。
- 实现方案:
- 直接使用第三方的加固工具,360加固、腾讯加固等
- 自己设计自己的加固方法,更难破解
四、核心代码从java移到ndk/c++中
进行过加固后,如果加固算法被破解,仍然是不安全的,所以核心代码放到c++的so库中,这样做是更加安全的,so库是很难破解的。通过解压各大app会发现lib中会有大量的so库。
五、接口安全处理
如果直接通过http进行通信,而又未做安全处理,通过fiddler等抓包工具可以很容易的抓到接口通信内容,从而对系统进行攻击。所以,要进行三个层次上的安全处理,验签、https和核心接口加密。
- 验签:验签是指接口请求时通过一定的算法规则进行签名,并将签名放到请求中,后台收到请求后先对签名进行验证,验证通过再响应请求,验证不通过便不响应请求,从而免遭部分攻击。
- https:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。使用https可以使数据在传输过程中不被抓取。
- 核心接口加密:对一些核心接口的数据加密后再传输,从而避免在传输层遭到拦截,从而引起安全问题,可使用RSA、AES等加密算法进行数据加密。