2012-11-06 67 views
17

我想檢查DexGuard的工作原理,但似乎沒有免費的試用版。DexGuard如何加密類?

DexGuard可以加密Android應用程序嗎?或者它只是混淆了代碼? DexGuard加密如何工作?如果您可以提供反編譯之前和之後使用DexGuard運行的示例應用程序的代碼,那就太好了。

回答

50

ProGuard提供名稱混淆:它可以用短而無意義的名稱替換類,方法和字段的原始名稱。 DexGuard另外提供字符串加密和類加密。術語加密在這種情況下可能會令人困惑,因爲這些基本上是更加侵略性的混淆類型。指定的字符串和類以某種有意複雜的加密形式存儲,並在運行時用應用程序必需的密鑰和算法進行解密。在某些方面,Google Play市場可以加密Android 4.1的所有應用程序。然後,運行時環境以受控的方式在應用程序執行之前對應用程序進行解密。

(我的ProGuard和DexGuard的開發商 - 隨時取得聯繫,如果你有興趣)

+0

嗨!感謝您的回覆!是的,我對DexGuard中的加密定義感到困惑。基本上,我的理解是加密通過使用密鑰來轉換數據。但是,如果Android應用程序被加密,Dalvik將無法理解加密應用程序,因爲Dalvik不包含該應用程序的解密器。除非解密程序與密鑰一起附加在應用程序內部。這樣,在由Dalvik運行之前,該類將被應用程序本身解密。那是DexGuard的工作原理嗎? – Arci

+0

我可以使用DexGuard和Google Play的Android 4.1加密功能嗎?另外,是否推薦與Proguard一起使用DexGuard?我在Proguard的頁面上注意到DexGuard沒有預先驗證課程。如果我要使用DexGuard,我該如何預防這些課程?謝謝! :D – Arci

+2

正確。是的,從外部看,處理後的應用程序仍然看起來像其他任何應用程序; Google Play仍然可以對其進行加密。不,您不需要結合ProGuard和DexGuard,因爲DexGuard已經提供了ProGuard的功能。預先驗證僅適用於Java Micro Edition和Java 6,不適用於Android。 –

1

雖然他們使用的術語加密,它似乎真的很困惑。我這樣說只是因爲它們可能會加密某些字符串/值......加密密鑰也必須存儲在應用程序中的事實意味着它們爲代碼提供了「鎖定」,同時打包了「密鑰「 用它。

+3

Eric在上面的回答中確實表達了...... – Dori

2

DexGuard在舊版本中使用「DES」Alg來加密指定的類。後來它改變了「AES」alg。 加密指定類後,通過解密方式通過數據陣列格式將加密數據存儲到另一個類中。 Dex中的靜態塊解密方法是使用控制流混淆和API隱藏混淆的clinit格式方法。所以對解密方法進行反混淆是有點困難的。在其他類中,將指定的類更改引用到反射操作碼。每次運行APK時,加密的類將首先以靜態方法解密。解密後的類將使用反射API加載到dvm內存中。所以其他類可以正確引用指定的類。而已。在我看來,DexGuard是非常強大的混淆工具。如果每個功能模糊處理都適用於APK,則需要花費大量時間來翻轉整個真實節目。