加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

请你吃一顿史上最全的Android混淆大餐

发布时间:2019-08-23 19:10:10 所属栏目:业界 来源:hardwork
导读:在 Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能。只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作。那么,混淆到底是什么?它的好处有哪些?具体效果如何?别急,下面我们来一一探索它的独特魅力

可以看到如上三个文件,而 proguardgui.sh 才是我们需要的 retrace 脚本(Windows系统下为 proguardgui.bat )。Windows 系统中只需要双击脚本 proguardgui.bat 即可运行,至于 Mac 系统,如果你没有做任何配置,只需要将 proguardgui.sh 脚本拖动到 Mac 自带的终端中,回车键即可运行。接着,我们会看到如下界面:

请你吃一顿史上最全的Android混淆大餐

选择 ReTrace 栏 ,并添加我们项目中混淆生成的 mapping.txt 文件所在位置,然后将我们的混淆后的崩溃信息复制到 Obfuscated stack trace 那一栏,点击 ReTrace! 按钮即可还原出我们的崩溃日志信息,结果如上图所示,我们之前的混淆日志:at com.moos.media.ui.ImageSelectActivity.k(ImageSelectActivity.kt:71) 被还原成了 at com.moos.media.ui.ImageSelectActivity.initView(ImageSelectActivity.kt:71)。ImageSelectActivity.k 是我们混淆后的方法名,ImageSelectActivity.initView 则是最初未混淆前的方法名,借助于 ReTrace 工具的帮助,我们就可以像以前一样很快定位到崩溃代码区域了。

通过 retrace 命令行

我们先要将崩溃信息复制到 txt 格式的文件(如:proguard_stacktrace.txt)中保存,然后执行以下命令即可(MAC系统):

  1. retrace.sh -verbose mapping.txt proguard_stacktrace.txt 

如果你是 windows 系统,可以执行以下命令:

  1. retrace.bat -verbose mapping.txt proguard_stacktrace.txt 

最终还原的结果和之前效果一样:

请你吃一顿史上最全的Android混淆大餐

也许你通过以上两种方式在对 stackTrace 进行恢复时,发现 Unknown Source 问题:

请你吃一顿史上最全的Android混淆大餐

值得注意的是,记得在混淆规则中加上如下配置来提升我们的 StackSource 查找效率:

  1. # 保留源文件名和具体代码行号 
  2. -keepattributes SourceFile,LineNumberTable 

此外,我们每次使用 ProGuard 创建发布构建时都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本时都必须小心地保存一个副本。通过为每个发布构建保留一个 mapping.txt 文件副本,我们就可以在用户提交的已混淆的 StackTrace 来对旧版本应用的问题进行调试和修复。

涨姿势的操作

经过上文的介绍,我们知道,APK 在经过代码混淆处理后,包名、类名、成员名被转化为无意义、难以理解的名称,增加反编译的成本。Android ProGuard 为我们提供了默认的"混淆字典",即将元素名称转为英文小写字母的形式。那么,我们可以定义自己的混淆字典吗?卖个关子,我们先来看一张效果图:

请你吃一顿史上最全的Android混淆大餐

这个波操作是不是有点"出类拔萃"了?哈哈,就不卖关子了,其实很简单,只要生成一套自己的 txt 格式的混淆字典,然后在混淆规则 Proguard-rules.pro 中应用一下即可:

请你吃一顿史上最全的Android混淆大餐

本文中使用的混淆字典可以在此处查看并下载

当然,大家也可以自己去定制化自己的"混淆字典",增加反编译的难度。

一路走下来,我们可以发现,从混淆技术的必要性和优点来看,它还是很值得我们去深入学习和研究的,本文带大家领略的仅仅是"冰山一角"。由于本人的技术水平有限,若大家发现有问题或者阐述不当之处,欢迎指出并修正。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读