如何通过Mapping文件反混淆了解Mapping文件最直观的好处在于我们跟踪线上的经过混淆之后的Crash

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

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

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

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

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

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

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

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

类信息:

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

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

字段信息:

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

方法信息:

[startline:endline:]originalreturntype[originalclassname.]originalmethodname(originalargumenttype,...)[:originalstartline[:originalendline]]->obfuscatedmethodname备注:标识着*的行,意味着可能出现任意多次;[]表示内容是可选的;…表示可能会出现任意多个前边指定的item;:与,与->都是分隔符

方法信息同样通过->分隔符分割,但是方法信息比类信息和字段信息更复杂一点,因为方法还额外包含了行号表,参数,返回类型等信息

剩下的行号信息,稍微复杂一点要根据方法有没有做内联优化分成两种情况:

有一些要注意的点:

如果多个方法或者字段的签名(或者说描述符)不同,那么混淆之后的名称可能是相同的

方法nextLine和lineLocationDescription都有自己的源码行号范围,但是返回类型和参数列表是相同的,如果在混淆的配置文件中配置保留了LineNumberTable,那么在报错堆栈中就可以看到行号,也就可以通过行号定位到具体的方法,而如果没有在混淆的配置文件中配置保留LineNumberTable,那么报错堆栈中也就不会打印出行号,仅仅通过返回类型和参数列表是无法区分二者的,所以这就是为什么这两个方法的混淆之后的名称是不同的

以上的示例比较简单,我们来看一下复杂的示例

剩下的方法都比较奇怪,开头的行号都是特别大的数字,且有几个方法行号是相同的,明显不是正常的行号,这是因为经过了方法内联处理,在混淆处理的过程中,可能会内联方法到其他方法中,甚至进行递归的内联

简单来说,就是将互相调用的多个方法合并为一个方法,这样减少程序方法调用的次数,从而减少程序调用过程中的栈帧的创建销毁等额外的消耗,提升性能例如

classA:defa():print("a")B.b()classB:defb():print("fromB")print("b")做方法内联优化之后:

classA:defa():print("a")print("fromB")print("b")//innerlinefromB()了解了方法内联之后,我们再来看方法内联对混淆的影响,方法内联之后,堆栈中原来B.b()方法已经被内联到A.a()方法中,混淆之后的方法信息也自然指向了A.a(),那么堆栈中出现的错误信息也是指向A.a(),但是我们源码中的调用是来自方法B.b()的,所以内联前后的优化信息我们是需要知道的,方便在后续堆栈信息追踪时反推源码信息。

下边我们就看一下具体的解析方法

2039:2056:voidcom.example.application.GPL.check():39:56->a2039:2056:voidexecute():76->a方法最前边的行号范围如果相同,就代表一个内联链中的方法调用链,比如以上两句表示,方法check被内联到了execute方法中,内联的位置是原execute方法的第76行,如果末尾是行号范围,那么对应的就是最终的内联方法体

开头的行号是内联函数调用链最底层的行号范围和编译器给予的一定的偏移量加和的结果,偏移量是1000的倍数,偏移量的目的是避免与其他的正常的代码范围产生冲突,所以2039:2056是来自check方法的源码行号范围39:56与2000的偏移量相加得出的结果

另外,因为check方法因为不属于类com.example.application.Main,所以使用了类全限定符标识,标明check所处的类

2236:2252:voidprintConfiguration():236:252->a2236:2252:voidexecute():80->a3040:3042:java.io.PrintWritercom.example.application.util.PrintWriterUtil.createPrintWriterOut(java.io.File):40:42->a3040:3042:voidprintConfiguration():243->a3040:3042:voidexecute():80->a以上Mapping文件的分析方法和之前的一致,唯一需要说明的是这其中的关联execute方法在80行内联了方法printConfiguration,后者的行号范围是236:252,其中,printConfiguration又在243行内联了方法createPrintWriterOut,后者的行号范围是40:42。

至此,我们分析完了Mapping文件的所有情况的格式,最后的两行交由读者自己尝试分析一下。

当使用AndroidGradle插件3.4.0或更高版本构建项目时,该插件不再使用ProGuard来执行编译时代码优化,而是与R8编译器协同工作来处理编译时任务,所以可以通过Gradle插件版本来查看具体使用了Proguard还是R8编译器。

R8编译器一定程度上兼容Proguard规则,但是还是略有不同。

Mapping文件以#开头的行作为注释,标识R8程序的格式,日期等信息,但是在Proguard中还未发现这样的规范

例如以下:

和Proguard规范有所不同的是:

例如:

1:2:voidattachBaseContext(android.content.Context):97:98->attachBaseContext1:4:voidcloseOptionsMenu():609:612->closeOptionsMenu虚拟行号范围重叠了,但实际的行号范围是不一样的,而且混淆后的名称也是不同的

基于以上的Mapping文件的解析规则,我们可以做很多事情,比如反混淆Trace文件,反混淆Nanoscope文件,反混淆Hprof文件等等,我基于这个规则,开发了一个ReProguard的程序,可以供大家参考,欢迎交流提意见

THE END
1.互联网时代的阅读方式电商购物随着互联网的普及,我们的阅读方式也在发生深刻变革。传统的纸质书籍正在被电子书籍所替代,而电子书籍又有着纸质书籍所不具备的优势。它们可以随时随地被携带,可以在任何设备上轻松阅读,而且有着更丰富的功能和互动性。这种阅读方式的变革不仅改变了我们的阅读习惯,也对我们的思维方式和认知模式产生了深远影响。我们需要适http://www.aa0.cn/post/5683.html
2.多位专家学者谈“读书”:让阅读成为更多人的生活方式中国社会科学院哲学研究所研究员周国平以《为自己读书》为题,提出了关于读书的主张“三不主义”:第一个“不”,是不务正业,博览群书;第二个“不”,是不走弯路,直奔大师;第三个“不”,是不求甚解,为我所用。阅读是一个积累的过程,更多是为了精神上的生长和提高。 https://www.nationalreading.gov.cn/ydzg/202412/t20241209_876629.html
3.4S店续保的好处你知道多少?4S店线上续保安全便捷!PS: 4S店续保的十大好处: 好处一:省心省力 好处二:现场协助 好处三:专业维修 好处四:量身定制 好处五:服务快捷 好处六:技术过硬 好处七:原厂配件 好处八:足额定损 好处九:残值保障 好处十:更多优惠,等您来享!https://www.dongchedi.com/article/7350977672425652786
4.www.krszf.com/aplhtml46070.htm线上媚娘性网站 国产亚洲高清AV性色AV 嗯 操我 快 给我 嗯 149.12MB 556好评 女王踩踏惩处踩踏社区,s女王m踩踏- 商务旅行戴绿色帽子的老板 世界取大性奴黄色网站 48.83MB 475好评 屄插到淫水泛滥电影网 肏我,嗯哼,还要 超国产人人干人人 286.64MB https://www.krszf.com/aplhtml46070.htm
5.软考中级网络工程师全面学习笔记第2版(5万字)+配套视频及课件可能你从其他地方购买的或是其他的来的各种笔记都是几个甚至几十个文件排版也相当不好的文件让你去自己慢慢阅读,慢慢找。这里笔记只有一个文件且体积小也可以编辑,如果是用着WPS云文档也可上传到自己的云文档中,排版的也还可以,即便是打印出来也可以很好的进行阅读与查看 https://blog.csdn.net/jennycisp/article/details/134241096
6.www.sjzyl99.com/moken41347.html据了解,王籽参加的培训是由青石山街道新时代文明实践所联合西果店村新时代文明实践站举办的第二期“乡村短视频培训”,当天有15名村民参加。培训班上,从如何选择最佳的拍摄角度、捕捉乡村生活的生动瞬间,到如何运用剪辑技巧将视频片段串联成引人入胜的故事,再到如何为视频添加字幕、提升观看体验,该村村党支部书记助理http://www.sjzyl99.com/moken41347.html
7.观自在读书会第9期A1组《有钱人和你想的不一样》11月26日线上《有钱人和你想的不一样》11月26日线上共读第17天0029 Angel_bao分享: 成功是一种学得来的技术。你可以通过学习来让自己成功,任https://www.meipian.cn/58rq15uz
8.www.quinovare.com/xxxr84821217<!DOCTYPE/638571.htmH高禁伦桌上肉伦H 国模老逼 探花黑人巨根 男人与女人做污污的事APP 夜色兄妹蜜汁 久久久久羞羞动漫网站 苏联女尤野外啪啪插美穴网 成人在线观看免费无码破解 亚洲成人AV线上观看 看老板娘视频老性爱hddhvwom158856 69欧美精品成人a?v久久 美女自慰呻吟 成年人看的网站色 18 女人腿打开无遮挡网站 人http://www.quinovare.com/xxxr84821217%3C!DOCTYPE/638571.htm
9.www.watch68.com/aplmine12轮滑网漫画免费阅读入口 哦罗斯操逼一级黄片 423.34MB 920好评 18禁强奸无打码 黄衣网站免费观看 亚洲无码黄色在线看 191.52MB 358好评 裸体美女露尿口视频网站 女生扒开尿口叫男生捅28分钟 多肉伦理电影院 271.94MB 594好评 英语老师挽起裙子 亚洲一级毛在线等 http://www.watch68.com/aplmine12_08/748491
10.阅读的十大好处有哪些更有趣的是,阅读书籍的成本会降低很多,而且能让你享受更长时间的娱乐。比如去图书馆,或者一些线上的免费电子书籍,都会让你有很多几乎,享受到这一免费的“娱乐资源”。从健康益处到变得更聪明,定期阅读可以提供许多好处。如果你养成这种定期阅读书籍的习惯,你可以发现你对很多事情,更加熟悉,更加自信。一旦你开始每天https://wen.baidu.com/question/883796742174891972.html
11.马上参与,享受特别待遇:官方?抢先专属网站大好玩560vip官方网站进入,凯发k8ag旗舰厅真人版,彩票9216平台官网下载,香港天下彩CC线入口,千禧网官网3D国外游戏网站平台,以利坊app,凤凰VIP彩票官网,国民斗地主app,威斯尼斯人v86cc天中图库一句定三码最准字谜,五张牌斗牛牛软件,澳洲幸运5玩家群,足彩竞彩500彩票,大家会棋牌安卓官网手机上玩刮刮乐的软件,下载手机http://m.jyconline.cn/20241209/751793.html
12.六年级上册第二单元主题阅读专项训练当他来到囚车旁,一个军法官问他还有什么话要说时,他转身看了看宪兵,对他们说:“对你们当兵的人,我倒有一句话说,请你们睡到三更半夜时好好想一想,杀死了为工农大众谋福利的人,为人民求翻身的共产党人,对你们自己有什么好处?”把军法官气得大叫。邓中夏走上囚车,朗声大笑道:“你们害怕了!总有一天,当你们的https://zujuan.xkw.com/thematiclist/24pt4033ct11928n335377.html
13.谍网最新章节列表第六百八十七章 分好处 上 第六百八十八章 分好处 中 第六百八十九章 分好处 下 第六百九十章 风向变化 第六百九十一章 左右为难 第六百九十二章 各有所得 第六百九十三章 哭穷表功 第六百九十四章 策略得当 第六百九十五章 瞒天过海 第六百九十六章 规则决定对错 第六百九十七章 关系铺垫 第六百九十八https://www.yanqingxiaoshuo.org/36/36627.html
14.www.jjmcn.com/aplpage44974.html建议各位在购买带鱼的时候可以适当触摸带鱼的鱼皮,新鲜带鱼的鱼皮表面粘黏液物质较少,而且鱼鳞完整且光滑;不靠谱的带鱼身体上黏液物质较多,而且鱼鳞部分较为松弛。 带鱼,美味且营养,建议您吃,更希望您能健康食用;每周吃点带鱼,愿您的生活“营养充沛”。 http://www.jjmcn.com/aplpage44974.html
15.嫁入豪门后我的小道观火了(恰到好处),小说嫁入豪门后我的小道观火他捂着肚子:我的孩子……谢川柏,你好狠! 谢川柏解领带: 作者:恰到好处所写的《嫁入豪门后我的小道观火了》无弹窗免费全文阅读为转载作品,章节由网友发布。 推荐地址:https://www.xszww8.net/html/194/194461/ 推荐阅读: 春野小神医陆鸣陆瑶全文免费阅读女富婆的神级村医全文免费阅读都市狂枭陈六何沈轻舞https://www.xszww8.net/html/194/194461/
16.恋上骄傲女上司小说初始焰恋上骄傲女上司最新章节如果您喜欢小说恋上骄傲女上司,请将恋上骄傲女上司最新章节目录加入收藏方便您下次阅读,香书小说将在第一时间更新小说恋上骄傲女上司,发现没及时更新,请告知我们,谢谢!http://www.xbiquge.la/1/26205/