Chapter8——动态调试Android程序

DDMS  

DDMS(Dalvik Debug Monitor Server)就是动态调试的一个工具(不知Android L之后会不会改名--!)。DDMS提供文件浏览、Logcat、Method Profiling等功能。

 

定位关键代码

1.代码注入法

用Apktool反编译得到smali,查找onClick(),比如要找程序注册码,仔细阅读之后发现比对注册码与用户输入的函数

invoke-virtual {v1, v0},Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z

move=result v3

if-eqz v3, :cond_2

那么加入Log.v()来输出v0寄存器:

const-string v3, "SN"

invoke-static {v3, v0},Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

然后用Apktool打包、签名,

用"adb logcat -s SN:v"输出SN。

 

2.栈追踪法

代码注入配合Logcat好用但是需要阅读大量反汇编代码来找「输出点」。

栈追踪法也属于注入的范畴。

比如要找一个Toast是啥时候被调用的,不用阅读太多反汇编代码,而是定位到Toast,然后在这一段之后加入

new Exception("print trace").printStackTrace();

对应smali在书上就不写了。

然后打包签名运行,

在CMD输入"adb logcat -s System.err:V *W"

会以堆栈的方式,先输出java.lang.Exception print trace

然后输出从程序启动到printStackTrace()执行期间所有被调用过的方法。

Chapter8——动态调试Android程序,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。