您的位置:首页 > 移动开发 > Android开发

android 开发安全简单想法

2016-01-08 15:09 232 查看

一、数据安全

1、数据加密

       本地加密(使用加密算法,如MD5、BASE64、AES加密等,数据将不再是明文显示),另外可定期改变加密算法:

将核心数据通过服务器存储,客户端每次使用时将核心数据读下来才能用,否则会出错。
这个核心数据每一定周期(比如一个月)改变一次加密解密算法,客户端当无法处理算法时,进行apk更新,也就是每月更新一次apk。

2、 传输加密(https传输)

        HTTPS可以视为HTTP的安全版本(Secure),其安全基础基于SSL协议(Secure Socket Layer,安全套接字层)。HTTPS在HTTP的基础上添加了一个加密和身份验证。其默认端口是443.对于一些对数据安全要求比较高的网络应用,比如网络支付,网上银行,都是采用HTTPS通信机制
HTTPS URL连接的方式访问HTTPS服务器与HTTP URL访问HTTP服务器的方式基本相同。用到的类:HttpsURLConnection。
 

二、源码安全

     代码混淆:

         经过混淆处理,apk被反编译时,项目类名,方法名完全混乱,很大程度提高了代码可识别度

具体方法及注意问题如下:

新建一个项目的时候,会自动生成project.properties和proguard-project.txt文件,无需自己新建

如果需要对项目进行全局混码,只需要进行一步操作:

将project.properties的中

“#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。

如果有一些代码不能被混淆,比如需要加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。在导出的时候,可能不会报错。但是在手机上运行的时候,需要调用so文件的时候,就会报某某方法无法找到。这个时候就需要用到proguard-project.txt。

在新版本的代码混淆,已经变得很智能,不过引入的第三方jar还是需要手动编写混淆规则

图片处理:

关于图片处理的问题,例如Logo这类的小图不要以文件方式存储,可以存储到数据库中(存储路径或者存储图片二进制数据流),或者将Logo以编码方式存于静态对像中

核心代码处理:

       将核心代码存于服务器上,每次运行时读取服务器上的代码加密字符串,解密后,通过eval方式转为可执行代码。

伪加密

       APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。对PC端来讲伪加密的APK没法被解包无法被反编译,但是对android系统来说它完全不会影响正常的安装运行(该方法支持4.2以前的系统,在4.2以后的系统运行会报错,)。

伪加密的原理:读取APK的字节,找到连续4位字节标记为”P
K 01 02”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1
 反伪加密就是把1改成0就可以了)。

防二次打包

       获取 Signature, 根据Signature计算md5和sha1信息,获取签名公钥信息,在项目中多处验证打包的签名与真正的签名(加密后)是否一致,一致就继续运行,不一致则关闭程序,

 

通过以上多种方法处理再proguard后,即使反编译回去,代码可识别度大大提高,源码不会完整,也不可能随便改Logo处理。 

第三方加密平台

         提供更加完善的加密方法(dex加密,高级混淆等等)。目前比较流行的第三方平台有:爱加密,360加固保,娜迦等…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: