Android防护扫盲篇

本文详细介绍了Android应用的防护策略,包括混淆、签名校验、反调试、加固方案等,强调了每个防护策略的实现原理和破解之道。此外,还探讨了APK的结构,特别是assets、lib、META-INF、res、resources.arsc、AndroidManifest.xml和classes.dex等关键组件,以及对dex和so文件的加固方法,强调了动态链接库so的加密和ELF文件格式的重要性。
摘要由CSDN通过智能技术生成

一,已知防护策略

1.不可或缺的混淆

Java 是一种跨平台、解释型语言,Java 源代码编译成的class文件中有大量包含语义的变量名、方法名的信息,很容易被反编译为Java 源代码。为了防止这种现象,我们可以对Java字节码进行混淆。混淆不仅能将代码中的类名、字段、方法名变为无意义的名称,保护代码,也由于移除无用的类、方法,并使用简短名称对类、字段、方法进行重命名缩小了程序的大小。
ProGuard由shrink、optimize、obfuscate和preverify四个步骤组成,每个步骤都是可选的,需要哪些步骤都可以在脚本中配置。  参见ProGuard官方介绍。

  • 压缩(Shrink): 侦测并移除代码中无用的类、字段、方法、和特性(Attribute)。
  • 优化(Optimize): 分析和优化字节码。
  • 混淆(Obfuscate): 使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名。

上面三个步骤使代码size更小,更高效,也更难被逆向工程。

  • 预检(Preveirfy):  在java平台上对处理后的代码进行预检。

一般来说优化和预检选项在Android中是关闭的,脚本如下:
-dontoptimize
表示不进行优化,建议使用此选项,因为根据proguard-android-optimize.txt中的描述,优化可能会造成一些潜在风险,不能保证在所有版本的Dalvik上都正常运行。
-dontpreverify
表示不进行预校验。这个预校验是作用在Java平台上的,Android平台上不需要这项功能,去掉之后还可以加快混淆速度。 (在安装apk过程中系统会对dex校验及优化成odex)

作为防护来说对于混淆的需求就是Obfuscate,增加阅读代码的难度。

2、签名校验
校验各个文件的信息,比如微信的dex文件校验,阿里聚安全的签名文件校验等高强度操作。
第一:直接在本地做防护,如果发现签名不一致直接退出应用
第二:将签名信息携带请求参数中参与加密,服务端进行签名校验,失败就返回错误数据即可

Android的签名机制可以有效防止应用二次签名后不能覆盖安

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值