Skip to content

mosentest/activityGuard

 
 

Repository files navigation

activityGuard:Android activityObfuscator

activityGuard 是一种针对四大组件进行混淆的解决方案,能够在打包时对apk和aab中的Activity、Service、Application和自定义的view进行名称混淆以提升应用的安全性。

目的

  • 防止逆向: Android四大组件的类名直接暴露在 AndroidManifest.xml 和代码中,容易被反编译后根据名称了解应用逻辑。
  • 增强安全性: 混淆名称增加了攻击者定位关键组件的难度,降低被针对性攻击的风险。
  • 马甲包: 降低aab包查重率,避免上架Google Play因查重率过高,导致下架或封号问题

原理分析

Android四大组件在打包过程中不能够R8被混淆,因为组件在AndroidManifest.xml以明文形式存在Android系统通过反射创建相关类来启动。所以我们需要在R8执行前修改AndroidManifest.xml和layout布局中的类名,并把新的名称keep的R8的混淆规则中(R8混淆执行时是以keep住的类为节点,如果没引用的类会被移除掉)。最后在通过asm字节码修改类名,就能够实现对四大组件和自定义view实现混淆名称了。 activityGuard 通过自定义Gradle任务在打包过程中修改替换AndroidManifest.xml和layout中的类名和class的类名来实现对Android四大组件的混淆

博客 地址https://juejin.cn/post/7449723991638327296

使用方法

插件基于Gradle8.0,并且因为基于aapt2生成的aapt_rules.txt来混淆类名,所以项目需要开启 isMinifyEnabled = true

每次混淆会在当前项目下生成对应的mapping.txt记录对应混淆类,插件默认会更加mapping.txt文件增量混淆名称,所以当需要不同混淆名时,可以删除mapping.txt文件或者自己实现对应生成规则方法(自己生成时记得确保唯一性)

buildscript {
    repositories {
        maven { url 'https://jitpack.io' }
    }
    dependencies {
        classpath "com.github.denglongfei:activityGuard:1.1.0"
    }
}

配置

plugins {
    id("activityGuard")
}
//以下均为非必须
//actGuard {
//    //是否开启
//    enable.set(true)
//    //不需要混淆的类
//    whiteClassList.set(
//        hashSetOf(
//            "com.activityGuard.confuseapp.MainActivity1",
//            "*.MainActivity2",
//        )
//    )
//    //类名混淆  com.activityGuard.a  -> a.b
//    obfuscatorClassFunction = {
//        it
//    }
//}

AAB混淆

aab打包混淆流程图如下 aab

Apk混淆

apk打包混淆流程图如下

apk

最终效果

apk image image

aab

image image

About

Android activity confusion

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%