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加固”的壳


  • 相关阅读:

    k
    通过类名调用类方法
    类Area的getArea方法是一个重载方法
    构造cry
    两个lader对象共享bottom
    向一个方法的基本数据类型参数传值
    Circle
    常量的用法
    显示本机时间
  • 原文地址:https://www.cnblogs.com/fengju/p/6174444.html
Copyright © 2011-2022 走看看