【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )(一)

简介: 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )(一)

文章目录

一、将混淆后的报错信息转为原始报错信息

二、retrace.bat 命令执行目录

三、暴露更少信息


更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage






一、将混淆后的报错信息转为原始报错信息


前提 : proguard-rules.pro 混淆配置中配置保留行数 ;


# 保留行数
-keepattributes SourceFile,LineNumberTable


混淆后的报错信息 :


2020-11-10 12:01:59.426 28142-28142/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: kim.hsl.handler, PID: 28142
    java.lang.RuntimeException: Unable to start activity ComponentInfo{kim.hsl.handler/kim.hsl.handler.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3897)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8349)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
     Caused by: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object reference
        at b.a.a.a.<init>(Handler.java:30)
        at kim.hsl.handler.MainActivity.onCreate(MainActivity.kt:24)
        at android.app.Activity.performCreate(Activity.java:8085)
        at android.app.Activity.performCreate(Activity.java:8073)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3870)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:219) 
        at android.app.ActivityThread.main(ActivityThread.java:8349) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)



将上述混淆后的报错信息 , 保存到 bug.txt 文件中 , 放在 app\build\outputs\mapping\debug 目录里 ;


在 Sdk\tools\proguard\bin 中找到 retrace.bat 工具 ;


image.png


使用上述 retrace.bat 命令 , 通过 Proguard 混淆映射文件 mapping.txt , 还原被混淆过的 报错信息 ;


进入 D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\lib 目录 , 然后在该目录执行上述命令 ;


D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\bin\retrace.bat -verbose D:\002_Project\002_Android_Learn\Handler\app\build\outputs\mapping\debug\mapping.txt D:\002_Project\002_Android_Learn\Handler\app\build\outputs\mapping\debug\bug.txt


一定要注意 , 必须在 D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\lib 目录中执行该命令 ;


还原结果 :


D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\lib>D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\bin\retrace.bat -verbose D:\002_Project\002_Android_Learn\Handler\app\build\outputs\mapping\debug\mapping.txt D:\002_Project\002_Android_Learn\Handler\app\build\outputs\mapping\debug\bug.txt
2020-11-10 12:01:59.426 28142-28142/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: kim.hsl.handler, PID: 28142
    java.lang.RuntimeException: Unable to start activity ComponentInfo{kim.hsl.handler/kim.hsl.handler.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3897)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8349)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
     Caused by: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object reference
        at kim.hsl.handler.Handler.void <init>()(Handler.java:30)
        at kim.hsl.handler.MainActivity.void onCreate(android.os.Bundle)(MainActivity.kt:24)
        at android.app.Activity.performCreate(Activity.java:8085)
        at android.app.Activity.performCreate(Activity.java:8073)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3870)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)聽
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)聽
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)聽
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)聽
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)聽
        at android.os.Handler.dispatchMessage(Handler.java:110)聽
        at android.os.Looper.loop(Looper.java:219)聽
        at android.app.ActivityThread.main(ActivityThread.java:8349)聽
        at java.lang.reflect.Method.invoke(Native Method)聽
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)聽
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)聽
D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\lib>

image.png





目录
相关文章
|
3小时前
|
算法 Java Android开发
Android安全性: 什么是ProGuard,它的作用是什么?
Android安全性: 什么是ProGuard,它的作用是什么?
52 1
|
3小时前
|
Android开发
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
67 1
|
3小时前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
13 0
|
3小时前
|
编译器 Android开发
Android S内置APK时AndroidManifest使用uses-library编译报错
Android S内置APK时AndroidManifest使用uses-library编译报错
12 0
|
3小时前
|
Java Android开发
Android 对adb命令的拦截
Android 对adb命令的拦截
17 2
|
3小时前
|
Shell Android开发
RK android13编译环境搭建与常用编译命令
RK android13编译环境搭建与常用编译命令
94 0
|
3小时前
|
安全 算法 网络安全
数字堡垒的构筑者:网络安全与信息加密技术纵览
【4月更文挑战第30天】在数字化时代,数据如同虚拟世界中的流通货币,而网络安全则是保护这些数据的堡垒。本文深入探讨了网络安全漏洞的概念、危害及其产生的原因;同时详细介绍了加密技术的基本原理、类型以及它们在信息安全中的应用。此外,文章还强调了提升个人和企业的安全意识在构建安全防线中的重要性。通过分析当前网络威胁和防御策略的最新动态,旨在为读者提供全面的网络安全知识框架,帮助大家构建更加坚固的数字堡垒。
|
3小时前
|
缓存 Android开发 开发者
pc上使用命令给android安装apk
pc上使用命令给android安装apk
20 0
|
3小时前
|
安全 编译器 API
Android HAL深入探索(5): 调试HAL报错与解决方案
Android HAL深入探索(5): 调试HAL报错与解决方案
28 1
|
3小时前
|
安全 Java Shell
Android13 adb input 调试命令使用和源码解析
Android13 adb input 调试命令使用和源码解析
38 0