【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )
2023-06-13 09:17:48 时间
文章目录
更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage
一、Proguard 混淆后的报错信息
前提 : 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)
报错信息 , at b.a.a.a.(Handler.java:30) , 报错的是混淆后的信息 , 可读性很差 ;
二、Proguard 混淆映射文件 mapping.txt
前提 : proguard-rules.pro 混淆配置中配置保留行数 ;
# 保留行数
-keepattributes SourceFile,LineNumberTable
Proguard 混淆后 , 会提供一个 原始代码 与 混淆过的代码 的对应关系文件 mapping.txt ;
该文件存放在 app\build\outputs\mapping\debug 目录下 ;
上面的报错信息 :
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)
在 mapping.txt 查找 b.a.a.a 类 , 对应的原始类是 kim.hsl.handler.Handler ;
解读 mapping.txt 文件中的信息 :
kim.hsl.handler.Handler -> b.a.a.a:
kim.hsl.handler.MessageQueue mQueue -> a
13:31:void <init>() -> <init>
39:42:void sendMessage(kim.hsl.handler.Message) -> a
kim.hsl.handler.Handler 类名被混淆成了 b.a.a.a ,
kim.hsl.handler.MessageQueue mQueue 成员名称被混淆成了 a ,
39:42:void sendMessage(kim.hsl.handler.Message) 方法名称被混淆成了 a ;
相关文章
- android activitymanager 系统api_Android view
- Android 产生ANR后的Trace文件的解析
- android attrs获取_关于Android attrs 自定义属性的说明
- android调用相册并显示图片_Android获取相册列表
- Nexus 7 升级Android 4.1.2
- Android File Transfer for mac(强大的安卓文件传输工具)
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
- 【错误记录】Android 文件分享 FileProvider 设置错误
- 【Android 逆向】ELF 文件格式 ( 程序头偏移量 | 节区头偏移量 | 处理器特定标志 | ELF 文件头大小 )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- [android] 测试的相关概念详解手机开发
- android涂鸦实现详解手机开发
- android JNI学习详解手机开发
- 谷歌发现的 iPhone 攻击者同样也在攻击 Android 和 Windows 系统
- 解除数据传输限制:Linux MTPFS 实现Android 设备文件管理(linuxmtpfs)
- Android中没有插入SD情况下的文件写入和读取方法
- 基于android中读取assets目录下a.txt文件并进行解析的深入分析
- Android中删除文件以及文件夹的命令记录
- Android中的android:layout_weight使用详解
- Android读写文件方法汇总
- android上传文件到服务器代码实例
- android使用gesturedetector手势识别示例分享