【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )
文章目錄
- 一、Proguard 混淆后的報(bào)錯(cuò)信息
- 二、Proguard 混淆映射文件 mapping.txt
更多 ProGuard 混淆配置參考 : https://www.guardsquare.com/en/products/proguard/manual/usage
一、Proguard 混淆后的報(bào)錯(cuò)信息
前提 : proguard-rules.pro 混淆配置中配置保留行數(shù) ;
# 保留行數(shù) -keepattributes SourceFile,LineNumberTable當(dāng)代碼混淆后 , 如果出現(xiàn)報(bào)錯(cuò)信息 , 此時(shí)報(bào)錯(cuò)信息全部都是被混淆過(guò)的信息, 無(wú)法從中找出可用的信息 ;
混淆后 報(bào)錯(cuò)信息不可讀 ;
下面是截取出的混淆后的報(bào)錯(cuò)信息 :
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)報(bào)錯(cuò)信息 , at b.a.a.a.(Handler.java:30) , 報(bào)錯(cuò)的是混淆后的信息 , 可讀性很差 ;
二、Proguard 混淆映射文件 mapping.txt
前提 : proguard-rules.pro 混淆配置中配置保留行數(shù) ;
# 保留行數(shù) -keepattributes SourceFile,LineNumberTableProguard 混淆后 , 會(huì)提供一個(gè) 原始代碼 與 混淆過(guò)的代碼 的對(duì)應(yīng)關(guān)系文件 mapping.txt ;
該文件存放在 app\build\outputs\mapping\debug 目錄下 ;
上面的報(bào)錯(cuò)信息 :
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)在 mapping.txt 查找 b.a.a.a 類 , 對(duì)應(yīng)的原始類是 kim.hsl.handler.Handler ;
解讀 mapping.txt 文件中的信息 :
kim.hsl.handler.Handler -> b.a.a.a:kim.hsl.handler.MessageQueue mQueue -> a13:31:void <init>() -> <init>39:42:void sendMessage(kim.hsl.handler.Message) -> akim.hsl.handler.Handler 類名被混淆成了 b.a.a.a ,
kim.hsl.handler.MessageQueue mQueue 成員名稱被混淆成了 a ,
39:42:void sendMessage(kim.hsl.handler.Message) 方法名稱被混淆成了 a ;
總結(jié)
以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 安全】DEX 加密 (
- 下一篇: 【Android 安全】DEX 加密 (