文章目录

  • 一、将混淆后的报错信息转为原始报错信息
  • 二、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: mainProcess: kim.hsl.handler, PID: 28142java.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 referenceat 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 referenceat 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 工具 ;

使用上述 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: mainProcess: kim.hsl.handler, PID: 28142java.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 referenceat 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 referenceat 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>

二、retrace.bat 命令执行目录


必须在 D:\001_Programs\001_Android\002_Sdk\Sdk\tools\proguard\lib 目录中执行 retrace.bat 命令 , 如果在别的目录会报下面的错误 ;

Error: Unable to access jarfile ..\lib\retrace.jar

三、暴露更少信息


使用以下配置 , 可以暴露更少信息 ;

-renamesourcefileattribute H

完整配置如下 :

# 保留行数
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute H

报错信息如下 :

2020-11-10 12:15:41.634 29988-29988/? E/AndroidRuntime: FATAL EXCEPTION: mainProcess: kim.hsl.handler, PID: 29988java.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 referenceat 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 referenceat b.a.a.a.<init>(H:30)at kim.hsl.handler.MainActivity.onCreate(H: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) 

使用 -renamesourcefileattribute H 配置 前后对比对比 :

之前报错时 , 会将 Handler 暴露出来 ;

     Caused by: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object referenceat b.a.a.a.<init>(Handler.java:30)at kim.hsl.handler.MainActivity.onCreate(MainActivity.kt:24)

使用 -renamesourcefileattribute H 配置后 , 报错信息如下 :

     Caused by: java.lang.NullPointerException: Attempt to read from field 'b.a.a.d b.a.a.b.a' on a null object referenceat b.a.a.a.<init>(H:30)at kim.hsl.handler.MainActivity.onCreate(H:24)

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

  1. 【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )

    文章目录 一.Proguard 默认混淆结果 二.-keepclassmembers 混淆效果 二.-keepclasseswithmembernames 混淆效果 更多 ProGuard 混淆配置参 ...

  2. 【Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留类及成员混淆结果 | 保留注解以及被注解修饰的类/成员/方法 )

    文章目录 一.Proguard 默认混淆结果 二.Proguard 保留类及成员混淆结果 三.Proguard 保留注解以及被注解修饰的类/成员/方法 更多 ProGuard 混淆配置参考 : htt ...

  3. 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )

    文章目录 一.Proguard 配置简介 二.Proguard 完整注释 一.Proguard 配置简介 更多 ProGuard 混淆配置参考 : https://www.guardsquare.co ...

  4. 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )

    文章目录 一.Proguard 混淆后的报错信息 二.Proguard 混淆映射文件 mapping.txt 更多 ProGuard 混淆配置参考 : https://www.guardsquare. ...

  5. 【Android 安全】DEX 加密 ( Proguard 简介 | Proguard 相关网址 | Proguard 混淆配置 )

    文章目录 一.Proguard 简介 二.Proguard 相关网址 三.Proguard 混淆配置 一.Proguard 简介 Android 开发中 Proguard 主要作用是对 Java 代码 ...

  6. 【Android 安装包优化】资源混淆 ( 资源混淆效果 | APK 构建流程简介 | 资源 ID 组成 )

    文章目录 一.资源混淆效果 二.APK 构建流程简介 三.资源 ID 组成 四.参考资料 一.资源混淆效果 资源混淆 , 将资源名称与目录进行混淆 , 提高了反编译的难度 , 同时也减小了 APK 文 ...

  7. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )

    文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...

  8. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 交叉编译 OpenSSL 开源库 )

    文章目录 一.OpenSSL 开源库简介 二.OpenSSL 源码及环境变量脚本下载 三.修改环境变量脚本 四.OpenSSL 交叉编译 五.OpenSSL 交叉编译相关资源下载 参考博客 : [An ...

  9. 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 )

    文章目录 一.生成 jks 文件 二.签名命令 三.执行结果 四.处理 Unsupported major.minor version 52.0 错误 参考博客 : [Android 安全]DEX 加 ...

最新文章

  1. python抓取微博数据中心_有哪些「神奇」的数据获取方式?
  2. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?
  3. Dubbo Admin服务测试功能
  4. 基于DirectShow的局域网内音视频流的多机共享
  5. 软件工程概论课堂作业3
  6. linux sftp目录无法切换,linux – SFTP用户无法编辑或创建文件
  7. 无线网络的基础及优化方案
  8. MySQL8单表记录多少_mysql学习笔记之8(单表数据记录查询)_mysql
  9. dbeaver生成结构图_DBeaver的简易操作和建议(一个神奇的数据库操作软件)
  10. 静默安装apk,静默卸载apk
  11. 如何简单访问HTTP的GET、POST、PUT、DELETE,MOCK数据
  12. “博观而约取,厚积而薄发”——苏东坡
  13. 编译 firefox linux,Linux下面Firefox 8.0.1的编译安装
  14. PHPStorm+Xdebug配置(phpStudy)
  15. jquery填充列表内容
  16. 苹果:付费才能用 iOS 开发者预览版,网友吐槽:找 Bug,还得先交 99 美元?
  17. localhost可以访问,使用ip地址失败
  18. duilib学习------网易云信图片中间加文字
  19. GitLab 安全漏洞 (CVE-2016-4340)复现
  20. XSS之xss-labs-level17

热门文章

  1. Ubuntu系统修复系统拼音输入法
  2. c语言进程控制实验报告,操作系统进程的创建与控制实验报告.doc
  3. python实现图片拼接长图_Python 拼接多张尺寸大小不一样的图片制作长图
  4. java文件备份_定时自动备份文件(java)
  5. 单片机 模拟电子闹钟 c语言,分享一个LCD1602电子闹钟 双闹版 带单片机源程序
  6. len函数python返回值类型_简单介绍Python中的len()函数的使用
  7. 低代码在ERP系统实施中的作用
  8. 离散制造、流程制造、重复制造的区别
  9. 电脑桌面日历云便签怎么通过日历查看节假日和农历节气?
  10. 计算机控制技术实验报告数据采集,东南大学计算机控制技术实验报告二