Android 根据mapping文件还原混淆代码

这篇具有很好参考价值的文章主要介绍了Android 根据mapping文件还原混淆代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、简介

app发布的时候都会做混淆处理,但是当发生错误的时候,只能看到一些混淆后的代码很难看清楚哪里错了,那么如何将混淆后的代码进行还原呢?

Android sdk 目录下有专门的工具可以帮助我们进行还原。


二、还原混淆文件

1、获取mapping.txt混淆文件

在还原混淆之前,我们需要app的混淆mapping文件,该文件路径:

/app/build/outputs/mapping/release/mapping.txt

混淆文件的格式类似如下:

...
MTT.ThirdAppInfoNew -> a.a:
    java.lang.String sAppName -> a
    java.lang.String sTime -> b
    java.lang.String sQua2 -> c
    java.lang.String sLc -> d
    java.lang.String sGuid -> e
    java.lang.String sImei -> f
    java.lang.String sImsi -> g
    java.lang.String sMac -> h
    long iPv -> i
    int iCoreType -> j
    java.lang.String sAppVersionName -> k
    java.lang.String sAppSignature -> l
    java.lang.String sAndroidID -> m
    long sWifiConnectedTime -> n
    int localCoreVersion -> o
    void <init>() -> <init>
android.arch.core.BuildConfig -> android.arch.core.BuildConfig:
    boolean DEBUG -> DEBUG
    java.lang.String APPLICATION_ID -> APPLICATION_ID
    java.lang.String BUILD_TYPE -> BUILD_TYPE
    java.lang.String FLAVOR -> FLAVOR
    int VERSION_CODE -> VERSION_CODE
    java.lang.String VERSION_NAME -> VERSION_NAME
    6:6:void <init>() -> <init>
...

2、获取混淆的崩溃堆栈

混淆的崩溃堆栈如下:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
at com.cw.tsb.activity.crash.a.a(CrashUtil.java:33)
at com.cw.tsb.activity.crash.JavaCrashActivity.l(JavaCrashActivity.java:100)
at com.cw.tsb.activity.crash.JavaCrashActivity.a(JavaCrashActivity.java:51)
at com.cw.tsb.activity.BaseToolbarButtonActivity$1.onClick(BaseToolbarButtonActivity.java:61)
at android.view.View.performClick(View.java:7664)
at android.view.View.performClickInternal(View.java:7638)
at android.view.View.access$3800(View.java:878)
at android.view.View$PerformClick.run(View.java:29899)
at android.os.Handler.handleCallback(Handler.java:966)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.main(ActivityThread.java:9596)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)

注:上述堆栈代码第二行中的 a.a 即为混淆代码。

我们将上述堆栈代码保存到 trace.txt 文件中,留作后面解码使用。


3、使用工具进行解混淆

还原混淆工具路径:

../sdk/tools/proguard

首先我们进入到混淆工具的bin目录:

../sdk/tools/proguard/bin

bin 目录(Mac系统)下有 proguard.shproguardgui.shretrace.sh 三个文件。

然后将前面的 mapping.txt(解码文件)trace.txt(混淆堆栈文件) 拷贝到混淆工具的 bin 目录中。

然后在 bin 目录中执行如下命令:

bash retrace.sh -verbose mapping.txt  trace.txt > out.txt

该命令是将混淆的堆栈文件(trace.txt)解码后保存到 out.txt 文件中。

解码后的堆栈如下:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
at com.cw.tsb.activity.crash.CrashUtil.void crash_nullpoint()(CrashUtil.java:33)
at com.cw.tsb.activity.crash.JavaCrashActivity.void nullPointerException()(JavaCrashActivity.java:100)
at com.cw.tsb.activity.crash.JavaCrashActivity.void onBtnViewClick(int,android.view.View)(JavaCrashActivity.java:51)
at com.cw.tsb.activity.BaseToolbarButtonActivity$1.void onClick(android.view.View)(BaseToolbarButtonActivity.java:61)
at android.view.View.performClick(View.java:7664)
at android.view.View.performClickInternal(View.java:7638)
at android.view.View.access$3800(View.java:878)
at android.view.View$PerformClick.run(View.java:29899)
at android.os.Handler.handleCallback(Handler.java:966)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.main(ActivityThread.java:9596)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)

其中第二行中的 a.a 被解析成了我们能看懂的源码 void crash_nullpoint()文章来源地址https://www.toymoban.com/news/detail-698178.html

到了这里,关于Android 根据mapping文件还原混淆代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入学习 JavaScript 转译器 Babel ,AST还原混淆代码

    JavaScript 是一种广泛应用于 Web 开发的脚本语言,它最初是由网景公司的 Brendan Eich 开发的。JavaScript 具有易学易用、灵活、动态等特点,它能够帮助开发者在 Web 应用中实现丰富的交互和动态效果。 然而,由于 JavaScript 的语法和特性不断更新,旧版的浏览器和环境可能无法完

    2024年02月07日
    浏览(36)
  • 【Android Studio】Android Studio修改代码编辑区(工作区)背景色

    Android Studio 字体大小及背景色的设置 1、 打开File—Settings 或者 Android Studio—Ctrl+Alt+s 2、 在setting对话框中选中“Editor-ColorsFonts-Font , 点击Save as,自定义一个主题,选择字体,size和行间距,保存。 3、设置背景色 选择-General-Text-Default Text,设置背景色。 青草绿:#e3edcd

    2024年04月27日
    浏览(33)
  • 【Android】使用Android Studio打包APK文件

    打包APK之前,首先需要新建项目,有基础的可以跳过。 无基础的可以参考:使用Android Studio运行Hello World项目 1.找到Build - Generate Signed Bundle or APK - 勾选APK 2.首次需要创建证书,后续可以使用已创建好的证书 3.填写证书信息 选择密钥库存放路径,并填写密码 填写密钥名称、密

    2024年02月19日
    浏览(43)
  • Android Studio统计代码量

    如何知道你写的android项目里面的程序量(即有多少行代码)可以使用Android Studio自带的一个插件 Statistic 实现,下面是详细的步骤说明。 首先点开settings然后找到Plugins,在这里找到我们需要下载的插件,这里我已经提前安装好了。 插件安装成功后,settings中的Tools最下面会显

    2024年02月04日
    浏览(35)
  • Android studio不自动提示代码

    可以修改一下sdk版本,改成30(Android 11.0(R)),我之前用的33不行,具体操作如下 File-Project Structure选择要修改的模块将Compile Sdk Version改成30  将Target SDK Version改成30  然后应该就可以了,重启android studio  

    2024年02月07日
    浏览(35)
  • Android Studio 代码模板插件实现

    可以跳过背景和简述,从模板插件实现开始看. 开发新页面时,原先需要写一堆模板代码。比如用Databinding写列表结构的页面,需要手写以下文件: XxActivity.kt XxFragment.kt XxViewModel.kt XxListAdapter.kt XxListItemModel.kt(UI数据结构) XxBean.kt(接口数据结构) XxBeanModelConvert.kt XxRetrofitA

    2024年02月15日
    浏览(67)
  • Android studio 设置忽略文件(文件不显示)

    如果项目中文件夹中显示某个文件,但是AndroidStudio中不显示,一般的情况下是进行了忽略处理。如果想显示出来可以把忽略进行移除。 Android项目提交代码时一般忽略的文件: 1、.idea文件夹 2、所有的build文件夹 3、所有的.iml文件 4、local.properties文件。 方式一:版本3.6之前

    2024年02月09日
    浏览(31)
  • Android Studio代码无法自动补全

    在写layout布局文件时,代码不提示,不自动补全,可以采用如下方法: 点击File—Project Structure,之后如图所示,找到左侧Modules,修改SDK版本号,以自己实际使用为准。我的是26。 这三者保持一致。 设置完点击OK。 试验一下: 但是运行程序发现会报错,再改一下, 就好使了

    2024年02月04日
    浏览(35)
  • android studio的代码自动补全

    在 Android Studio 中,代码自动补全功能通常是默认启用的。如果你需要调整或确保它已经启用,可以按照以下步骤进行设置: 1. 打开 Android Studio。 2. 在菜单栏中,选择 `File` `Settings` (对于 macOS 用户是 `Android Studio` `Preferences`)。 3. 在设置窗口中,导航到 `Editor` `General` `Code Comp

    2024年04月26日
    浏览(25)
  • [Android Studio]Android Studio-Device File Explorer 使用设备文件浏览器查看设备上的文件

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 利用设备文件浏览器,您可以在 Android 设备上查看、复制和删除文件。这在检查应用创建的文件或者要将文件传输至设备或从设备接收文件

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包