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

來源:互聯網
上載者:User

反編譯及防反編譯


        自己辛辛苦苦寫的軟體發現被別的無良程式員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 *;      }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.