Android反编译与防止被反编译
泉贸软件工作室原创、原帖地址: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路径
执行命令后,稍等一下子,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反编译与防止被反编译
文章地址:http://pwwzsj.com/article/jcegeh.html