浅谈Android ProGuard代码混淆

本文目的:

当别人提到Android代码ProGuard混淆时候,或者说项目如何对抗反编译,自己大概心里有点数

请各位上车

Java代码是非常容易反编译的,下载好工具按照步骤就可以实现。为了保护好java源码,反编译之后让代码也不容易阅读,我们就需要对编译好的class文件进行混淆处理。

使用什么进行混淆?

Proguard是一个混淆代码的开源项目,主要作用是混淆,还可以对字节码进行缩减体积、优化等。

都有什么基本语法?

  • 保留类名
  • 保留方法名
  • 保留类名和方法名
    除了保留的这些,其他都是proguard需要混淆的地方!

都已经要混淆了,为什么还要保留类名或者方法名呢?

  • 让C/C++程序可以通过jni使用对应的java方法
  • 四大组件由于在清单文件中注册了,所以得保留
  • R文件混淆会导致引用错误

如何打开混淆?

build.gradle里面的minifyEnabled,如果为false不使用proguard混淆。如果是true使用proguard混淆。

混淆语法是写在哪个文件呢?

是写在proguard-android.txt 和 proguard-rules.pro文件中。

proguard可以去除Log!

我们在开发的时候,经常会打印一些log信息,但是等到apk发布运行的时候,就不希望有输出日志了。
如何解决这个问题呢?
我们可以自己写一个打印Log的工具类,每次准备打包升级时候,手动修改是否打印。或者删除项目中所有打印输出代码。
另外,我们也可以通过配置proguard,将android.util.Log的方法设置成无效。配置完之后,可以去除apk中打印日志的代码!!!反编译之后的效果就是,封装的log类和log输出的语句都会被去掉!!!

对抗android模拟器

当我们的apk处于一个被检测的状态的时候,大多是运行在模拟器上而不是真机上,所以我们可检测当前程序是否是运行在模拟器上,如果是的话就关闭当前程序或杀死当前程序进程。
如何检测呢?

  • 检测模拟器特有的几个文件
  • 检测模拟器默认的电话号码
  • 检测设备IDS是不是“00000000000000000”
  • 检测imsi id是不是“3102600000000000”
  • 检测手机上的一些硬件信息
  • 检测手机运营商家

对抗APK重打包?

反编译之后的代码,重新打包,需要重新签名才能够运行。也就是说这个时候的签名和原来的签名是不一致的。
我们可以判断一下,如果签名不一致,就退出程序或者杀死当前进程。

最后

ProGuard官网使用指导:http://proguard.sourceforge.net/
PS: 祝贺小恶魔第三次斩获艾美奖剧情类剧集最佳男配角!
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值