方法栈跟踪
Log插桩调试smali代码
DDMS工具使用
快速定位关键代码
Smali文件详解
主要用于热点分析和性能优化。除了可以记录每个函数占用的CPU时间外,还可以跟踪所有的函数调用关系,并提供比栈跟踪法更详细的函数调用序列报告。
今天我们以“好搜小说大全.apk”文件作为案例,打开“好搜小说大全.apk”,点击APP程序主页面底部菜单栏的“我的”选项卡,进入“我的”页面,如下图所示,点击“未登录”按钮进入登录页面,如下图所示。
在编辑框中输入账号和密码就可以登录。在这里输入的账号为“易锦大学”,密码是“yijindaxue319”,如图8.3所示,点击“立即登录”按钮进行登录,如图8.4所示。此时提示“账号不存在”,这是因为没有注册这个账号,当然这不影响我们分析程序的登录逻辑。在这里需要注意,如果频繁点击“立即登录”按钮,会出现验证码编辑框,此时需要填写验证码才能点击登录按钮,如下图所示。
在了解APP的登录功能之后,我们接下来使用DDMS工具来分析程序的登录逻辑。
打开“DDMS”工具,在进程列表里面找到“好搜小说大全”APP的包名如下图所示。
点击选中程序包名,发现顶部的菜单栏变亮,说明相应的功能可以使用,如下图所示。
点击菜单栏第五个按钮,弹出一个对话框, Sample based profiling :自动过滤,有方法数限制方框内参数可以根据需要修改。 Trace based profiling :捕获所有方法调用信息,如下图所示。
依次点击“OK”开始方法剖析=>“立即登录”=>点击菜单栏的第五个按钮结束方法剖析,如下图所示。
之后会生成方法详细调用流程图,方法的调用流程是自上而下的,所有阅读方法列表信息都是自上而下来看的,如下图所示。
Parents : 父结点当前方法的上层调用 Children :子结点当前方法的下层调用
常用字段的属性说明如下表所示:
探究:如何筛选那么多的方法的信息呢?
技巧一:在点击“OK”开始方法剖析之前,调整雷电模拟器的位置。
将雷电模拟器放在DDMS工具的左边,方便在点击“OK”按钮之后迅速点击“立即登录”按钮,然后点击菜单栏的第五个按钮结束方法剖析。
探究:为什么要迅速点击呢?
因为分析该程序的登录逻辑,当点击“OK”开始方法剖析那一刻,就会记录相关方法的调用。此时,如果操作速度不够快的话,就会导致记录的方法调用信息过多,就需要花时间去筛选信息,给寻找关键方法带来了困难。
技巧二:根据包名信息进行筛选和过滤。
以java开头、android开头、org开头的都是系统的方法,可以直接过滤掉。 还可以根据反编译后的smali文件夹下的相关包名信息进行记录,方便在阅读方法调用流程表时快速筛选信息,定位关键方法。
技巧三:使用Traceview工具提供的搜索功能,直接输入包名或者方法名进行筛选,如下图所示。
使用以上的3个技巧,再来操作一遍,看看效果如何。 (1)使用第一个技巧将雷电模拟器放在DDMS工具的左边,点击“OK”开始方法剖析,迅速点击“立即登录”,再点击菜单栏的第五个按钮结束方法剖析。生成方法调用流程图,对比一下,方法调用信息变少了。
我们看到,在页面的最下方是“find”搜索选项,那么接下来,通过第三个技巧,在该搜索框内直接输入包名或方法名进行搜索,如下图所示。
但问题是,这里究竟要输入什么呢?我们知道,点击按钮时会触发一个点击事件,内部会调用“onClick”方法来处理,所以在分析登录、注册等逻辑时,都会优先搜索“onClick”方法。 (2)接下来我们就直接搜索“onClick”方法回车,就定位到了“onClick”方法所在位置,假设搜索不到,那就需要采用第二个技巧来分析程序的逻辑了,如图8.13所示。 (3)接下来分析它的登录功能。
这一次学习了Method Profiling 具体操作:点击菜单栏第五个按钮=>点击“OK”开始方法剖析 =>迅速点击“立即登录”=>点击菜单栏的第五个按钮结束方法剖析。 方法剖析过程中的3个技巧:在点击“OK”开始方法剖析之前,调整雷电模拟器的位置。根据包名信息进行筛选和过滤。使用Traceview工具提供了搜索功能,直接输入包名或者方法名进行筛选。
如果你也对安卓逆向感兴趣。可以加下方的群,大家一起讨论问题,或者扫描下方二维码,关注回复 “安卓逆向” 获取免费教程
安卓逆向交流学习:1139349849 vx:Yjxiaox