AabResGuard

Android aab 文件资源混淆工具
授权协议 Apache 2.0
开发语言 Kotlin Java
所属分类 开发工具、 代码混淆和加密
软件类型 开源软件
地区 国产
投 递 者 阎弘
操作系统 Android
开源组织
适用人群 未知
 软件概览

AabResGuard 是一个针对 Android app bundle aab 文件的资源混淆工具,由字节跳动抖音 Android 团队开源。

资源混淆可以避免 Android 应用被轻松地恶意逆向分析破解,还可以减少 apk 文件的体积,但相应地也会降低代码的可读性。

特性

  • 资源去重: 对重复资源文件进行合并,缩减包体积。
  • 文件过滤: 支持对 bundle 包中的文件进行过滤,目前只支持 MATE-INFO/lib/ 路径下的过滤。
  • 白名单: 白名单中的资源,名称不予混淆。
  • 增量混淆: 输入 mapping 文件,支持增量混淆。
  • 文案删除: 输入按行分割的字符串文件,移除文案及翻译。

快速开始

  • 命令行工具: 支持命令行一键输入输出。
  • Gradle plugin: 支持 gradle plugin,使用原始打包命令执行混淆。

Gradle plugin

 build.gradle(root project) 中进行配置

buildscript {
  repositories {
    mavenCentral()
    jcenter()
    google()
   }
  dependencies {
    classpath "com.bytedance.android:aabresguard-plugin:0.1.0"
  }
}

 build.gradle(application) 中配置

apply plugin: "com.bytedance.android.aabResGuard"
aabResGuard {
    mappingFile = file("mapping.txt").toPath() // 用于增量混淆的 mapping 文件
    whiteList = [ // 白名单规则
        "*.R.raw.*",
        "*.R.drawable.icon"
    ]
    obfuscatedBundleFileName = "duplicated-app.aab" // 混淆后的文件名称,必须以 `.aab` 结尾
    mergeDuplicatedRes = true // 是否允许去除重复资源
    enableFilterFiles = true // 是否允许过滤文件
    filterList = [ // 文件过滤规则
        "*/arm64-v8a/*",
        "META-INF/*"
    ]
    enableFilterStrings = false // 过滤文案
    unusedStringPath = file("unused.txt").toPath() // 过滤文案列表路径 默认在mapping同目录查找
    languageWhiteList = ["en", "zh"] // 保留en,en-xx,zh,zh-xx等语言,其余均删除
}

aabResGuard plugin 侵入了 bundle 打包流程,可以直接执行原始打包命令进行混淆。

./gradlew clean :app:bundleDebug --stacktrace

通过 gradle 获取混淆后的 bundle 文件路径

def aabResGuardPlugin = project.tasks.getByName("aabresguard${VARIANT_NAME}")
Path bundlePath = aabResGuardPlugin.getObfuscatedBundlePath()
  • aabResGuard 是什么,网络很多资源,下面简单说下配置用法 root build gradle配置 classpath "com.bytedance.android:aabresguard-plugin:0.1.4" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" ext.kotlin_versio

  • 方法1 来源 buildscript { repositories { mavenCentral() mavenLocal() google() maven { url 'https://raw.githubusercontent.com/martinloren/AabResGuard/mvn-repo' } }

 相关资料
  • 我想将事件附加到元素以处理文件拖放事件,但似乎此事件也附加到所有子元素。例如 ...如果我将文件拖到属于元素的任何元素上,控制台将输出。因此,如果我将此事件附加到或,则当悬停在页面上的任何元素上时,事件将触发。 对于<code>dragleave 为什么会这样?有没有办法把这个事件只附加到指定的元素上?如果没有,有没有办法将事件从所有子元素中分离出来? 这里有一个摆弄的例子:http://jsfi

  • 我一直在摆弄Proguard配置,我想测试只是为了优化 但我仍然会遇到这样的错误: java.lang.IllegalArgumentExc0019:找不到[org/apache/log/log4j/core/jackson/Log4jXmlMoules](有1个已知的超级类)和[org/apache/log/log4j/core/jackson/Log4jJsonMoules](有4个已知的超级

  • Powershell的混淆目前已经使用的越来越多,国内外也有了较多的研究,在今年的BH大会上也有对应的议题,关注点是反混淆,那么里面的一些姿势很值得我们学习,我们提供一些混淆实例,来让大家对于PS的混淆做到一个初步了解,也为防御混淆提供一些思路。 实例 在混淆之前,先看看powershell编码执行的方式。 -EC,-EncodedCommand,-EncodedComman,-EncodedCo

  • 默认情况下 Nuxt 使用 vue-loader、file-loader 以及 url-loader 这几个 Webpack 加载器来处理文件的加载和引用。对于不需要通过 Webpack 处理的静态资源文件,可以放置在 static 目录中。 Webpack 构建 默认情况下, vue-loader自动使用 css-loader 和Vue模板编译器来编译处理vue文件中的样式和模板。在此编译过程中

  • 由于Eclipse的资源文件编辑器不支持将中文信息转换成“\uxxxx”格式的UCS2编码,因此,不能使用Eclipse自带的资源文件编辑器来编辑中文信息。除了直接在资源文件中输入“\uxxxx”格式的内容外,还可以采用如下的三种方法减少输入中文信息的工作量: 1. 使用native2ascii.exe命令 native2ascii.exe文件是JDK发行包中带的一个命令,该文件可以在<JDK安装

  • 问题内容: 模式和打开文件进行更新(请注意,会截断文件)。在区分二进制文件和文本文件的系统上,将“ b”追加到以二进制模式打开文件的模式;在没有此区别的系统上,添加“ b”无效。 与此 :打开一个文件进行读写。如果文件存在,则覆盖现有文件。如果该文件不存在,请创建一个新文件以进行读写。 但是,如何读取打开的文件? 问题答案: 假设你要打开的文件带有应有的声明。然后,你将执行以下操作以从文件中读取内

  • 我已经创建了一个proto文件,其中包含我打算生成的REST Web服务的所有必要消息和rpc函数。使用proc-gen-swagger插件,我设法将该proto文件编译成一个swagger.json文件,一切似乎都很好,除了两件事,我似乎无法解决。 > swagger.json文件中的所有定义都以我的原始文件包的名称为前缀。有没有办法摆脱这个? 我的消息的所有字段都是“可选的”。它们没有被明确指

  • 问题内容: 是否有对Java混淆代码进行反混淆的工具? 这些代码是从编译的类中提取的,但是它们被混淆并且不可读。 问题答案: 您是否尝试过使用Java Deobfuscator(又名JDO) (一种智能反编译器)来减少代码的晦涩感? 目前,JDO执行以下操作: 将混淆的方法,变量,常量和类名重命名为唯一的,并更能指示其类型 在整个源代码树(测试版)中传播更改 具有易于使用的GUI 允许您指定字段,