-
為什么要代碼混淆?
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)
- 首先,把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。
-
進入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文件
-
-keep classcom.baidu.mapapi.** { *; }
-
-keep classcom.google.protobuf.** { *; }
-
-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 ,測試通過