Android App加固原理分析

Android App加固原理分析

对App进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。对于金融类App,尤其重要。

对App dex进行加固的基本步骤如下: 
1. 从App原始apk文件里获取到原始dex文件 
2. 对原始dex文件进行加密,并将加密后的dex文件和相关的存放到assert目录里 
3. 用脱壳dex文件替换原始apk文件里的dex文件;脱壳dex文件的作用主要有两个,一个是解密加密后的dex文件;二是基于自定义dexclassloader动态加载解密后的dex文件 
4. 因为原始apk文件已经被修改,所以需要删除原始apk的签名信息,即删除META-INF目录下的.RSA、.SF 和MANIFEST.MF文件 
5. 生成加固后的apk文件 
6. 对加固后的apk文件进行签名,apk加固完成。

原理分析: 
1.为什么要对原始dex进行加密,同时用脱壳dex文件替换原始dex文件?大部分的apk反编译工具(dex2jar、apktools、jui等)都是对dex文件进行反编译,将dex文件反编译成smail,然后再转化成class文件进行阅读和修改。用脱壳dex替换原始dex文件之后,用上面的反编译工具反编译apk文件,只能看到脱壳程序的class文件,看不到apk本身的class文件。对dex文件进行加密,这样即使第三方拿到了dex文件,以为无法解密,也就无法对其进行解析和分析。 
2.怎么确保apk功能正常运行?加固后的apk启动之后,脱壳dex文件会对加密后的dex文件进行解密,然后基于自定义dexclassloader动态加载解密后的dex文件。从用户的角度,加固前后App的功能和体验基本是一样的。这个和插件化的原理是一样的。可以参见http://blog.csdn.net/jiangwei0910410003/article/details/48104581 
3.dex加固主要是防止被静态反编译,进而获取源码并修改

延伸: 
道高一尺,魔高一丈。为了更好的对app进行防护,有了跟多更深的加固功能,防dump、防调试、特定代码加固和so加固等。

 

 

Android APP 加固思路

原文链接:https://blog.csdn.net/makaisghr/article/details/73302696

1.源码保护

1.1 Dex文件保护

对源文件使用加壳技术实现Dex文件保护,即隐藏原本的Dex文件,然后生成一个Dex壳文件放到APK中

1.2 防二次打包

在应用程序内加入代码验证自我的签名是否被篡改。常用验证策略:1.Java层签名验证,2.服务器验证(在Android的Java层获取签名信息,上传服务器在服务端进行签名然后返回验证结果),3.NDK技术底层获取签名和验证,4.自定义指纹验证

1.3 so文件保护

(1).对ELF文件加壳,(2).对Android系统中so文件的加载、调用机制做处理

1.4 资源文件保护

(1)对APK中资源文件名使用简短无意义名称进行替换 (2)修改resources.arsc DataType数据类型来促使apktool无法直接反编译资源文件

2.应用加密

2.1 Log日志输出屏蔽

通过配置proguard,将类android.util.Log的方法置为为无效代码。

2.2 清场技术

依赖于云端的黑白名单库,检测手机运行环境,发现异常则停止运行并提示用户

3.数据安全

3.1 页面防劫持

在所有Activity的onPause()方法中,弹出提示用户的警告,延迟1-2秒执行;在所有Activity的onResume()方法中,取消在onPause中的提示

3.2 本地数据保护

(1)将文件放在尽量安全的位置,比如内部存储而不是sd卡。(2)对文件内容使用对称加密或基于口令的加密。(3)对于数据库可用相关工具加密比如SQLCiper。(4)使用Android设备管理策略。(5)使用加密的SharePreference即Secure-Preferences

#

3.3 截屏保护

(1)可以使用Hook技术监控截屏相关函数的调用。 (2)可以在界面中添加代码防止页面截屏。

3.4 内存数据防查询

对当前进程的so进行排查,存在非本包名下的so即认为被注入了。当然,如果是存在合作伙伴的so,也可以加入白名单机制。

3.5 协议加密

使用TLS

蓝牙端可使用的SDK http://www.btsdk.com/develop/index.html

推荐使用加固方案:通付盾、 梆梆安全、爱加密、阿里聚、360。
 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值