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

相关文章

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三