2012-03-15 163 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版本的同一類的多個實現的庫。