Android安全之如何反編譯與加密apk包

奧特曼超人發表於2017-02-15

apk包真的安全嗎?會被反編譯嗎?如何防止被反編譯?


相關文章:Android apk如何加固防止被破解(防止逆向編譯)

一、檢視APK包的原始碼
        dex2jar 這個工具用於將dex檔案轉換成jar檔案
        下載地址:http://sourceforge.net/projects/dex2jar/files/
        jd-gui 這個工具用於將jar檔案轉換成java程式碼
        下載地址:http://jd.benow.ca/

        1.解壓apk壓縮包,找到classes.dex.
        執行程式碼: d2j-dex2jar classes.dex
        2.然後使用jd-gui工具開啟classes-dex2jar.jar這個檔案就可以看到原始碼了

二、檢視和修改apk包資源
        apktool 解壓。
        apktool d dujinyang.apk編譯出來smail檔案,修改之後apktool b dujinyang -o KARL_dujinyang.apk把它編譯回去,當然,如果要正常使用的話要使用簽名。
        簽名使用:

 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名檔名 -storepass 簽名密碼 待簽名的APK檔名 簽名的別名 

        簽名之後才可以正常安裝到手機上的,當然,你可以優化下包,使用Zip對齊下,如果要深入的話,Zip還有其它用法。
語法:zipalign 4 KARL_dujinyang.apk KARL_dujinyang_ok.apk

三、如何混淆程式碼防止反編譯
        Eclipse的話可以通過Jocky外掛、project.properties檔案等
        Android Studio的話可以通過藉助SDK中自帶的Proguard工具,需要修改build.gradle中的一行配置即可。

release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile(`proguard-android.txt`), `proguard-rules.pro`
}

        並且還可以起到壓縮APK包的作用。

四、混淆sdk/Jar
        1.通過ClassLoader動態載入的方式進行加密。
        2.通過安卓sdk自帶/tools目錄下的proguard GUI進行配置,執行到最後一步即可。

五、加密apk
        1.通過動態載入時,加入自身加密演算法。
        2.通過第三方平臺進行加密,現在都比較穩定安全了。


相關文章