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路径

 

Android 反编译与防止被反编译

执行命令后,稍等一下子,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