如何使用映射文件对 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。实际上<sdk-root>
已经存在,但由于我没有用'`'注释它,它没有显示,我现在才注意到它。我这边有点晚了,但感谢您的提醒
@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 [我们可以使用 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/<your computer name>/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 测试?