1. 程式人生 > >Android學習心得(13) --- Android代碼混淆(1)

Android學習心得(13) --- Android代碼混淆(1)

簽名 ref nes 三分 pen key this tool prop

我在博客上發表一些我的Android學習心得,希望對大家能有幫助。
這一篇我們講述一下最新的ADT環境下怎樣進行Android混淆


在新版本號的ADT創建項目時。混碼的文件不再是proguard.cfg。 
而是project.properties和proguard-project.txt。 
我們把之前配置都配置好了。proguard已經在包括在sdk中了。

環境配置參考 Android學習心得(1) --- MAC下Android環境的搭建

新建一個項目的時候,會自己主動生成project.properties和proguard-project.txt文件。 
無需自己新建,假設你的項目無法自己主動生成,那麽你就要檢查一下你的ADT版本號了 

技術分享

假設須要對項目進行全局混碼,僅僅須要進行一步操作:
將project.properties的中“#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”
把“#”去掉就能夠了。

技術分享
技術分享

 因為apk文件的混淆往往是伴隨著文件的壓縮和代碼的優化問題,混淆的apk文件解壓轉換為jar文件。 
 使用ju-gui打開以後有一個不太引人註意的細節問題---當中找不到資源文件類。

利用這一特性。我們能夠直接利用apktool解壓apk文件。對其smali文件的文件名稱進行分析。 假設存在一個或以上的資源的smali文件,就能夠證明該apk文件沒有混淆,反之。則說明已經是混淆過了的文件。 我們將沒有混淆和混淆過的apk分別使用Eclipse導出並簽名

參考Android學習心得(12) --- APK簽名keystore
技術分享

分別通過dex2jar和jd-gui查看源碼

技術分享
技術分享

明顯的發現,第二個顯示的源碼已經被混淆過了,產生了a,b,c三個類。R.class已經不見了。

另外一個明顯的差別是,混淆過後的apk大小是未混淆的apk三分之中的一個,代碼往往經過壓縮和優化。

技術分享

‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); });

    Android學習心得(13) --- Android代碼混淆(1)