增强APP的安全性(二)

增强APP的安全性(二) –通过混淆

ProGuard的常用语法

  # 指定代码的压缩级别
  -optimizationpasses 5  
  # 是否使用大小写混合 混淆时不会产生形形色色的类名             
  -dontusemixedcaseclassnames 
  # 是否混淆第三方jar        
  -dontskipnonpubliclibraryclasses 
  # 混淆时是否做预校验   
  -dontpreverify    
  # 混淆时是否记录日志                  
  -verbose   
  # 不优化输入的类文件                         
  -dontoptimize     
  #不提示警告
 -dontwarn [class_filter]     
               
  #应用的依赖包,如android-support-v4
 -libraryjars class <path> 
 #不混淆某些类
 -keep [,modifier,...] class <specification> 
 #不混淆类的成员
 -keepclassmembers [,modifier,...] class <specification> 
 #不混淆类及其成员
 -keepclasseswithmembers [,modifier,...] class <specification> 
 #不混淆类及其成员名
 -keepnames class <specification> 
 #不混淆类的成员名
 -keepclassmembernames class <specification> 
 #不混淆类及其成员名
 -keepclasseswithmembernames class <specification> 
 #假设调用不产生任何影响,在proguard代码优化时会将该调用remove掉。如system.out.println和Log.v等等
 -assumenosideeffects class <specification> 

通配符

类名、成员函数名、和成员变量名可以试用一下通配符:
1) % :匹配任何原始类型,如 boolean 、 int 等,但不包括 void ;

2) ? :匹配一个任意字符,不包括句号;

3) * :匹配任意个任意字符,不包括句号;

4) ** :匹配任意个任意字符,包括句号;

5) * :匹配任意类型,包括原始类型和非原始类型,数组类型和非数组类型;

6) … :匹配任何数目个任何类型的参数。

关键字

  1. 在类名前、类中成员变量和成员函数名前,可以加上访问限定符(如 public 、 private 、 protected 等,修饰类、成员变量和成员函数的访问限定符各不相同)。如果加上了访问限定符后,就表示要匹配的类、成员变量或成员函数的定义中必须包含这些限定符。如果在限定符前面加上感叹号“ ! ”,则刚好相反,定义中必须不包含这些限定符

  2. extends 和 implements 表示限定类一定要扩展自一个指定类或者实现了一个指定接口类,这时候通常类名部分是一个星号。

示例

1.不混淆某个实体类或者某个包名下所有的类

#不混淆class com.test.Person这个类
-keep class com.test.Person {*;}
#不混淆class com.test这个包名下的所有类
-keep class com.test.** { *; }

2.不混淆类的成员

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

3不混淆类名及其成员

-keepclasseswithmembernames com.test.Person{
   public boolean *(java.lang.String,android.view.View);
}

# 保持该类名和native 方法不被混淆
-keepclasseswithmembernames class * {     
    native ;
}

在Android Studio中配置混淆文件


    buildTypes {
        release {
             ...
            // 移除无用的resource文件
            shrinkResources true
            zipAlignEnabled true
            //混淆
            minifyEnabled true
            #proguard-rules.pro就是你项目里的混淆配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ...
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章