Android代碼混淆防反編譯解決方案研究,android反編譯
做Android開發的都知道要做混淆去防apk被反編譯、破解,通過proguard進行Java代碼混淆。但是,Android代碼混淆真的能起到實質性的作用嗎?看下面分析
1、Android代碼混淆
如,對Android 代碼進行混淆後混淆器將代碼中的所有變數、函數、類的名稱加密為簡短的英文字母代號,在APP被破解後增加破解者對代碼的閱讀難度。
但是混淆的功效只能運作在APP已經被破解後,而且只是增加破解者的難度時間,對其防止破解的作用意義不是很大。
那麼,Android代碼混淆不能從根本上防破解,還有什麼方法呢?接下來看:
2、反工具破解之偽加密
偽加密是Android4.2.x系統發布前最流行的加密方式之一,通過java代碼對APK(壓縮檔)進行偽加密,其修改原理是修改連續4位位元組標記為”P K 01 02”的後第5位位元組,奇數表示不加密偶數表示加密。偽加密後的APK不但可以防止PC端對它的解壓和查看也同樣能防止反編譯工具編譯。
但是偽加密對其APK加密後市場也無法對其進行安全檢測,部分市場會拒絕這類APK上傳市場。偽加密的加密方式和解密方式也早已公布導致它的安全程度也大大降低。Android4.2.x系統無法安裝偽加密的APK。
從上可看,Android代碼混淆確實不如偽加密。但是Android代碼混淆、偽加密也不是最靠譜的方法。接下來繼續看。
3、反工具破解之APK壓縮檔破解
APK在PC上面可以看作一個壓縮檔,在Android系統裡面它就是一個手機系統軟體檔案。Android系統對APK的識別是從標誌頭到標誌尾,其他多餘資料都會無視。所以說在標誌尾添加其他資料對把APK看做壓縮檔的PC端來說這個檔案被破壞了,所以你要對其進行解壓或者查看都會提示檔案已損壞,用反編譯工具也會提示檔案已損壞,但是它卻不會影響在Android系統裡面的正常運行和安裝而且也能相容到所有系統。
但是這種APK壓縮包破壞存在APK偽加密一樣的問題,個別市場會不能識別導致不能上傳市場。使用壓縮檔修複工具也能把它修複好讓我們做的保護消失。
三個分析,Android代碼混淆、偽加密、壓縮檔破解等均無法從根本上解決Android代碼混淆防反編譯、破解的問題。那麼,我們繼續探討。
4、使用第三方平台加密
Google對Android APP的安全處理是給APK簡單加密、java層源碼加殼保護,對核心so庫、資源檔、主配檔案、第三方jar包卻沒有任何保護處理。所做的保護也早已被駭客攻破但並沒有做任何升級維護導致Android APP現在沒有任何安全性。
拿行動裝置 App安全行業的第三方平台——“愛加密”來說,在Android代碼混淆的基礎上,以源碼加殼保護、so庫核心代碼加殼保護、資源檔簽名保護、APK防二次打包保護等方面來對APK進行全方面保護。而且加密後的APP完全不會影響其運行效率和使用者體驗,相容性是最優的。
綜上所述,Android代碼只做混淆是不行不行的,要真正保護Android代碼的安全,還是要尋求更安全的加密保護技術!表只做Android代碼混淆啦!
Android怎代碼混淆,防止apk程式被反編譯
下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg檔案起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:view plain 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. -dontskipnonpubliclibraryclasses 4. -dontpreverify 5. -verbose 6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7. 8. -keep public class * extends android.app.Activity 9. -keep public class * extends android.app.Application 10. -keep public class * extends android.app.Service 11. -keep public class * extends android.content.BroadcastReceiver 12. -keep public class * extends android.content.ContentProvider 13. -keep public class * extends android.app.backup.BackupAgentHelper 14. -keep public class * extends android.preference.Preference 15. -keep public class com.android.vending.licensing.ILicensingService 16. 17. -keepclasseswithmembernames class * { 18. native <methods>; 19. } 20. 21. -keepclasseswithmembernames class * { 22. public <init>(android.content.Context, android.util.AttributeSet); 23. } 24. 25. -keepclasseswithmembernames class * { 26. public <init>(android.content.Context, android.util.AttributeSet, int); 27. } 28. 29. -keepclassmembers enum * { 30. public static **[] values(); 31. public static ** valueOf(java.lang.String); 32. } 33. 34. -keep class * implements android.os.Parcelable { 35. public static final android.os.Parcelable$Creator *; 36. } 從指令碼中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以......餘下全文>>
Android怎代碼混淆,防止apk程式被反編譯
下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg檔案起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:view plain 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. -dontskipnonpubliclibraryclasses 4. -dontpreverify 5. -verbose 6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7. 8. -keep public class * extends android.app.Activity 9. -keep public class * extends android.app.Application 10. -keep public class * extends android.app.Service 11. -keep public class * extends android.content.BroadcastReceiver 12. -keep public class * extends android.content.ContentProvider 13. -keep public class * extends android.app.backup.BackupAgentHelper 14. -keep public class * extends android.preference.Preference 15. -keep public class com.android.vending.licensing.ILicensingService 16. 17. -keepclasseswithmembernames class * { 18. native <methods>; 19. } 20. 21. -keepclasseswithmembernames class * { 22. public <init>(android.content.Context, android.util.AttributeSet); 23. } 24. 25. -keepclasseswithmembernames class * { 26. public <init>(android.content.Context, android.util.AttributeSet, int); 27. } 28. 29. -keepclassmembers enum * { 30. public static **[] values(); 31. public static ** valueOf(java.lang.String); 32. } 33. 34. -keep class * implements android.os.Parcelable { 35. public static final android.os.Parcelable$Creator *; 36. } 從指令碼中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以......餘下全文>>