本文来自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目录下,现在放在“sdk\build-tools\23.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加固”的壳

Android crash特殊位置定位的更多相关文章

  1. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  2. android EditText光标位置(定位到最后)

    方法:edittext.setSelection(int); et.setText(content);//设置EditText控件的内容et.setSelection(content.length() ...

  3. Android Crash 定位

    本文介绍了如何在 Android 手机发生 Crash 时进行 Log 分析的方法, 它可以帮助测试人员快速定位 Android 手机 Crash 发生的原因,同时给研发人员提供有效修改 Bug 的 ...

  4. Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  5. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  6. Xcode如何快速定位crash的位置?

    最近发现经常有人程序崩掉后不知道怎么定位crash的位置 如何快速定位crash的位置? 选择右箭头 选择Add Exception Breakpoint 这样如果你的app再crash就会自动定位到 ...

  7. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

  8. Linux内核crash/Oops异常定位分析方法

    在内核开发的过程中,经常会碰到内核崩溃,比如空指针异常,内存访问越界.通常我们只能靠崩溃之后打印出的异常调用栈信息来定位crash的位置和原因.总结下分析的方法和步骤. 通常oops发生之后,会在串口 ...

  9. jQuery学习笔记(控件位置定位、尺寸大小的获取等)

    想做一个幽灵按钮出来,效果大概如下图: 当点击按钮的时候,会有四根线条从四个方向飞入,经历从“无-有-无”的闪入过程. 那么我的设计想法是,先在HTML中定义一个按钮,然后在jQuery中设计按钮点击 ...

随机推荐

  1. Unique Binary Search Trees [LeetCode]

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  2. MVC 与传统的 webform 的比较

    代码架构方式 ASP 脚本语言和代码同置,每个请求页面对应一个物理文件 WebForm 代码后置 ,每个请求页面对应dll和一个.asp物理文件 MVC 代码分离,每个请求对应一个Action和一个V ...

  3. Python输出内容的三种方式:print输出 python脚本执行 linux直接执行

    1.  在linux中安装python后,在linux命令行中输入python即可切换到Python命令行下 退出python命令行的命令: 老版本:ctrl+D 新版本:quit();或exit() ...

  4. Jenkins简单使用介绍

    一.Jenkins的配置 1. 下载地址: Jenkins的官方网站:http://jenkins-ci.org/ 目前最新版本的Windows版:http://mirror.xmission.com ...

  5. JavaScript EventLoop

    转自:http://cek.io/blog/2015/12/03/event-loop/ What is JavaScript What is JavaScript anyway? Some word ...

  6. BZOJ1722 [Usaco2006 Mar] Milk Team Select 产奶比赛

    直接树形dp就好了恩 令$f[i][j][t]$表示以$i$为根的子树,选出来的点存在$j$对父子关系,$t$表示$i$这个点选或者没选,的最大产奶值 分类讨论自己和儿子分别有没有选,然后转移一下就好 ...

  7. qml json 解析到 ListView

    https://github.com/kromain/qml-utils/tree/master/JSONListModel 非常棒!! 实现的原理如下文: http://goessner.net/a ...

  8. centos ssh配置使用

    配置 数据阶梯 CentOS SSH配置 默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此.所以这里就不介绍OpenSSH的安装了. SSH配置: 1.修改vi /etc/ssh/ ...

  9. 喜讯!Ubuntu 16.10(Yakkety Yak) Final Beta发布喽!!!

    上月三十日,代号为"Yakkety Yak"的Ubuntu 16.10发行版本的Final Beta正式上线.Canonical的开发者Steve Langasek说道:" ...

  10. document.cookie的使用

    设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次 ...