2010-05-21 78 views
3

因此,我最近測試了反彙編我的一個android應用程序,並驚恐地發現代碼非常易讀。更糟糕的是,我所有的變量名都完好無損!我認爲這些會在編譯時被壓縮成不可讀的東西。該應用被觸發在一段時間後過期。但是,現在我發現名爲checkIfExpired()的函數並找到變量「expired」是微不足道的。有沒有什麼好辦法讓一個潛在的黑客與我的應用混淆?從反彙編程序保護我的應用程序安全

之前有人說明顯:是的,這是通過默默無聞的安全。但顯然這是我唯一的選擇,因爲用戶總是可以訪問我的所有代碼。這對所有應用程序都是一樣的。我關閉的細節不重要,關鍵是我不想讓反彙編人員去理解我所做的一些事情。

旁邊的問題:爲什麼變量名稱沒有壓縮?如果我停止使用真正長的變量名稱,我的程序運行速度會不會如我的習慣一樣?

+0

我不明白你如何設法反彙編dex文件到Java? – 2010-05-21 13:17:41

回答

3

混淆器是最好的解決方案。

這裏有一個我還沒有真正嘗試,但看起來很有希望: http://proguard.sourceforge.net/FAQ.html#android

的ProGuard是一個免費的Java類文件 收縮機,優化,混淆和預校驗 。它檢測並刪除 未使用的類,字段,方法和 屬性。它優化字節碼,並刪除未使用的指令。它 重命名其餘類,字段, 和使用短名義 名稱的方法。最後,它預先驗證了用於Java 6或Java Micro Edition的 已處理代碼。

+0

我真的要看看這個。如果堆棧軌跡的「去混淆」工作,那麼這可能就是它!你有任何使用android自己的經驗嗎? – pgsandstrom 2010-05-21 12:52:43

+0

不幸的是我沒有使用Proguard的經驗。但是,它們包含特定的Android示例。我期待着在本月底發佈我的下一個應用程序版本。 – 2010-05-21 12:56:44

0

Proguard幾乎是你需要的一切。
我將它用於我的所有應用程序,並且效果很好,可將應用程序大小減少約30%作爲副作用。
問題是,我不得不編寫自定義的bash構建腳本,因爲您無法將Proguard插入現有的Android Ant構建過程。可能應該得到一個博客並寫下它。 :)

+0

如果你這樣做,我會訂閱你的博客:) – 2010-05-21 18:32:07

+0

,我會成爲你的第二個訂戶:) – pgsandstrom 2010-05-21 18:54:18

+0

,我會是你的第三:) – 2011-02-28 10:42:47