2012-03-15 121 views
5

根据此链接: http://developer.android.com/guide/developing/tools/proguard.html,他们的状态:Proguard的不混淆Android应用

ProGuard的使您的应用程序更难进行逆向工程,重要的是你,当你的应用程序使用那些对敏感的特性使用是非常重要的安全性就像您正在授权您的应用程序一样。

但事实并非如此!我使用的是包含在ADT 17预览4.最新的Proguard的(4.7):我用proguard的同时,通过增加

proguard.config=proguard-android.txt 

进入我的project.properties(proguard的-android.txt出口我的应用程序仅仅是包括在默认设置在ADT 17中)。

但我可以很容易地逆向工程我的APK,将其返回到它使用这些步骤的原始代码:

  1. 使用APK-工具提取APK。

  2. 使用smali到.smali文件转换成一个.DEX(你点smali含有.smali文件夹,通常内部/ src目录/ COM/[公司名称]/[应用程序名称])

  3. 使用dex2jar所得到的.DEX文件转换成一个.jar

  4. 使用JD-GUI来查看生成的.jar文件

所以我的问题是: 难道我做错了什么?或者是proguard在混淆代码时完全没用?

+0

这只是说难以逆向工程,但要做到这一点并不是不可能,就像你所做的一样。我发现人们主要使用它来减少代码的大小。 – 2012-03-15 07:42:16

+0

哈哈然后我很想知道他们对“简单”的定义。任何应用程序都可以在4个命令中进行反向设计!我可以训练一只猴子来做那件事。 – 2012-03-15 11:49:08

+0

为了澄清,你在'jd-gui'中看到了什么,你期望看到什么?你能看到原始代码,粗略地说,你是如何编译它的?你在你的方法中看到了原始的变量名吗? – 2012-03-15 19:39:41

回答

1

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

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

诊断proguard相关问题最简单的办法是建立使用Apache Ant的应用程序。您会在stderr中看到所有警告和错误。

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