前言
反組譯的目的是在觀看別人所寫的程式碼, 但其意義其實並不大. 通常是想學習很深澳的演算法, 或者是查看程式碼裏的密碼, 流程之類的. 但了解別人程式碼邏輯所需花費的時間遠比自已撰寫還要多. 所以效益並不是很大.
而混淆的目的是希望別人不要隨便拿自己撰寫的程式碼複製貼上然後變成自己的原始碼. 但混淆並沒有網路上說的那麼神奇, 因為Java的混淆不會變成二進位碼 00110110之類的, 所以也只是防個君子而以
反組譯
1. 打開壓縮程式, 將apk解開, 再將classes.dex copy 出來
2. 下載dex2jar
a. 解開下載的檔案
b. copy classes.dex到解開的dex2jar目錄
c. 進入cmd 模式 : d2j-dex2jar.bat classes.dex
3. 下載 jd-gui
a. 解開jd-gui.zip
b. 開始jd-gui.exe
c. 開啟第2項 jar檔案
混淆
更改 build.gradle
請特別注意, 在開發sdk時, 也可以混淆, 但不可以使用shrinkResource
buildTypes {
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true //不適用於sdk開發
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
更改proguard-rules.pro
在此檔案加上相關設定. 請注意jtds(資料庫引擎)需設定如下
-dontwarn net.sourceforge.jtds.** -dontwarn com.mysql.** -keep public class com.mysql.** {*;} -ignorewarnings
SDK混淆
自行撰寫的sdk, 在進行混淆時, gradle僅需設定如下
buildTypes { release { minifyEnabled true zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
SDK之下的proguard-rules.pro檔案, 設定如下
-ignorewarnings
而在應用程式的專案中, proguard-rules.pro檔案需要忽略sdk的警告, 如下
-dontwarn com.asuscomm.mahaljsp.mahalsdk.**