泉贸软件工作室原创、原帖地址: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 App的apk档案,接著使用「dex2jar」来将它转为jar档。
https://code.google.com/p/dex2jar/
dex2jar在命令列下使用,命令格式如下:
d2j-dex2jar.sh apk路径
执行命令后,稍等一下子,jar档案就产生出来了。
接著再依照这篇文章来反编译jar档案。
反编译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之后,往后使用Android的Export工具来输出专案,都会自动把程式码给混淆。无须再进行而外的动作。
由于有些程式是不可以被混淆的,例如有使用到「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
混淆后的程式码,如果被反编译,就没什麽人看得懂啦!
原文地址:http://liquan165.blog.51cto.com/1591833/1674981