Android 反編譯與防止被反編譯

來源:互聯網
上載者:User

標籤:android   google   工作室   java   開發   

泉貿軟體工作室原創、原帖地址:http://www.svch0st.com/cont.asp?id=38

Android App使用Java語言進行開發,因此十分容易就可以被反編譯出近乎原始的程式碼。也因為這個特性,許多人在寫Android App的時候會喜歡去反編譯別人寫好的程式,再挪為己用,雖然很不道德,但這也是一種有效提升軟體開發速度的方法。但換個角度想,如果是自己寫的程式碼被盜走的話,這就對自己不太有利了,所以學習如何防止自己程式碼被偷也是一個很重要的課題。 Android App的安裝檔案是副檔名為.apk的檔案,可以直接在Android環境下執行,將App安裝好。若要將App上架到Google Play上,必須要先將Android專案輸出成簽署(Signed)過的apk檔。再將這個apk檔案上傳到Google Play上發佈出去。將App上架後,其他使用者就可以透過Google Play直接安裝該App。 很明顯地,提供apk檔案給別人安裝App,是十分危險的事情,因為apk檔案只要經過簡單的步驟(之後會提到)就可以反編譯出原始的程式碼。但如果覺得將App上架到Google Play上就一定安全的話,那就大錯特錯了,因為從Google Play上安裝的App,也是有辦法拿到它的apk檔。

反編譯Android程式

首先要取得Android App的apk檔案,接著使用「dex2jar」來將它轉為jar檔。

https://code.google.com/p/dex2jar/

dex2jar在命令列下使用,命令格式如下:

 

d2j-dex2jar.sh apk路徑

 

650) this.width=650;" src="http://www.svch0st.com/up_files/2015714/2015714134928514926.png" width="650" style="border:none;padding:0px;margin:0px;vertical-align:top;" />

執行命令後,稍等一下子,jar檔案就產生出來了。

接著再依照這篇文章來反編譯jar檔案。

防止Android程式被反編譯

反編譯Android程式的方式可以不必學,但防止反編譯的方式一定要會!
Android ProGuard

Android SDK中提供了ProGuard來保護與最佳化Android App的安裝檔。身為一位稱職的Android程式設計師,在Android App發佈或是上架之前一定要使用ProGuard來保護程式碼,避免程式遭有心人士偷走。
啟用ProGuard

在Android專案根目錄下,有個「project.properties」檔案,找到以下字串,並移除掉前面的「#」,即可啟用ProGuard。

    #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

這行文字的意思是告訴Eclipse在編譯Android的時候使用proguard對程式碼進行混淆,並指定混淆的參數設定檔。預設的Android專案會在開頭加上「#」,表示此行文字為註解,也就是沒有開啟ProGuard。


使用ProGuard

 

啟用ProGuard之後,往後使用Android的Export工具來輸出專案,都會自動把程式碼給混淆。無須再進行而外的動作。


啟用ProGuard可能會遭遇的問題

 

由於有些程式是不可以被混淆的,例如有使用到「Class.forName」這類方法來呼叫的套件。可以藉由修改Android專案目錄下的ProGuard設定檔「proguard-project.txt」,加入-keep參數來保留指定的程式碼不被混淆。通常-dontwarn參數也會跟-keep合用,目的是要讓ProGuard不要去檢查指定Class下程式碼的錯誤(當然若有出現錯誤再加也不遲)。

有許多程式用了ProGuard之後會出現型別轉換錯誤,可以加上「-keepattributes Signature」參數,保留程式的簽名。

以下是proguard-project.txt的設定參考:

 

-keep class com.google.** { *; } -dontwarn com.google.** -keep class com.facebook.** { *; } -dontwarn com.facebook.** -keep class org.apache.** { *; } -dontwarn org.apache.**-keepattributes Signature

混淆後的程式碼,如果被反編譯,就沒什麽人看得懂啦!


Android 反編譯與防止被反編譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.