UI Automator Viewer—分析View结构

Posted by Jieming Gu on 2016-12-27

控件的点击事件作为分析App算法的入口,在逆向中占据举足轻重的地位。如果要找到对应的点击事件,首先要找到控件的定义。那么问题来了,如何能够快速地找到控件的定义呢?

实验说明

实验选取唯品会App,以“忘记密码”功能为例,利用UI Automator Viewer进行分析。

分析

uiautomatorviewer.bat位于Android SDK/tools目录下,点击运行,把设备停在登陆界面,点击左上角第二个按钮,对当前界面进行布局分析,效果如下:

1

从分析结果可以看出TextView的id是btn_findpassword这个id非常关键后面就是用id进行跟踪。下图是登陆界面的详细布局:

2

因为有TextView的id,找到对应的id值后可以用id值进行全局搜索来查找TextView的调用情况。反编译APK后,APK所有的资源id/id值都会保存在public.xml,public.xml放在values目录下。反编译后的代码中不会用R.id.xxx的形式访问控件,而是用转化后的id值(十进制),所以先用btn_findpassword去public.xml中找到对应的十六进制id值:

3

注意:这里在查找btn_findpassword对应的id值时,发现有多个匹配项,需要用type字段区分。type字段有多种取值,例如:layoutdrawablestringattrid,因为TextView是控件所以type字段取id

直接在Android Killer中全局搜索:

4

打开Jeb,找到控件对应的点击事件:

5

双击跳转,找到“忘记密码”的实现逻辑,分析完毕。

6

7

总结

逆向过程会发现工作量非常庞大,对于逆向来说非常艰难,还好有一些强大的工具可以快速地定位问题,下面就来总结本文收获的知识。

对于逆向中想得到的控件点击事件入口,可以通过以下步骤进行:

  1. 使用UI Automator Viewer得到指定控件的id;
  2. 通过id在反编译后的public.xml中查找对应的id值;
  3. 利用Android Killer自带的全局搜索功能,查找控件的调用情况。

这套方法行之有效,并且普遍适用。