【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )


更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage





一、Proguard 默认混淆结果



ProGuard 的默认混淆结果 , 就是没有 人为添加保留任何设置 , 使用的是 默认混淆文件 , 除了 MainActivity , 以及 MainActivity 中的 3 3 3 个内部类 , IdleHandler , Handler , Thread , 其余 Java 文件都被混淆 ;

在这里插入图片描述





二、-keepclassmembers 混淆效果



-keepclassmembers 作用只是保证类成员 ( 成员变量 , 成员方法 ) 不被混淆 , 类名还是会被混淆的 ;

# 指定 kim.hsl.handler.Handler 类成员不被混淆
-keepclassmembers  public class kim.hsl.handler.Handler

在编译后的结果中 , 类名与成员名称都被混淆了 , 因为没有配置不被混淆的成员 ;

在这里插入图片描述


使用 -keepclassmembers 指定保留 Handler 中的 public void *(*) 样式的方法不被混淆 ;

# 指定 kim.hsl.handler.Main 类成员不被混淆
-keepclassmembers class kim.hsl.handler.Handler{
    public void *(*);
}

下面是在一个被混淆的类中 , 找到了没有被混淆的 kim.hsl.handler.Handler 的成员方法 ;

在这里插入图片描述





二、-keepclasseswithmembernames 混淆效果



-keepclasseswithmembernames 与 -keep 作用类似 , 都可以保留 类名 与 成员 不被混淆 ,


-keepclasseswithmembernames 配置保留类名 : 下面的配置只会 保留类名 , 成员名会被混淆 ;

# 保留 kim.hsl.handler.Handler 类名 , 函数名会被混淆
-keepclasseswithmembernames class kim.hsl.handler.Handler

下面的混淆结果显示 , kim.hsl.handler.Handler 的类名被保留下来 , 成员被混淆 , 这是因为没有配置要保留的成员 ;

在这里插入图片描述


-keepclasseswithmembernames 配置保留类名 , 成员名 : 下面的配置 类名 与 成员名都会被保留 ;

# 保留 kim.hsl.handler.Handler 类名 , 成员名称
-keepclasseswithmembernames class kim.hsl.handler.Handler{
    *;
}

下图中展示了 , Handler 类中 , 类名 与 成员名称 都被保留下来 ;

在这里插入图片描述


-keepclasseswithmembernames 与 -keep 配置区别 : -keepclasseswithmembernames 中假如配置的 保留成员不存在 , 则该 混淆不生效 ;

# 保留 kim.hsl.handler.Handler native 方法名称
-keepclasseswithmembernames class kim.hsl.handler.Handler{
    native <methods>;----
}

没有找到 Handler 中的 native 方法 , 则整个 Handler 都不保留 , 类名 与 成员 都被混淆了 ;

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,Classes.dex是包含了Java字节码的文件,是应用程序的核心文件之一。如果这个文件被反编译,攻击者可以轻松地获取应用程序的核心代码和逻辑,从而进行恶意攻击。因此,加密混淆Classes.dex文件是非常必要的。 以下是一些常用的加密混淆Classes.dex文件的方法: 1. 使用ProGuard混淆ProGuard是一个开源的Java字节码混淆器,可以对Java字节码进行压缩、优化和混淆。它可以删除未使用的代码、重命名类、方法和属性名,并且可以将代码分成多个不同的文件。使用ProGuard混淆器可以有效地保护应用程序的代码不被反编译。 2. 使用DexGuard混淆DexGuard是一个专门为Android应用程序设计的混淆器,可以对Java字节码进行更加复杂的混淆加密。它可以使用高级的代码混淆加密技术,如字符串加密、类加密、方法加密、代码搬运、代码膨胀等等。使用DexGuard混淆器可以更加有效地保护应用程序的代码不被反编译。 3. 使用加密算法加密Classes.dex文件 可以使用加密算法对Classes.dex文件进行加密,可以使用对称加密算法或非对称加密算法。对称加密算法包括AES、DES、RC4等等,非对称加密算法包括RSA、DSA等等。加密后的Classes.dex文件只有在运行时才能被解密,可以有效地保护应用程序的代码不被反编译。 总之,加密混淆Classes.dex文件是非常必要的,可以有效地保护应用程序的核心代码和逻辑。使用ProGuard混淆器或DexGuard混淆器都可以实现代码混淆加密,同时可以使用加密算法加密Classes.dex文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值