Android如何防止apk程序被反编译-阿里云开发者社区

开发者社区> 长空翱翔> 正文

Android如何防止apk程序被反编译

简介: 转自博客: http://blog.csdn.net/ithomer/article/details/6727640#     作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
+关注继续查看

转自博客:

http://blog.csdn.net/ithomer/article/details/6727640#

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹。proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

    下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。
(详细信息请参考/examples中的例子及注释。)

    让proguard.cfg起作用的做法很简单,就是在eclipse自

  1. -optimizationpasses 5
  2. -dontusemixedcaseclassnames
  3. -dontskipnonpubliclibraryclasses
  4. -dontpreverify
  5. -verbose
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

  7. -keep public class * extends android.app.Activity
  8. -keep public class * extends android.app.Application
  9. -keep public class * extends android.app.Service
  10. -keep public class * extends android.content.BroadcastReceiver
  11. -keep public class * extends android.content.ContentProvider
  12. -keep public class * extends android.app.backup.BackupAgentHelper
  13. -keep public class * extends android.preference.Preference
  14. -keep public class com.android.vending.licensing.ILicensingService

  15. -keepclasseswithmembernames class * {
  16.     native methods>;
  17. }

  18. -keepclasseswithmembernames class * {
  19.     public init>(android.content.Context, android.util.AttributeSet);
  20. }

  21. -keepclasseswithmembernames class * {
  22.     public init>(android.content.Context, android.util.AttributeSet, int);
  23. }

  24. -keepclassmembers enum * {
  25.     public static **[] values();
  26.     public static ** valueOf(java.lang.String);
  27. }

  28. -keep class * implements android.os.Parcelable {
  29.   public static final android.os.Parcelable$Creator *;
  30. }


    动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

    完整的default.properties文件应该如下:

  1. # This file is automatically generated by Android Tools.
  2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
  3. #
  4. # This file must be checked in Version Control Systems.
  5. #
  6. # To customize properties used by the Ant build system use,
  7. # "build.properties", and override values to adapt the script to your
  8. # project structure.

  9. # Project target.
  10. target=android-9
  11. proguard.config=proguard.cfg

    大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

image


    如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
7435 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4622 0
《Java编码指南:编写安全可靠程序的75条建议》—— 指南5:防止任意文件上传
Java应用程序,包括Web应用程序,在接受文件上传的同时,必须确保攻击者不能上传或者传输恶意文件。如果被限制的文件中包含了可以在目标系统上执行的代码,那么应用程序层的防御将会受到威胁。例如,如果一个应用程序允许了HTML文件的上传,那么也就相当于间接允许了恶意代码的执行——攻击者可以提交一个有效的HTML文件,如果该文件包含了跨站脚本(XSS)攻击的代码片段,在程序缺乏输出过滤的情况下这些攻击脚本将会被有效执行。
1515 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
8268 0
Delphi单元文件之-防止程序重复执行
//工程引用此单元就能防止同时出现多个实例unit MultInst; interface uses Windows ,Messages, SysUtils, Classes, Forms; implementation const  STR_UNI...
676 0
+关注
长空翱翔
长期从事Windows和linux应用程序开发,系统开发,驱动程序开发以及基于.net平台的软件开发;擅长面向对象程序设计、数据库设计、应用与开发;
938
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载