Android apk安全 反編譯及防反編譯 簡單記錄

反編譯及防反編譯


        自己辛辛苦苦寫的軟件發現被別的無良程序員copy,更可恨的是還發布到市場,讓自己的勞動成果及產品受到莫名的傷害,很可恥,so,我們還是先學習下反編譯的原理,分析下如何才能防止別人反編譯自己的軟件。

一、如何反編譯?


一、下載apktool,反編譯資源文件,可以獲得項目各個dpi圖片,及媒體文件,可看到AndroidManifest.xml配置文件

        1、下載地址http://code.google.com/p/android-apktool/downloads/list,下載apktool1.5.2.tar.bz2,apktool-install-linux-r05-ibot.tar.bz2

        2、apktool1.5.2.tar.bz2存放的是apktool.jar源碼,把源碼放入解壓後的apktool-install-linux-r05-ibot.tar.bz2中,此時該文件夾包括apktool.jar,aapt,apktool

        3、./apktool d xxx.apk,生成以下:
        AndroidManifest.xml apktool.yml assets lib res smali


二、下載dex2jar,反編譯java代碼

        1、下載地址:http://code.google.com/p/dex2jar/downloads/list

        2、./dex2jar.sh classes.dex(原apk中的文件),生成classes_dex2jar.jar


三、下載jd-gui  , 如何代碼未保護,可以看到完完整整的java源代碼

        1、下載地址:http://jd.benow.ca/
        2、./jd-gui 打開後導入classes_dex2jar.jar,然後保存源文件   

反編譯工具打包下載(解壓密碼:android):

http://download.csdn.net/detail/chang_xing/7140825


二、如何防止別人反編譯呢 ?


一、利用android官方給出的方法,代碼混淆。(主要用到兩個文件project.properties和proguard-project.txt

1、在項目下project.properties文件中做以下修改

    # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

2、修改後編譯發佈後,利用上面步驟反編譯apk查看,發現項目下全面文件都被混淆了


       怎麼配置項目混淆度呢?用的了proguard-project.txt在老版本中,創建項目的時候,會給出proguard.cfg,但是在的新版中創建項目則不會有任何提示。這個時候需要只要將proguard.cfg的內容加入到proguard-project.txt中,再根據自己的需要進行編輯即可)。

如下作用:

      從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService,

並保留了所有的Native變量名及類名,所有類中部分以設定了固定參數格式的構造函數,枚舉等等。(詳細信息請參考<proguard_path>/examples中的例子及註釋。)


    -optimizationpasses 5  
    -dontusemixedcaseclassnames  
    -dontskipnonpubliclibraryclasses  
    -dontpreverify  
    -verbose  
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
      
    -keep public class * extends android.app.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>;  
    }  
      
    -keepclasseswithmembernames class * {  
        public <init>(android.content.Context, android.util.AttributeSet);  
    }  
      
    -keepclasseswithmembernames class * {  
        public <init>(android.content.Context, android.util.AttributeSet, int);  
    }  
      
    -keepclassmembers enum * {  
        public static **[] values();  
        public static ** valueOf(java.lang.String);  
    }  
      
    -keep class * implements android.os.Parcelable {  
      public static final android.os.Parcelable$Creator *;  
    }  







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章