apk加固

  android应用版本在发布时,为了防止反编译,需要对应用加固,目前常用的反编译工具为:

1、apktool

    主要用于资源文件的获取,  常用的为:java -jar apktool_2.4.0.jar d app-debug.apk -o dir

2、dex2jar

      将apk中的dex文件编译成jar文件。常用的为:d2j-dex2jar.bat app-debug.apk -o app-debug.jar

3、jd-gui

        查看反编译后的jar中的class

4、jadx

    直接查看资源与代码

5、enjarify

    将apk反编译成java源码 如:enjarify *.apk -o out.jar

由于那么多的反编译工具, 结合目前情况, 我总结apk加固的策略, 本人对于apk加固的重点在两个放的,第一 、Proguard 配置 第二、dex加密

Proguard的使用与配置

    Proguard是一个代码优化和混淆工具。能够提供对Java类文件的压缩、优化、混淆,和预校验。压缩的步骤是检测并移除未使用的类、字段、方法和属性。优化的步骤是分析和优化方法的字节码。混淆的步骤是使用短的毫无意义的名称重命名剩余的类、字段和方法。压缩、优化、混淆使得代码更小,更高效。、

在项目中开启Proguard.在gradle中设置为

        buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

        debug {

            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }


下面是Proguard 一些配置:

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

-keep class com.dongnao.proxy.guard.test.Bug

(保护了类名)

-keep class com.dongnao.proxy.guard.test.Bug{

  public static void *();

}

(保护了 public static void的没有参数的函数)

-keep class com.dongnao.proxy.guard.test.Bug{

  *;

}

(保护所有)

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

-keepclassmembers

class com.dongnao.proxy.guard.test.Bug

(都被混淆了)

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

-keepclasseswithmembers class com.dongnao.proxy.guard.test.Bug

(保护类名,但是没指定成员,所以函数名被混淆)

-keepclasseswithmembers class  com.dongnao.proxy.guard.test.Bug{

native ;

}


dex加密

在考虑到app逆向问题dex加密处理是非常有必要的, 那么dex采用什么方式加密,加密之后怎么样打包在apk里, apk怎么样解析dex等一系列问题, 首先dex加密方式, 我这里采用AES,. 第二dex在什么时候加密, 加密如何打包进apk呢,要想解决这问题,就需要了解一下Dex文件加载过程: 

你可能感兴趣的:(apk加固)