2013-08-16 48 views
0

我知道在Proguard中,建議您保留R內部類的字段名稱,如ID。因爲ProGuard不處理佈局xml文件。你將最終損壞的鏈接模糊R.id類有或沒有proguard

但有遠通過其他手段來混淆類,如R $ ID,即使它涉及它傳遞給ProGuard的前這樣做,通過螞蟻。

我問這個,因爲如果你有一個按鈕,一個id btnSaveArticle,黑客就變得太容易掌握什麼樣的代碼周圍被看名字做。

是否有可能將所有源代碼(包括資源文件)複製到另一個文件夾,並使用ant來運行regex來更改R.ids的名稱以及更改它們在佈局xml文件中出現的位置,然後以某種方式運行生成重新創建R類?

或者你可以創建翻譯類如TR然後在R.class

例如,它映射到田間地頭。

TR.btnSaveArticle = R.id.DHTXM; 

其中DHTXM的含義較少,可以在佈局XML中使用。但是在代碼中你總是提到TR.btnSaveArticle,它會被proguard混淆。

有沒有辦法做到這一點,還是我在浪費時間?

回答

0

它可以通過Ant,因爲它允許你設置一個不同的gen和res文件夾。

所以,你要做的就是從原稿到這些文件夾的副本,然後你使用正則表達式來更新到新名稱中編輯文件。

您將需要一個翻譯類(如d)像這樣把它映射到R.class領域,所以在你的代碼可以與非混淆名稱的工作。

public final class D{ 
    public static final class id{ 
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 

然後您還需要創建一個不同的src文件夾並從原始文件夾中複製。在那裏,你運行一個任務來編輯d類,所以它成爲

D.btnSaveArticle = R.id.DHTXM; 

我不得不創建它是通過螞蟻跑到名交換到混淆名稱的Java程序。

如果你做字符串類似的東西,和樣式您在APK XML將最終看起來像這樣:

<TextView 
     android:id="@+id/GnvCMa" 
     android:text="@string/OVuCbd" 
     style="@style/ZOVkuu.MGTRgZ" /> 

這是一個有點耗費時間的設置,但一旦實現了它可以用於其他的項目。

2

我這樣問,因爲如果你有一個ID爲btnSaveArticle的按鈕,對於一個黑客來說,通過查看名字就很容易掌握周圍的代碼。

使用層次結構視圖,無論您命名什麼,只需少於30秒即可確定「保存文章」按鈕的實際ID。我可以用一些定製工具設想更快的解決方案。

我在浪費我的時間?

恕我直言,是的。

+0

如果你有相當多的管制,這需要時間去身影所有。看到所有混淆名稱的源文件會讓偶然的黑客不願意破解。我明白你的意思,但我仍然無法理解黑客可以獲得Android應用程序的全部源代碼的事實。 – pt123

+0

@ p123:「如果你有很多控制,就需要花時間去考慮所有這些控制因素 - 」在你自己的承認中,他們不需要「把所有這些控制」,只有像「保存文章「,這些內容與他們試圖對您的應用執行的任何操作相關。 「看到一個包含所有混淆名稱的源文件會讓偶然的黑客不願意破解」 - 僅僅是愚蠢的黑客。 – CommonsWare

+0

@ pt123:「我仍然無法理解黑客可以獲得Android應用程序的全部源代碼」 - 他們可以獲取大多數客戶端應用程序的「完整源代碼」大多數操作系統。不可否認,像Java這樣的基於字節碼的語言往往比本地指令更易於反編譯。如果您擔心客戶端應用程序的安全性,那麼只需編寫服務器端應用程序(不過,請注意瀏覽器中的煩人JavaScript!)。 – CommonsWare

0

使用Android的默認配置,ProGuard會完全刪除R類,除非您的代碼對它們進行反省。在後一種情況下,ProGuard還將原始名稱保留在字段中,以免打破內省。

話雖這麼說,資源名稱,也可以從資源XML文件,它的ProGuard離開不變檢索。

+0

但爲什麼$ R.id字段出現在seeds.txt列表中,我沒有使用自省,所以調用findViewByID(R.id.btnSave)會發生什麼情況,proguard會用整數替換它,例如, findViewByID(134234323) – pt123

0

只需要用下面,把它添加到您的ProGuard配置文件

-keepclassmembers class **.R$* { 
public static <fields>;} 
相關問題