【问题标题】:Android Proguard : Classes and Resources extractable even after using ProguardAndroid Proguard:即使在使用 Proguard 之后也可以提取类和资源
【发布时间】:2013-12-13 02:04:20
【问题描述】:

我通过取消注释 project.properties 文件中的以下行来启用 Proguard:

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

当我尝试使用 dex2jar 提取类和资源时,我能够按原样提取它们。我是否必须更改项目中的一些其他文件/属性/配置以防止直接提取类?我应该在project.properties(项目根位置)或proguard.android文件(SDK位置)中添加一些配置参数吗?

【问题讨论】:

    标签: android obfuscation reverse-engineering proguard


    【解决方案1】:

    看来您使用的是“标准”Proguard 混淆器属性文件。尝试使用“高级”Proguard 混淆器属性文件。在这里:

    proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt
    

    您的代码将被进一步混淆,但不是全部。例如,您在清单文件中声明或在 Proguard 中使用 -keep 指令声明的活动、服务、Java 类将不会被完全混淆。

    附带说明:即使您使用商业广告 DexGuard,您仍然不能 100% 防止反编译。经验丰富的黑客可以使用 smali/baksmali 技术对您的代码进行逆向工程、阅读、随意修改。请记住,如果代码可以读取为 0 和 1,则可能会被黑客入侵。

    【讨论】:

      【解决方案2】:

      这是否发生在您以发布模式构建应用程序并使用有效证书和 Eclipse 中的导出向导导出它之后?如果没有 - 执行以下步骤:右键单击您的项目,选择“导出”,输入“导出 android 应用程序”,下一步,然后选择“使用现有密钥库”或“创建新密钥库”,完成向导。 ProGuard 仅在您以发布模式构建应用程序时运行。

      【讨论】:

      • 是的。这发生在我以发布模式(使用密钥库)构建应用程序之后
      【解决方案3】:

      没有办法防止类和资源的反编译。混淆,例如 proguard,是通过名称修改、字符串修改和流控制更改来使 java 逆向工程更加困难的工具。尽管如前所述,一切都可以进行逆向工程。混淆用于提高进入门槛,并阻止人们由于工作量而想要对您的代码进行逆向工程。

      【讨论】:

      • 我的目的不是阻止我的 apk 被完全逆向工程。我知道完全避免代码提取是不可能的。我只是想确保代码不可用 - 目前,当我尝试对我的 apk 进行逆向工程时,我能够按原样获取所有类和资源(具有相同的类、变量名)。并且即使我取消了 proguard 属性的注释
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2016-11-08
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多