zoukankan      html  css  js  c++  java
  • Android crash特殊位置定位


                                                           本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


    通常情况下,在我们开发的过程中遇到的crash,可以到logcat中找原因;如果做定制App,对方用Monkey等测试时,要确定准确的位置却并非易事,举例说明:

     01-02 01:03:46.485 W/System.err( 5575): java.lang.NullPointerException: java.lang.NullPointerException 
     01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.j.a(unknow) 
     01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.a.a(unknow) 
     01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.a.a(unknow) 
     01-02 01:03:46.485 W/System.err( 5575): at com.maomao.util.u.run(unknow) 
     01-02 01:03:46.485 W/System.err( 5575): at java.lang.Thread.run(Thread.java:838)

    这样的错误,我们怎么看呢,而且还会判断具体哪个位置会出错?

    因为代码都被混淆过,命名没有固定规律,随机从”a-z“中取一个或者两个字母命名,这个时候就需要有相当水准!

    首先从下往上看,因为调用关系是这样的。

    util.u.run:Thead的run方法出错,那就找到util包下包含run方法的类,

    core.b.a.a:上面的方法调用了core包下,a包内的a方法

    core.b.a.a:又一个这样的方法,同理,上面的方法调用了本类当中的一个方法

    core.b.j.a:上面的方法又调用了j中的a方法

    这样我们就可以定位大概的位置,一般情况下加上try...catch语句,把异常抛出即可!


    我们再来分析一个例子:主要来确定某此.后跟的是类,某些.后跟的是方法。

    E/AndroidRuntime( 3870): java.lang.NullPointerException: java.lang.NullPointerException
    E/AndroidRuntime( 3870): at com.maomao.core.b.j.ab(j.java)
    E/AndroidRuntime( 3870): at com.maomao.b.j.a(j.java)
    E/AndroidRuntime( 3870): at com.maomao.application.a.c(a.java)
    E/AndroidRuntime( 3870): at com.maomao.application.a.b(a.java)
    E/AndroidRuntime( 3870): at com.maomao.application.b.run(b.java)
    E/AndroidRuntime( 3870): at java.lang.Thread.run(Thread.java:857)

    区别在于第一种是System.err,是虚拟机Dalivk抓住的bug,第二种是Android Runtime在运行期间抓住的bug

    1、Thread.run:仍然从下往上看此调用关系,又是run方法出错

    2、b.run:调用application类下b,b肯定是一个类不是一包,为什么呢?下面紧跟一run方法

    3、a.c:上面的run方法又调用a,a就可能是一个包,也可能是一个类,最后调用的是b方法,当然这个地方的判断要看上面方法的调用,找到run方法已经可以判断这是个包或者是个类。

    4、a.b:同理,可能调用是a类中的c方法后,也可能是调用a包中的c类后再调用a包中的b类

    5、b.j.a:明显这就是b包下j类的a方法

    6、b.j.ab:不要觉得此ab比上面a多一字母而不解,其他都是一样的,ab也是一方法,与a无差别

    那很明确,最后就是b.j.ab方法出现出指针!

    解决方案:要不初始化一下,要不直接try...catch不管这个错误。


    查看apk相关信息,要进入aapt.exe所在目录,之前放在tools目录下,现在放在“sdkuild-tools23.0.3”这样具体的目录下,了解更多: 

    aapt 命令可应用于查看apk包名、主activity、版本等很多信息

    最后再讲一个反编译(可反编译微信支付宝百度地图等):

    反编译主要是学习别人的思路,不可作恶!

    一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip

    二、用zip解压缩LianyunHelper3.0.11.zip文件

    三、从解压缩的文件夹中取出classes.dex文件并放到d2j-dex2jar 所在目录

    四、运行cmd命令,进入d2j-dex2jar 所在的目录,输入d2j-dex2jar classes.dex即可生成classes.dex.dex2jar.jar文件

    五、用jd-gui工具打开classes.dex.dex2jar.jar文件,即可看到源码

    六、将AndroidManifest.xml文件放到AXMLPrinter2.jar所在目录,运行cmd命令,进入 AXMLPrinter2.jar所在目录,输入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。

    下载地址:工具

    360加固请参考下面两篇:

    Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正

    Apk脱壳圣战之---脱掉“360加固”的壳


  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/fengju/p/6174444.html
Copyright © 2011-2022 走看看