2015年7月31日 星期五

[Android] 程式碼混淆(ProGuard)與反組譯

這裡會介紹如何反組譯APK,以及如何讓程式碼混淆(ProGuard)。

先談談反組譯APK好了,當你開開心心的使用原生語言(Java)完成你的Android App後,所產生的APK檔案,事實上有心人可以透過幾個工具讓他還原成可以看的懂的樣子。

這也是許多網站提供破解版,無廣告版的由來,反組譯後把廣告,收費的程式碼改掉後,再塞入他們自己的一些善意程式,像是偷聯絡資訊之類的。

使用dex2jar來反組譯apk,你可以到這個網站下載

隨便選一個連結來下載吧。



如果沒載錯,應該會有一個資料夾裡面裝了很多.sh .bat的檔案。

接著隨便找一個你想反組譯的apk,並且把他的副檔名改成.zip

解壓縮後複製裡面的classes.dex檔。



丟到我們剛才下載的dex2jar資料夾裡面。

開啟你的終端機,移動到dex2jar的資料夾裡面。

試著打一下指令。

MAC

./d2j-dex2jar.sh

Windows

d2j-jar2dex.bat

如果他跟你說權限不足,就輸入以下的指令修改權限

chmod a+x *.sh

把所有.sh的檔案權限都修改。

接著你應該可以使用它了,利用他把dex檔轉成Jar

MAC 

./d2j-dex2jar.sh classes.dex

Windows

d2j-jar2dex.bat classes.dex

你的資料夾內會多一個classes-dex2jar.jar的檔案,你可以使用這個工具來開啟它。























接著你就能看到這個Apk的程式碼了。

左邊是我原本專案的程式碼,右邊是反編譯解開後看到的程式碼。


連你implements哪些東西都看得見



那麼該怎麼辦呢,你可以做的其中一件事就是使用ProGuard。

點開你的bulid.gradle,把minifyEnabled改成true就可以了


再拿相同的檔案進行反組譯看看。

你會發現變數名稱,方法名稱,類別名稱都會變成比較難辨識的abcdef...


這樣雖然無法完全保護你的程式碼,只是讓破解變的稍微難一點,不過有做總比沒做好,你總不希望你的心血被人家偷過去吧。

沒有留言:

張貼留言