如何通过 Mapping 文件反混淆

本文详细介绍了如何通过 Mapping 文件进行反混淆,主要针对 Android 开发中的 Proguard 和 R8 编译器。内容包括 Mapping 文件的来源、用途、解析方法,以及与 Proguard 的区别。通过解析 Mapping,开发者可以更有效地追踪混淆后的 Crash 信息,提高问题定位效率。
摘要由CSDN通过智能技术生成

本文已同步到 如何通过 Mapping 文件反混淆 ,提供更好的阅读体验


写在前边

做过 Android 开发的应该或多或少都知道“混淆”这个技术点,它不仅可以帮助我们增加三方逆向的难度,还可以有效减少包体积,瘦身 APK

其实这些能力都来自于 Proguard 这个程序,Proguard 能利用字典文件,在编译时将我们的类名,方法名,字段名都替换掉,最后生成一份非常反人类的编译产物。Proguard 在每次运行时都会创建一个 mapping.txt 文件,其中列出了经过混淆处理的类、方法和字段名称与原始名称的映射关系。此映射文件还包含用于将行号映射回原始源文件行号的信息

这篇文章的目的就是要解析生成的 Mapping 文件

正文

Mapping 文件的来源与用途

以下就是 Mapping 文件的生成过程

在这里插入图片描述

这个 Mapping 文件是由 Proguard 程序自动生成的,会存放在 output 目录下,与 release 包放在一起。需要谨记的是,Mapping 文件可能在每次 Proguard 运行后都会不同,所以发布给用户的包一定要留存好 Mapping 文件,方便后续跟踪解决问题

了解 Mapping 文件的好处

了解 Mapping 文件最直观的好处在于我们跟踪线上的经过混淆之后的 Crash 信息时,可以从 Mapping 文件逆向推出原始的堆栈信息,更快更方便的定位问题,但不只这些,我们还可以通过 Mapping 文件处理内存快照文件 Hprof 的反混淆,处理 Systrace 的文件的反混淆,还有 Nanoscope 文件的反混淆等

如何解析 Mapping 文件

注意:Android 在新版中启用了 R8 编译器,没有使用 Proguard 工具,虽然兼容 Proguard 的配置和字典等,但是编译出来的 Mapping 文件格式还是有一点不同。我们会在最后一个小节讲一下其中的不同

下面我们详细来看 Mapping 文件的格式

classline
    fieldline *
    methodline *

Mapping 文件的正式部分由多个 Class 块组成,每个 Class 块中包含混淆前后的类信息,字段信息,方法信息。每个 Class 块由顶格的类信息开头,后边跟着开头带有4个空格的字段信息与方法信息
每个 Class 块中详细格式如下:

类信息:

originalclassname -> obfuscatedclassname:

混淆之前的全限定类名与混淆后的全限定类名通过 -> 分隔符分割,以 : 标识当前类信息的结束,标识类内字段,方法信息的开始

备注:全限定类名,是指带有包名限定的类名,可以完全定位一个类

字段信息:

originalfieldtype originalfieldname -> obfuscatedfieldname

混淆之前的字段信息与混淆之后的字段信息同样通过 -> 分隔符分割,值得注意的是,混淆前的字段包含了字段类型和字段名称,而混淆之后只有字段名称

方法信息:<

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值