zoukankan      html  css  js  c++  java
  • Android安全-代码安全1-ProGuard混淆处理

      Android安全-代码安全1-ProGuard混淆处理

    ProGuard简介

    ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:http://proguard.sourceforge.net/。

    Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。

    Android Eclipse开发环境与ProGuard

    在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt。

    如果需要对项目进行全局混码,只需要进行一步操作:

    将project.properties的中

    “#  proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。


    如 果有一些代码不能被混淆,比如需要加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。在导出的时候,可能不会报错。但 是在手机上运行的时候,需要调用so文件的时候,就会报某某方法无法找到。这个时候就需要用到proguard-project.txt。


    在老版本中,创建项目的时候,会给出proguard.cfg,但是在的新版中创建项目则不会有任何提示。这个时候需要只要将proguard.cfg的内容加入到proguard-project.txt中,再根据自己的需要进行编辑即可。

     

    在Android 2.3以前,混淆Android代码只能手动添加proguard来实现代码混淆,非常不方便。而2.3以后,Google已经将这个工具加入到了SDK 的工具集里。具体路径:SDK oolsproguard。当创建一个新的Android工程时,在工程目录的根路径下,会出现一个proguard 的配置文件proguard.cfg。也就是说,我们可以通过简单的配置,在我们的elipse工程中直接使用ProGuard混淆Android工程。

    具体混淆的步骤非常简单。首先,我们需要在工程描述文件default.properties中,添加一句话,启用ProGuard。如下所示:

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

    这样,Proguard就可以使用了。当我们正常通过Android Tools导出Application Package时,Proguard就会自动启用,优化混淆你的代码。

    导出成功后,你可以反编译看看混淆的效果。一些类名、方法名和变量名等,都变成了一些无意义的字母或者数字。证明混淆成功!

    附件:proguard.cfg 配置文件

    # -------------------------------------
    # android 原始混淆模板
    # -------------------------------------
     
    # ----------------------------------
    #  通过指定数量的优化能执行
    #  -optimizationpasses n
    # ----------------------------------
    -optimizationpasses 5
     
    # ----------------------------------
    #   混淆时不会产生形形色色的类名
    #   -dontusemixedcaseclassnames
    # ----------------------------------
    #-dontusemixedcaseclassnames
    # ----------------------------------
    #      指定不去忽略非公共的库类
    #  -dontskipnonpubliclibraryclasses
    # ----------------------------------
    #-dontskipnonpubliclibraryclasses
     
    # ----------------------------------
    #       不预校验
    #    -dontpreverify
    # ----------------------------------
    # -dontpreverify
     
    # ----------------------------------
    #      输出生成信息
    #       -verbose
    # ----------------------------------
    -verbose
     
    # ----------------------------------
    #        优化选项
    #   optimizations  {optimization_filter}
    # ----------------------------------
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
     
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class com.android.vending.licensing.ILicensingService
     
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    # -----------------
    # modify 修改合并
    # -----------------
    -keep public class * extends android.view.View {
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
        public void set*(...);
    }
     
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
     
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }
     
    #--------------------------
    # 保护类型   -keepattributes 说明
    # Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable,
    # LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations,
    # RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, and AnnotationDefault
    # --------------------
    -keepattributes **
    -libraryjars <java.home>/lib/rt.jar
     
    # ----------------------
    #  不压缩指定的文件
    #  -dontshrink
    # ----------------------
    -dontshrink
     
    # ----------------------
    #  不优化指定的文件
    #  -dontoptimize
    # -----------------------
    -dontoptimize
     
    # -----------------------
    #  不混淆指定的文件
    #  -dontobfuscate
    # -----------------------
     
    # ----- 混淆包路径 -------
    -repackageclasses ''
    -flattenpackagehierarchy ''
    -target 1.6
     
    # -------- 以下是使用了 roboguice-1.1.2.jar 以及 guice-2.0-no_app.jar 功能需要保护的字段及类相关 --------
    -keep class com.google.inject.Binder
    -keepclassmembers class * {
        @com.google.inject.Inject <init>(...);
    }
    -keepclassmembers class * {
        void *(**On*Event);
    }
    -keepclassmembers class **.R$* {
        public static <fields>;
    }
     
    # ------ 编译时需要用到的 jar 包
    -libraryjars D:/dev_rc/android-sdk-windows/add-ons/addon_google_apis_google_inc_11/libs/maps.jar
     
    # ------ 保护 谷歌第三方 jar 包,界面特效 ----------
    -keep class android.support.v4.**
    -dontwarn android.support.v4.**
     
    # ------ 保护百度地址jar包 --------
    -keep class com.baidu.mapapi.** { *; }
    -dontwarn com.baidu.mapapi.**
     
    # --- 打包时忽略以下类的警告 --
    -dontwarn com.classpackage.AA
     
    #-keepnames class * implements java.io.Serializable
    # ---------保护所有实体中的字段名称----------
    -keepclassmembers class * implements java.io.Serializable {
        <fields>;
    }
     
    # --------- 保护类中的所有方法名 ------------
    -keepclassmembers class * {
        public <methods>;
    }
  • 相关阅读:
    2009年放假时间安排
    省钱方便网上手机充话费
    为啥不能嵌入html?
    超出套餐流量的GPRS流量费竟然要贵100倍!怎么没有人管呢!这个价格怎么定的呢!
    2008汶川加油!2008中国加油!!
    thinkpad X200 破音特别厉害!郁闷啊!千万不要买水货!
    送走2008,迎接新的2009!
    "上海启明星电子商务有限公司"偷偷扣你的电话钱
    从公司到凯虹
    供应二级新疆细绒棉150吨
  • 原文地址:https://www.cnblogs.com/harry335/p/4805299.html
Copyright © 2011-2022 走看看