• Android 混淆使用及其字典混淆(Proguard)


    1.使用背景

    ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。从而使代码更小、更高效、更难进行逆向工程。

    Android代码混淆,又称Android混淆,是一种Android APP保护技术,用于保护APP不被破解和逆向分析。

    所以在大部分的项目里,基本都会把混淆打开。

    Tips:如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。例如Gson库,Litepal库,有些东西用到的话,就得去proguard-rules.pro文件里配置一下。

    2.开启混淆

    需要在app的build.gradle文件里进行配置。

    1. android {
    2. ......
    3. defaultConfig {
    4. }
    5. buildTypes {
    6. release {
    7. minifyEnabled true // 开启代码混淆(必须的哈)
    8. zipAlignEnabled true
    9. shrinkResources true
    10. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    11. }
    12. }
    13. }
    1. minifyEnabled:是否进行代码混淆(开混淆就必须要这个哈)
    2. zipAlignEnabled:是否进行Zip压缩优化(可选)
    3. shrinkResources:是否移除未被使用的资源(可选)
    4. proguardFiles:混淆规则配置文件
    5. proguard-android.txt:AndroidStudio默认自动导入的规则,这个文件位于Android SDK根目录\tools\proguard\proguard-android.txt。这里面是一些比较常规的不能被混淆的代码规则。
    6. proguard-rules.pro:针对自己的项目需要特别定义的混淆规则,它位于项目每个Module的根目录下面,里面的内容需要我们自己编写。

    3.Proguard配置规则

    即在proguard-rules.pro里进行编写配置。

    这儿我就不细说了,因为平时我也用不了那么多,这儿贴一个比较全的链接

    Android 代码混淆规则 - 掘金

    Tips:

    AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的(我目前看来是如此的)

    4.字典混淆

    我的配置:

    1. # 混淆的压缩比例,0-7
    2. -optimizationpasses 5
    3. # 指定不去忽略非公共的库的类的成员
    4. -dontskipnonpubliclibraryclassmembers
    5. # 指定混淆是采用的算法
    6. -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
    7. # 指定外部模糊字典 proguard-chinese.txt 改为混淆文件名,下同
    8. -obfuscationdictionary proguard-1il.txt
    9. # 指定class模糊字典
    10. -classobfuscationdictionary proguard-1il.txt
    11. # 指定package模糊字典
    12. -packageobfuscationdictionary proguard-1il.txt

    其实就是指定

    • -obfuscationdictionary dictionary_path:指定外部模糊字典
    • -classobfuscationdictionary dictionary_path:指定class模糊字典
    • -packageobfuscationdictionary dictionary_path:指定package模糊字典

    这三个的模糊字典。让你的代码,搞起来特别没得可读性。

    这个txt文件怎么生成,你可以自己写个脚本生成,也可以用网上已经写好的。

    https://github.com/WrBug/FrenziedProguard/tree/master/proguard-file

    下载好文件后,放在和proguard-rules.pro同级的文件目录里面:

    我使用的是 proguard-1il.txt,使用后反编译查看,首先是包名:

    其次是内容:

    可以看到,里面的各种对象,方法,变量名,参数等等都被混淆了,变化非常之大。

    5.是否生效

    使用反编译工具Jadx查看

    GitHub - skylot/jadx: Dex to Java decompiler

  • 相关阅读:
    Redis的java客户端
    android安全基础知识学习
    备份系统规划不得不考虑的几个关键性问题,究竟该怎么解决?
    Eureka服务注册中心
    12 款小众宝藏AI工具,90% 的开发者不了解
    CyberArk被评为2022年Gartner特权访问管理魔力象限领导者
    HBase shell常用命令
    李沐动手学深度学习V2-Encoder-Decoder编码器和解码器架构
    K8s 集群高可用master节点ETCD挂掉如何恢复?
    GBase 8c 创建和管理表(二)
  • 原文地址:https://blog.csdn.net/LoveFHM/article/details/132871810