android还原代码混淆proguard日志的工具--retrace和SmartRetrace

本文主要是介绍android还原代码混淆proguard日志的工具--retrace和SmartRetrace,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

代码混淆时android反编译的常用方法,android SDK提供了Proguard工具,路径是

ANDROID_SDK_HOME/tools/proguard

命令行在ANDROID_SDK_HOME/tools/proguard/bin下,而实际的执行代码路径为ANDROID_SDK_HOME/tools/proguard/lib

 

apk经过混淆后,在闪退时只要有mapping文件,可以通过retrace工具恢复。SDK提供的retrace命令如下:

java -jar retrace.jar [options...] mapping_file [stacktrace_file]

 

例如下面的崩溃堆栈

08-24 00:39:08.406 31542 31542 I QarthLog: [PatchStore] create disable file for com.lucky.bamboo uid is 10185
--------- beginning of crash
08-24 00:39:08.407 31542 31542 E AndroidRuntime: FATAL EXCEPTION: main
08-24 00:39:08.407 31542 31542 E AndroidRuntime: Process: com.lucky.bamboo, PID: 31542
08-24 00:39:08.407 31542 31542 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lucky.bamboo/com.lucky.bamboo.MainActivity}: java.lang.ArithmeticException: divide by zero
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3895)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4074)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:110)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.os.Looper.loop(Looper.java:219)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8347)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: Caused by: java.lang.ArithmeticException: divide by zero
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.lucky.bamboo.c.a.a(SourceFile:2)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.lucky.bamboo.c.a.<init>(SourceFile:2)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.lucky.bamboo.c.a.a(SourceFile:1)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at com.lucky.bamboo.MainActivity.onCreate(SourceFile:3)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8085)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8073)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3868)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: ... 11 more
08-24 00:39:08.408 1750 2835 W ActivityManager: Process com.lucky.bamboo has crashed too many times: killing!
08-24 00:39:08.408 1750 2835 W ActivityTaskManager: handleAppCrashLocked Force finishing activity com.lucky.bamboo/.MainActivity

mapping文件为“mapping.txt”

方法一、retrace运行命令

retrace.bat mapping.txt error.txt

 

运行得到结果:

 

08-24 00:39:08.406 31542 31542 I QarthLog: [PatchStore] create disable file for com.lucky.bamboo uid is 10185
--------- beginning of crash
08-24 00:39:08.407 31542 31542 E AndroidRuntime: FATAL EXCEPTION: main
08-24 00:39:08.407 31542 31542 E AndroidRuntime: Process: com.lucky.bamboo, PID: 31542
08-24 00:39:08.407 31542 31542 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lucky.bamboo/com.lucky.bamboo.MainActivity}: java.lang.ArithmeticException: divide by zero
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3895)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4074)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:110)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:219)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:8347)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Method.java)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
08-24 00:39:08.407 31542 31542 E AndroidRuntime: Caused by: java.lang.ArithmeticException: divide by zero
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.lucky.bamboo.db.BambooDatabaseHelper.testMapping(BambooDatabaseHelper.java:26)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.lucky.bamboo.db.BambooDatabaseHelper.<init>(BambooDatabaseHelper.java:21)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.lucky.bamboo.db.BambooDatabaseHelper.obtain(BambooDatabaseHelper.java:16)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at com.lucky.bamboo.MainActivity.onCreate(MainActivity.java:15)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8085)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8073)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3868)
08-24 00:39:08.407 31542 31542 E AndroidRuntime:        ... 11 more
08-24 00:39:08.408  1750  2835 W ActivityManager: Process com.lucky.bamboo has crashed too many times: killing!
08-24 00:39:08.408  1750  2835 W ActivityTaskManager:   handleAppCrashLocked Force finishing activity com.lucky.bamboo/.MainActivity

 

方法二:SmartRetrace UI工具

在实际项目中,经常为了查看某段堆栈的原始代码要把日志放在txt文件,然后再用命令行运行,而且还要找到mapping文件,用起来非常繁琐,命令行很长,而且操作步骤很多。

鉴于retrace本身就是jar包,所以本人想到能不能把retrace的命令做成UI模式,这样子很方便操作。经过两天的努力终于完成了一个勉强可用的UI工具——SmartRetrace

如果在SmartRetrace.jar的同级目录下新建一个目录“mappings”,里面可以存放多个mapping文件,并且可以使用下拉框。

工具下载链接:https://download.csdn.net/download/SweetTool/12741147

 

方法三、android sdk的tools下的proguard工具retraceui,不过感觉不好用,还不如命令行方便。

 

 

相对来说,官方的UI工具没那么好用,主要是选择文件的效率比命令行直接输出跟慢。

这篇关于android还原代码混淆proguard日志的工具--retrace和SmartRetrace的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761284

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A