Android 反編譯與防止被反編譯


 使用Java語言進行開發,因此十分容易就可以被出近乎原始的程式碼。也因為這個特性,許多人在寫 的時候會喜歡去別人寫好的程式,再挪為己用,雖然很不道德,但這也是一種有效提升軟體開發速度的方法。但換個角度想,如果是自己寫的程式碼被盜走的話,這就對自己不太有利了,所以學習如何防止自己程式碼被偷也是一個很重要的課題。

 的安裝檔案是副檔名為.的檔案,可以直接在環境下執行,將安裝好。若要將到Google Play上,必須要先將專案輸出成簽署(Signed)過的檔。再將這個檔案上傳到Google Play上發佈出去。將後,其他使用者就可以透過Google Play直接安裝該

很明顯地,提供檔案給別人安裝,是十分危險的事情,因為檔案只要經過簡單的步驟(之後會提到)就可以出原始的程式碼。但如果覺得將到Google Play上就一定安全的話,那就大錯特錯了,因為從Google Play上安裝的App,也是有辦法拿到它的檔。

程式

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

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

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

d2j-dex2jar.sh 路徑

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

接著再依照這篇文章jar檔案。

防止程式被

程式的方式可以不必學,但的方式一定要會!

 ProGuard

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

啟用ProGuard

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

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

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

使用ProGuard

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

啟用ProGuard可能會遭遇的問題

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

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

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

1
2
3
4
5
6
7
8
9
-keep class com.google.** { *; }
-dontwarn com.google.**
 
-keep class com.facebook.** { *; }
-dontwarn com.facebook.**
 
-keep class org.apache.** { *; }
-dontwarn org.apache.**
-keepattributes Signature

後的程式碼,如果被,就沒什麼人看得懂啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值