【发布时间】: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 进行逆向工程,使用以下步骤将其恢复为原始代码:
-
使用 apk-tool 提取 apk。
-
使用smali 将 .smali 文件转换为 .dex(您将 smali 指向包含 .smali 文件的文件夹,通常位于 /src/com/[companyname]/[appname ])
-
使用 dex2jar 将生成的 .dex 文件转换为 .jar
-
使用 jd-gui 查看生成的 .jar 文件
所以我的问题是:我做错了什么吗?还是 proguard 在混淆代码方面完全没用?
【问题讨论】:
-
它只是说逆向工程更难,但像你所做的那样去做也不是不可能的。我看到人们主要使用它来减少代码大小。
-
哈哈我很想知道他们对“简单”的定义。任何应用程序都可以通过 4 个命令进行逆向工程!我可以训练一只猴子来做到这一点。
-
澄清一下,您在
jd-gui中看到了什么,您希望看到什么?您是否看到原始代码大致类似于您如何编译它?您是否在方法等中看到了原始变量名称? -
@Logan:它会改变变量、方法和一些类名(除了活动名、服务名......)吗? Proguard 只做:收缩、优化和混淆(混淆意味着重命名变量和方法……)