Android proguard代碼混淆


  1. 為什么要代碼混淆?

Android的安裝文件是apk格式。APK是AndroidPackage的縮寫。是由android sdk編譯的工程打包生成的安裝程序文件。

Apk其實是zip文件,但是后綴名被改成了.apk,通過解壓就可以看到其中的文件。

Classes.dex和AndroidManifest.xml都可以直接看見了。

Dex文件是DalvikVM executes的全稱,即Android Dalvik執行程序,並非Java ME的字節碼而是Dalvik字節碼。

先看看 AndroidManifest.xml,用記事本打開后發現是亂碼。再打開res文件夾下的layout的xml文件,發現也是亂碼。

再來看.dex文件,dex文件是可以轉化成jar文件的,而jar文件同樣是可以解壓打開的。

工具准備:

apk反編譯工具dex2jar,是將apk中的classes.dex轉化成jar文件

源碼查看工具jdgui,是一個反編譯工具,可以直接查看反編譯后的jar包源代碼

dex2jar 和 jdgui 最新版本下載,分別見google code:

dex2jar(google code)jdgui(google code)

  1. 首先,把dex轉化成jar文件

將classes.dex文件復制到dex2jar.bat所在文件夾(dex2jar-0.0.7-SNAPSHOT),在cmd下進入所在文件夾

進入cmd,進入所在盤符,比如輸入 d: ,然后回車

輸入cd和空格,然后把dex2jar-0.0.7-SNAPSHOT文件夾拖入黑框,回車即可

輸入命令:dex2jar.bat classes.dex 回車

同目錄下生成classes_dex2jar.jar。

  1. 進入jdgui文件夾雙擊jd-gui.exe,打開上面生成的jar包classes_dex2jar.jar,即可看到源代碼了

不混淆果然很可怕,代碼都被看光啦。。

二.Android代碼混淆過程

打開下的project.properties文件,

網上說的方法是,將proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt這行的注釋去掉,然后生成包就行。

但是我自己做的時候發現這樣是不行,我把這行代碼放到target=android-10之后然后再生成包即可完成混淆。

在項目文件夾下右鍵,android tools->export unsigned application package,即可生成未簽名的包。

類名和變量變成了a,b,c,d這種無法理解的名稱,保護了代碼的安全。

三.帶第三方lib的項目混淆過程

Arcgis for android項目代碼peoguard混淆 ,項目中包含第三方包和so文件

 

  1. -keep classcom.baidu.mapapi.** { *; }  
  2. -keep classcom.google.protobuf.** { *; }  
  3. -keep public class* extends com.google.protobuf.** { *; }  

使用eclipse的Android Tools導出Application Package時,Proguard就會自動啟用

Debug模式編譯,不會觸發ProGuard,因為它會使得調試更加復雜累贅。

 

四.反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件

如果是只是漢化軟件,這將特別有用。

首先還是下載工具,這次用到的是apktool

下載地址:http://code.google.com/p/android-apktool/downloads/list

下載:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載)

具體步驟:

將下載的兩個包解壓到同一個文件夾下,應該會有三個文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夾,輸入以下命令:apktool d C:\*.apk C:\*文件夾,如下圖:

 

命令行解釋:apktool   d   [apk文件 ]   [輸出文件夾]

反編譯的文件如下(AndroidManifest.xml為例):

特別注意:你要反編譯的文件一定要放在C盤的根目錄里

將反編譯完的文件重新打包成apk,很簡單,輸入apktool b c:\***文件夾(你編譯出來文件夾)即可,命令如下:

 

打包apk后的文件在目錄C:\HelloAndroid下,生成了兩個文件夾:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夾下,Ok

 

注:本android反編譯教程,是在Windows 7  Ultimate  64bit ,測試通過

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM