zoukankan      html  css  js  c++  java
  • 防止反编译

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

    Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

    proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

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

    1. -optimizationpasses 5  
    2. -dontusemixedcaseclassnames  
    3. -dontskipnonpubliclibraryclasses  
    4. -dontpreverify  
    5. -verbose  
    6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
    7.   
    8. -keep public class * extends android.app.Activity  
    9. -keep public class * extends android.app.Application  
    10. -keep public class * extends android.app.Service  
    11. -keep public class * extends android.content.BroadcastReceiver  
    12. -keep public class * extends android.content.ContentProvider  
    13. -keep public class * extends android.app.backup.BackupAgentHelper  
    14. -keep public class * extends android.preference.Preference  
    15. -keep public class com.android.vending.licensing.ILicensingService  
    16.   
    17. -keepclasseswithmembernames class * {  
    18.     native <methods>;  
    19. }  
    20.   
    21. -keepclasseswithmembernames class * {  
    22.     public <init>(android.content.Context, android.util.AttributeSet);  
    23. }  
    24.   
    25. -keepclasseswithmembernames class * {  
    26.     public <init>(android.content.Context, android.util.AttributeSet, int);  
    27. }  
    28.   
    29. -keepclassmembers enum * {  
    30.     public static **[] values();  
    31.     public static ** valueOf(java.lang.String);  
    32. }  
    33.   
    34. -keep class * implements android.os.Parcelable {  
    35.   public static final android.os.Parcelable$Creator *;  
    36. }  

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

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

    让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的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.   
    10. # Project target.  
    11. target=android-9  
    12. proguard.config=proguard.cfg  

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

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/jackrex/p/3001357.html
Copyright © 2011-2022 走看看