zoukankan      html  css  js  c++  java
  • android 混淆基本知识

    官网介绍:https://www.guardsquare.com/en/proguard/manual/introduction

    android 开发文档:https://developer.android.com/studio/build/shrink-code.html

    1.混淆的基本原理

    android平台的混淆原理简单来说就是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来,别人很难弄懂代码的架构和具体意思。

    2.混淆步骤

      混淆过程:

    • 压缩(Shrink):侦测并移除代码中无用的类、字段、方法、和特性(Attribute)。
    • 优化(OPtimize):对字节码进行优化,移除无用指令。
    • 混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名。
    • 预检(Preveirfy): 在java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。。
    a.打开
    minifyEnabled  为true

    buildTypes {
    release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }

    b.android studio 中自定义文件
    sdk中tool里面proguard-android.txt

    在文件 工程appproguard-rules.pro中自定义。
    不混淆 ScrollView类中自定义的public print函数
    -keepclassmembers class com.example.zcx.democoderjoy.ScrollViewActi {
    public *;
    }
    效果:增加之前反编译:

    家之后效果:

    发现增加了print函数,并没有被混淆。

    常见的参数:

    -keep 指定类和类成员(变量和方法)不被混淆。

    -keepclassmembers 指定类成员不被混淆(就是-keep的缩小版,不管类名了)。

    -keepclasseswithmembers 指定类和类成员不被混淆,前提是指定的类成员存在

    -keep

    -keep public class * extends android.support.v4.**

    -keepclassmembers 

    -keepclassmembers class * extends android.app.Activity{

    public void *(android.view.View);

    }

    c.每次构建时 ProGuard 都会输出下列文件:

    dump.txt
    说明 APK 中所有类文件的内部结构。
    mapping.txt
    提供原始与混淆过的类、方法和字段名称之间的转换。
    seeds.txt
    列出未进行混淆的类和成员。
    usage.txt
    列出从 APK 移除的代码。

    这些文件保存在 <module-name>/build/outputs/mapping/release/ 中

    3.混淆优缺点

    混淆的优点主要两个:1.优化删除无用代码,减少apk的体积。2.混淆代码让其反编译之后,无法理解具体内容。

    缺点:调试不方便(可以使用mapping.txt),测试不充分可能导致部分功能不能使用。

     

    4.通用使用下面这些通配符来匹配:

    1) :匹配任何原始类型,如 boolean 、 int 等,但不包括 void 

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

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

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

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

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

     参考链接:http://www.chenglong.ren/2016/10/21/android%E4%B8%AD%E6%B7%B7%E6%B7%86%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/

  • 相关阅读:
    fixed与sticky的区别
    自我介绍以及web课程目标
    DOM&BOM
    web中常用单位的使用
    Oracle 使用 DBLINK详解(转载) 挪威
    Sql server 无法删除用户的处理办法(转载) 挪威
    ICMP类型
    makefile笔记
    [笔记]Makefile wildcard
    在Visual Studio 2005下配置WinPcap开发环境
  • 原文地址:https://www.cnblogs.com/zCoderJoy/p/6985408.html
Copyright © 2011-2022 走看看