【问题标题】:Proguard not obfuscating Android appsProguard 不会混淆 Android 应用程序
【发布时间】:2012-09-04 16:27:52
【问题描述】:

根据此链接: http://developer.android.com/guide/developing/tools/proguard.html,他们说:

ProGuard 使您的应用程序更难进行逆向工程,当您的应用程序使用对安全性敏感的功能时(例如在您为应用程序授权时),使用它很重要。

但事实并非如此!我正在使用 ADT 17 预览版 4 中包含的最新 Proguard (4.7)。我在导出我的应用程序时使用 proguard,方法是添加

proguard.config=proguard-android.txt

进入我的 project.properties(proguard-android.txt 只是 ADT 17 中包含的默认设置)。

但我可以轻松地对我的 apk 进行逆向工程,使用以下步骤将其恢复为原始代码:

  1. 使用 apk-tool 提取 apk。

  2. 使用smali 将 .smali 文件转换为 .dex(您将 smali 指向包含 .smali 文件的文件夹,通常位于 /src/com/[companyname]/[appname ])

  3. 使用 dex2jar 将生成的 .dex 文件转换为 .jar

  4. 使用 jd-gui 查看生成的 .jar 文件

所以我的问题是:我做错了什么吗?还是 proguard 在混淆代码方面完全没用?

【问题讨论】:

  • 它只是说逆向工程更难,但像你所做的那样去做也不是不可能的。我看到人们主要使用它来减少代码大小。
  • 哈哈我很想知道他们对“简单”的定义。任何应用程序都可以通过 4 个命令进行逆向工程!我可以训练一只猴子来做到这一点。
  • 澄清一下,您在jd-gui 中看到了什么,您希望看到什么?您是否看到原始代码大致类似于您如何编译它?您是否在方法等中看到了原始变量名称?
  • @Logan:它会改变变量、方法和一些类名(除了活动名、服务名......)吗? Proguard 只做:收缩、优化和混淆(混淆意味着重命名变量和方法……)

标签: java android proguard


【解决方案1】:

如果您使用的是 android.support.* 兼容性库,这可能是问题的根源。 将以下行添加到您的 proguard 配置文件中:

-dontwarn android.support.**
-keep class android.support.** { *; }

诊断 proguard 问题的最简单方法是使用 apache ant 构建应用程序。您将在 stderr 中看到所有警告和错误。

这适用于所有使用动态类加载、反射和依赖于 API 版本的同一类的多个实现的库。

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多