⑴ 如何防止代碼被反編譯
由於apk是android虛擬機載入的,它有一定的規范,加密apk後Dalvik無法識別apk了。完全避免是不可能的,總有人能夠破解你的代碼。但是有幾種方式來提高被反編譯取代碼的難度。
1 關鍵代碼使用jni調用本地代碼,用c或者c++編寫,因此相對比較難於反編譯
2 混淆java代碼。混淆是不改變代碼邏輯的情況下,增加無用代碼,或者重命名,使反編譯後的源代碼難於看懂。 網上開源的java代碼混淆工具較多,一般是用ant的方式來編譯的。
1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse會通過此配置在工程目錄生成proguard.cfg文件
2 . 生成keystore (如已有可直接利用)
按照下面的命令行 在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下,輸入keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore
參數意義:-validity主要是證書的有效期,寫100000天;空格,退格鍵 都算密碼。
命令執行後會在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下生成 android.keystore文件。
3. 在Eclipce的操作
File -> Export -> Export Android Application -> Select project -> Using the existing keystore , and input password -> select the destination APK file
經過混淆後的源代碼,原先的類名和方法名會被類似a,b,c。。。的字元所替換,混淆的原理其實也就是類名和方法名的映射。
但4大組件並沒有混淆(所有在清單文件定義的組件不能被混淆),因為系統需要通過清單文件來查找和運行應用程序。
proguard.cfg 文件代碼解讀
-optimizationpasses 5 ->設置混淆的壓縮比率 0 ~ 7
-dontusemixedcaseclassnames -> Aa aA
- ->如果應用程序引入的有jar包,並且想混淆jar包裡面的class
-dontpreverify
-verbose ->混淆後生產映射文件 map 類名->轉化後類名的映射
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* ->混淆採用的演算法.
-keep public class * extends android.app.Activity ->所有activity的子類不要去混淆
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>; -> 所有native的方法不能去混淆.
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
-->某些構造方法不能去混淆
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * { -> 枚舉類不能去混淆.
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { -> aidl文件不能去混淆.
public static final android.os.Parcelable$Creator *;
}
⑵ android如何做到防止反編譯,保護自己的資源圖片拜託了各位謝謝
1.進行源碼保護檢測。檢測DEX文件保護,查看DEX文件是否做了保護,避免法分子反編譯得到程序源碼,從而杜絕惡意插入廣告、惡意植入扣費代碼等行為,保證用戶體驗以及APP的功能完整。2.源碼混淆保護檢測。該項目主要用來彌補程序開發人員利用混淆源碼做程序的漏洞,因為混淆源碼作為一種常見的基礎保護措施,並不嚴密,如果被專業人士利用,還是會造成相當程度的破壞。3.資源文件保護檢測。APP程序中的各種音頻、視頻、圖片、文字等文件資料如果缺乏有效的保護,很容易被惡意篡改、替換和盜竊。比如程序中的音頻格式或文字內容,如果被篡改,做成廣告畫面或違禁色情圖片等,也是對開發人員和用戶的權益侵害。4.Android主配文件保護檢測。該免費源碼檢測平台可以有效對Android主配置文件中的各個組件進行安全保護,預防其他人員在XML文件中插入代碼,破壞和盜取相關信息,篡改應用程序的功能設定。5.APK防二次打包保護檢測。二次打包就是程序人員對下載的程序進行解壓,刪除原有的簽名,自己設定一個簽名工具在安裝包上簽名,這是一種盜用行為,侵害了原版程序設計人員的權益和利益。通過免費檢測平台,可以有效查看安裝包簽名是否有過改動,可以有效防止二次打包的出現。6、so文件保護,防止APP應用被第三方修改打包。7.愛加密http://www.ijiami.cn/
⑶ android 怎麼防止dex反編譯
防止Android apk被反編譯的方法:
1、判斷apk簽名是否與原版簽名是否一致。
2、代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂。
3、使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用。
⑷ Android APP的破解技術有哪些如何防止反編譯
Android APP破解主要依靠利用現有的各種工具,如下:
1)APKtool
2)dex2jar
3)jd-gui
4)簽名工具
防止反編譯,介紹一種有效對抗native層代碼分析的方法——代碼混淆技術。
代碼混淆的學術定義如下:
代碼混淆(code obfuscation)是指將計算機程序的代碼,轉換成一種功能上等價,所謂功能上的等價是指其在變換前後功能相同或相近。其解釋如下:程序P經過混淆變換為P『,若P沒有結束或錯誤結束,那麼P』也不能結束或錯誤結束;而且P『程序的結果應與程序P具有相同的輸出。否則P』不是P的有效的混淆。
目前對於混淆的分類,普遍是以Collberg 的理論為基礎,分為布局混淆(layout obfuscation)、數據混淆(data obfuscation)、控制混淆(control obfuscation)和預防混淆(preventive obfuscation)這四種類型。
騰訊御安全保護方案提供了以上所述四種混淆分類的多維度的保護,布局混淆方面,御安全提供了針對native代碼層中的函數名進行了混淆刪除調試信息等功能;數據混淆方面,御安全提供了針對常量字元串加密及全局變數的混淆的功能;控制混淆方面,御安全針對代碼流程上,提供了扁平化,插入bogus 分支以及代碼等價變換等功能;預防混淆方面,御安全在混淆過程中加入了針對主流反編譯器的預防混淆的代碼,能夠有效地抵抗其分析。御安全還對應用開發者提供不同等級的保護力度及多種混淆方式的功能的選擇,用戶可以根據自己的需求定製不同的混淆功能保護。
同時,御安全保護方案除了提供代碼混淆保護方面的技術,還提供代碼虛擬化技術及反逆向、反調試等其他安全保護方案,綜合使用多種保護方案可以有效地提高代碼安全。
⑸ Android APP的破解技術有哪些如何防止反編譯
由於Android系統的開放性,導致Android APK很容易被他人破解或是反編譯,下面給大家介紹常用的APP破解工具和技術要求。同時根據自己以往的防破解經驗,跟大家分析下如何防止反編譯。
Android APK運行環境依賴的文件/文件夾 res、DEX、主配文件Lib 只是簡單的加密甚至沒有任何保護措施。APKtool(一種反編譯工具)可輕易將其輕松破解,再配合其他各種工具基本可以做到:源碼暴露(代碼混淆也幾乎起不到任何安全作用)、資源文件裸奔、主配文件可任意修改、核心SO庫暴露、暴力破解惡意利用等。部分大公司會對其應用APK包進行防二次打包和防APKtool破解,但其代碼都是寫在JAVA層,另外APKtool的可升級導致其安全保護級別也是非常低的。
⑹ Android濡備綍浠g爜娣鋒穯錛岄槻姝apk紼嬪簭琚鍙嶇紪璇
涓嬮潰鍏蜂綋璇翠竴璇存庝箞鏍瘋㏒DK2.3涓嬬殑proguard.cfg鏂囦歡璧蜂綔鐢錛屽厛鏉ョ湅鐪媋ndroid-sdk-windows\tools\lib\proguard.cfg鐨勫唴瀹癸細view plain 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. - 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銆丼ervice銆丄pplication銆丅roadcastReceiver銆丆ontentProvider絳夊熀鏈緇勪歡浠ュ強com.android.vending.licensing.ILicensingService錛 騫朵繚鐣欎簡鎵鏈夌殑Native鍙橀噺鍚嶅強綾誨悕錛屾墍鏈夌被涓閮ㄥ垎浠ヨ懼畾浜嗗滻瀹氬弬鏁版牸寮忕殑鏋勯犲嚱鏁幫紝鏋氫婦絳夌瓑銆) 璁﹑roguard.cfg璧蜂綔鐢ㄧ殑鍋氭硶寰堢畝鍗曪紝灝辨槸鍦╡clipse鑷鍔ㄧ敓鎴愮殑default.properties鏂囦歡涓鍔犱笂涓鍙モ減roguard.config=proguard.cfg鈥濆氨鍙浠ヤ簡 瀹屾暣鐨刣efault.properties鏂囦歡搴旇ュ備笅錛歷iew plain 1. # This file is automatically generated by Android Tools. 2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3. # 4. # This file must be checked in Version Control Systems. 5. # 6. # To customize properties used by the Ant build system use, 7. # "build.properties", and override values to adapt the script to your 8. # project structure. 9. 10. # Project target. 11. target=android-9 12. proguardproguard.config=proguard.cfg 澶у姛鍛婃垚錛屾e父鐨勭紪璇戠懼悕鍚庡氨鍙浠ラ槻姝浠g爜琚鍙嶇紪璇戜簡銆