【问题标题】:Obfuscated code混淆代码
【发布时间】:2023-04-08 00:32:02
【问题描述】:

我被要求为 Android 创建一个简单的应用程序。事实上,第一个我会得到报酬,所以我真的不想把它搞砸:)。其中一项要求是代码必须经过混淆处理。

我了解了混淆的一般概念,但我不想犯任何愚蠢的错误。

我必须做些什么才能使代码变得模糊?将其作为发布版本导出是否可以完成这项工作,还是需要一些其他步骤?任何评论也很感激。

PS。如果重要的话,我正在使用 Eclipse。

编辑

来自anwsers中建议的文章:

要启用 ProGuard 使其作为 Ant 或 Eclipse 构建的一部分运行, 在中设置 proguard.config 属性 /project.properties 文件。路径可以是绝对的 路径或相对于项目根目录的路径。

如果您将 proguard.cfg 文件保留在其默认位置( 项目的根目录),你可以像这样指定它的位置:

proguard.config=proguard.cfg

我的项目目录中确实有 project.properties 文件。但我没有 proguard.cfg 文件。相反,我有 proguard-project.txt 文件。我想这是一个替代品。

project.properties:

此文件由 Android 工具自动生成。 请勿修改此文件 - 您的更改将被删除!

必须在版本控制系统中检查此文件。

自定义 Ant 构建系统使用的属性编辑 “ant.properties”,并覆盖值以使脚本适应您的 项目结构。

要使 ProGuard 能够缩小和混淆您的代码,请取消注释(可用属性:sdk.dir、user.home):

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

项目目标。 目标=android-7

原来除了最后一行之外的所有内容都被注释掉了。

在 proguard-project.txt 中所有内容都被注释掉了。

我想我在这里迷路了,所以如果有人能逐步告诉我应该做什么以及如何检查它是否真的有效,我将非常感激。

【问题讨论】:

    标签: android obfuscation proguard


    【解决方案1】:

    官方开发网站上的文章已过时。从 SDK Tools r17 开始,他们改变了 ProGuard 配置的工作方式。基本上,他们将以前的 proguard.cfg 拆分为两个文件(并且还简单地将它们制作为 .txt 文件):proguard-android.txt 和 proguard-project.txt。 proguard-android.txt 位于您的 {SDK dir}\tools\proguard 目录中,proguard-project.txt 位于您的每个项目目录中。

    他们拆分文件,以便 Android 团队认为非常标准的一般配置/标志将位于 proguard-android.txt 文件中,并且可以随每个 SDK 工具修订版进行更新(基本上是静默更新)。然后任何开发人员/项目特定的标志,开发人员可以添加到proguard-project.txt 文件中。

    这就是为什么您注意到 proguard-project.txt 文件中的所有内容都被注释掉的原因,因为通常大多数人没有任何项目特定需求,他们只想使用标准设置运行 ProGuard 并完成它.

    供参考(很好的解释):http://tools.android.com/recent/proguardimprovements

    一步一步(每天:P)

    (使用 Eclipse IDE)启用 ProGuard 并仅使用 默认 设置对其进行收缩和混淆:

    • 首先将您的 SDK 工具更新到最新版本(撰写本文时为 r19)
    • 在project.properties 中取消注释以下内容的行:

    proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

    如果您在 r17 之前创建了项目,那么您可能看不到相同的内容。如果是这种情况,我建议您创建一个新的虚拟项目(在更新 SDK 工具之后)并复制 proguard-project.txt 和 project.properties 文件。

    就是这样! ProGuard 现在将启用并运行,但仅在发布版本上(当您使用 Android 工具并导出已签名/未签名的 apk 时)。

    当您进行发布构建时,您会注意到将在您的项目文件夹中创建一个新的 ProGuard 文件夹。在此文件夹中,您可以找到四个文件,其中包含保留或删除的类/方法等内容。另请注意,当您进行混淆时,您也会在发生错误时混淆您的堆栈跟踪。

    编辑:(9/4/12) 只是想更新这个答案以反映 Tools r20 的变化。

    Android 团队现在添加了一个额外的 proguard 配置文件。它是proguard-android-optimize.txt,也位于{SDK dir}\tools\proguard 目录中。这个文件和原来的proguard-android.txt配置文件一样,除了它有proguard优化开启。

    添加这个附加文件是为了方便那些想要打开优化的人(也许是为了让他们可以做一些事情,比如去除日志调用,这需要打开优化)。现在您可以简单地在 project.properties 文件中指向该文件,如下所示:

    proguard.config=${sdk.dir}\tools\proguard\proguard-android-optimize.txt:proguard-project.txt
    

    和以前一样,不要尝试更改任何 proguard-android... 配置文件。任何项目特定的标志都应该放在项目文件夹中的proguard-project.txt 文件中。

    【讨论】:

    • 我听从了 Turbo 的指示。混淆是没有用的。反编译后,所有代码正常显示。即使是二进制 java 类文件,也将是纯文本。 !AfterProgardScreenCapture
    • 查看项目中的“proguard”文件夹并打开seeds.txt。此文件Lists the classes and members that are not obfuscated。看看你的类/方法/字段是否都在里面。如果是,那么它们从一开始就不会被混淆,因此您需要检查您的 proguard 配置规则以了解原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2011-05-14
    • 2015-11-21
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多