美文网首页
Android ProguardGui工具还原混淆log

Android ProguardGui工具还原混淆log

作者: xlq | 来源:发表于2019-07-23 20:15 被阅读0次
    · 本人亲身体会,被坑的差点锤电脑,不写下来,浑身难受。
    · 首先,如何混淆,不用多说,请Surf the Internet !

    当代码被混淆后,用户发生了bug,被某些监控机制所监控到,留给程序员的,只有log。被混淆的log一般长这样:

    07-23 18:53:37.453  4041  4041 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    07-23 18:53:37.453  4041  4041 E AndroidRuntime:    at com.example.franklin.a.d(TestBug.java)
    07-23 18:53:37.453  4041  4041 E AndroidRuntime:    at com.example.franklin.a.c(TestBug.java)
    07-23 18:53:37.453  4041  4041 E AndroidRuntime:    at com.example.franklin.a.b(TestBug.java)
    07-23 18:53:37.453  4041  4041 E AndroidRuntime:    at com.example.franklin.a.a(TestBug.java)
    

    肯定,这种a、b、c什么的,是没法知道代码位置的,需要我们去还原。具体做法:
    1. 修改log格式。得改成这样婶儿的:

    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at com.example.franklin.a.d(TestBug.java)
    at com.example.franklin.a.c(TestBug.java)
    at com.example.franklin.a.b(TestBug.java)
    at com.example.franklin.a.a(TestBug.java)
    

    除了第一行和最后一行,其他行都必须是 at 开头哦,ProguardGui蠢得要死,不然识别不了。

    2. 拿到报错版本对应的mapping.txt文件。注意:一定要是对应报错版本的mapping
    每个版本编译的时候,只要设置没错,都会生成一个mapping文件,这个玩意就是源代码和混淆代码的映射关系。默认位置:app\build\outputs\mapping\hanjuBbc\release\mapping.txt (在没有被其他程序员改动位置的情况下哦!)

    3. 启动工具ProguardGui。该工具JAVA SDK中有集成的。 位置:sdk\android-sdk\tools\proguard\bin(Windows系统哈),双击运行proguardgui.bat文件,会自动启动工具。

    4. 使用工具还原。工具我就不截图了 ,凭想象说一下。左边的一列按钮中点击最后一个叫ReTrace的按钮,此时界面中有两个地方空白,依次填入mapping文件路径和改了格式的混淆log,最后点击右下角按钮Retrace。就好啦!
    得到还原出的log如下:

    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at com.example.franklin.TestBug.testFour(TestBug.java)
    at com.example.franklin.TestBug.testThree(TestBug.java)
    at com.example.franklin.TestBug.testTwo(TestBug.java)
    at com.example.franklin.TestBug.testOne(TestBug.java)
    

    看到这里,或许已经有人能解决问题了,但是我相信,仍然有人没有还原出来。本人就是其中之一。

    原因: 我司的前任Android开发人员,给代码加了高级混淆。即使用一系列不规范的字符或者中文,将a、b、c、d等进行进一步的混淆,导致编译器无法还原。(坑爹啊)

    请在proguard-rules.pro文件中,搜索obfuscationdictionary关键字,该关键字就是添加了一个不规则字符的txt。 在经过商议之后,我司决定将高级混淆去除,这样后续被混淆的log就能轻松还原啦!

    相关文章

      网友评论

          本文标题:Android ProguardGui工具还原混淆log

          本文链接:https://www.haomeiwen.com/subject/kjtzlctx.html