如何使用映射文件对 Android 堆栈跟踪进行去混淆处理

Posted

技术标签:

【中文标题】如何使用映射文件对 Android 堆栈跟踪进行去混淆处理【英文标题】:How to deobfuscate an Android stacktrace using mapping file 【发布时间】:2019-09-24 04:36:06 【问题描述】:

我从崩溃报告系统得到了一个堆栈跟踪,它被混淆了,比如

... 解析失败:lru/test/c/b/a; ...

我有一个映射文件。

如何使用 mapping.txt 去混淆这个堆栈跟踪?

【问题讨论】:

【参考方案1】:

从您的应用页面获取去混淆的崩溃堆栈跟踪

通过以下步骤将您的 mapping.txt 上传到您的应用 PlayStore 页面:

    登录您的 Play 管理中心。 选择一个应用程序。 在左侧菜单中,点击 android Vitals > 反混淆文件。 在您的应用版本旁边,点击上传。 为您的应用版本上传 ProGuard 映射文件。

这样做后,查看去混淆的崩溃堆栈跟踪:

    登录您的 Play 管理中心。 选择一个应用程序。 在左侧菜单中,点击 Android Vitals > ANR 和崩溃。 选择一个崩溃。 在“堆栈跟踪”选项卡上,您会看到去混淆的堆栈跟踪。

您可以查看this link了解更多详情。

去混淆一段堆栈跟踪

要自行转换代码,请使用回溯脚本(Windows 上的 retrace.bat;Mac/Linux 上的 retrace.sh)。它位于~/Android/sdk/tools/proguard/bin/ 目录中。该脚本采用 mapping.txt 文件和您的堆栈跟踪,生成一个新的、可读的堆栈跟踪。使用回溯工具的语法是:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

【讨论】:

回溯脚本似乎已从 SDK 中删除,或者不再位于路径中。你的命令对我不起作用。它可以在以下位置找到:~/Library/Android/sdk/tools/proguard/bin/retrace.sh 我已经更新了我的答案@Janusz。实际上&lt;sdk-root&gt; 已经存在,但由于我没有用'`'注释它,它没有显示,我现在才注意到它。我这边有点晚了,但感谢您的提醒 @Ricard 如何在 windows 中找到我的 proguard 文件路径 错误运行'retrace.bat -verbose mapping.txt obfuscated_trace.txt':无法运行程序“retrace.bat”(在目录“C:\Users\Edgar\AndroidStudioProjects\Swapit_Android\app”) : CreateProcess error=2, 系统找不到指定的文件 我使用 retrace.sh [-verbose] mapping.txt [] 工作并且非常有用,因为应用中心不会在上传映射文件之前回溯问题。谢谢队友【参考方案2】:

我们可以使用 pro-guard 工具进行回溯:

首先从以下位置获取映射文件

<project-path>app/build/outputs/mapping/flavor/release/mapping.txt

从以下位置找到 pro-guard 工具,即“proguardgui”

<your-computer-name>/AppData/Local/Android/SDK/tools/proguard/lib

然后你会得到proguardgui.jar

在 mac 上:/Users/&lt;your computer name&gt;/Library/Android/sdk/tools/proguard/lib

使用终端

java -jar /Users/<your computer name>/Library/Android/sdk/tools/proguard/lib/proguardgui.jar

proguardgui tool

现在单击左侧菜单侧的回溯选项以获取以下窗口,从上述位置浏览您的 mapping.txt 文件,并将您的堆栈跟踪错误日志添加到混淆的堆栈跟踪窗口中,然后单击 @987654329 @按钮获取deObfuscated错误报告。

还有另一种使用 Google Play 商店自动执行的方法 控制台。

Check this website of Google Play Store Console for detailed steps.

【讨论】:

【参考方案3】:

另一种选择(对我有用)。 位置:C:\Program Files\Android\Android Studio\jre\bin(java.exe在这里)

    从 Sdk\tools\proguard\lib 添加文件:

    proguard.jar

    retrace.jar

    添加您的 mapping.txt 和 stacktrace 文件

    使用以下行创建一个 bat 文件:

    java -jar retrace.jar -verbose mapping.txt 堆栈跟踪

    暂停

    运行它。

【讨论】:

以上是关于如何使用映射文件对 Android 堆栈跟踪进行去混淆处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中使用 dagger 对 kotlin 文件进行 UI 测试?

LinuxBPF学习笔记 - 堆栈跟踪[3]

LinuxBPF学习笔记 - 堆栈跟踪[3]

在没有混淆的情况下使用 Proguard 和 Android

Google Play 崩溃跟踪去混淆

VS2015--在 Visual Studio 中调试时映射调用堆栈上的方法