一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种用于安卓攻击场景重建的可视化取证系统及实现方法与流程

2021-10-29 21:03:00 来源:中国专利 TAG:取证 重建 场景 攻击 可视化


1.本发明属于计算机技术中数据取证技术领域,涉及的是一种安卓设备攻击行为的场景重建机制,尤其是一种用于安卓攻击场景重建的可视化取证工具及其实现方法。


背景技术:

2.安卓取证是从设备中提取、恢复和分析数据的过程,大致可分为静态方法和动态方法。静态方法是通过分析每个应用程序的目录结构、日志、缓存、sqlite数据库等数据文件,挖掘其中数据的意义,分析用户行为,达到取证的目的。这类方法的特点是可以详细地分析某个应用程序,但是分析时往往需要借助人工,因此有些繁琐和耗时;动态方法是在设备运行过程中,通过捕获网络流量、数据包等动态数据,结合一些攻击监测方法,实时监控设备的安全,并且在攻击发生时及时发出警报。这类方法的优点是适用于大多数软件,而且获取数据的方式也更灵活,难点是如何在设备运行时捕获研究所需的数据。
3.目前,针对社会工程和网络钓鱼攻击的取证研究仍是一项非常有挑战性和耗时的任务。场景重建是一种对大多数攻击取证的有效方法,特别是社会工程和网络钓鱼攻击。为了检测和分析攻击,取证人员需要重建攻击的细节。早期的研究中,大多数使用的是静态技术,即依靠应用程序运行过程中产生的日志、缓存等数据进行场景重建,但是这些数据是稀疏的,而且社会工程和网络钓鱼攻击需要足够的细节数据来重建攻击期间发生的精确视图。
4.场景重建可以提供攻击发生时的可视化视图,通过从受害者的设备中收集数字证据,重新构建攻击场景,让取证人员了解受害者是如何被攻击的并且对未来可能受到的攻击做防范。anglano等人提出了一个自动化工具来模拟用户在android应用程序上的操作,通过监控与用户的交互相关的文件系统,然后从这些文件中提取数据进行场景重建。这类方法突出的问题是大多数应用程序的文件系统(如sqlite数据库)是加密的,因此数据的获取并不理想。neasbitt等人提出了一个轻量级的场景重建工具,通过扩展浏览器的渲染引擎来解决社会工程和钓鱼链接攻击,明确地为谷歌chrome浏览器设计。它通过解析浏览器ui的文档对象模型(dom)树,利用用户操作触发的系统事件记录ui元素,最后回放用户对网站的操作,呈现出攻击的完整路径。这类方法为场景重建提供新的思路,但是其方法适用性欠缺。yang等人通过将低级的系统事件与高级的ui元素相结合,生成因果分析图来重建windows平台上的ui攻击。这类方法的优点是可以为windows的攻击提供可视化视图,但是有些攻击(如社会工程和网络钓鱼攻击)仍可绕过其防御来实施攻击。


技术实现要素:

5.针对现有技术在安卓设备攻击行为的场景重建机制的不足,本发明提出了一种针对安卓应用程序的自顶向下的数字取证工具,通过考虑高级用户界面元素和低级系统事件来重建攻击场景,采用安卓系统sdk提供的adb工具包,监控所有用户操作、ui变化和系统事件,使用时间戳归因法把高级用户界面元素和低级系统事件结合在一起,重建用户在被攻
击过程中的一系列用户活动和系统事件,以可视化的方式表示攻击是如何一步一步执行的,帮助调查人员从头到尾了解攻击细节。
6.本发明安卓设备攻击行为的场景重建是可靠的准确的。与之前android中使用的类似方法不同,我们考虑了ui元素(即攻击的来源)和底层系统事件(即攻击的结果),并基于逻辑和因果关系将它们关联起来,这样可以从视觉和全局的角度来解释攻击的本质。本发明假设android software development kit(sdk)提供的adb工具包是可信的,通过adb命令获取的应用的xml文件和日志不能被篡改,因为对android ui的攻击超出了本研究的范围。本发明的系统从android设备收集不确定的数据(即用户与应用程序用户界面(ui)的交互,设备的运行状态,以及与安全相关的系统事件日志),以可视化的方式表示攻击是如何一步一步执行的,具有细粒度和易于理解的上下文语义。此外,本发明的系统是基于内置的android调试桥(adb)工具包开发的,易于部署,无需修改android设备。本发明由于其能够记录足够详细的数据,包括用户的操作、ui变化以及系统事件,可以有效的追踪每次攻击,特别是社会工程和钓鱼链接攻击,任何攻击都不能绕过该系统。
7.为了达到上述目的,本发明提供如下技术方案:
8.一种用于安卓攻击场景重建的可视化取证方法,包括如下步骤:
9.步骤1,配置阶段
10.开启安卓设备的usb调试模式,安装sdk确保运行环境,然后运行工具,配置模块检测安装设备是否连接,确保只有一个安卓设备连接,并获取安卓设备的基本信息;
11.步骤2,收集阶段
12.工具收到用户的记录命令后,用户操作收集模块、ui收集模块和log收集模块同时开始工作;log收集模块作为守护进程,不断收集与安全相关的日志并放入缓冲区;当用户与安卓设备交互时,用户操作收集模块被触发用于收集并分析用户的操作,同时ui收集模块被触发用于收集ui,最后结果被传递到ui分析模块;
13.步骤3,分析阶段
14.ui分析模块和log过滤模块同时开始工作;ui分析模块结合来自用户操作收集模块和ui收集模块的数据,分析当前ui结构与原始ui结构的区别,以及分析用户操作的结点,结果存储在数据库中;同时,log过滤模块过滤后台活动类型的日志条目,并且处理日志格式,结果存储在数据库中;
15.步骤4,关联阶段
16.工具收到用户的回放命令和设置的时间参数后,关联分析模块开始工作;根据设置的时间参数,关联分析模块从数据库中读取ui结构表、用户操作表和日志表的数据,使用时间戳归因法把它们结合在一起,以html形式展现给用户;
17.步骤5,当关联阶段完成后,等待用户的命令,返回步骤(2)或(4)。
18.进一步的,所述步骤1中安卓设备的基本信息至少包括:安卓设备触摸屏的系统名称、屏幕分辨率和输入事件最大值。
19.进一步的,所述步骤2收集阶段中,用户操作收集模块、ui收集模块监控用户与安卓设备的交互并收集ui相关的数据,log收集模块收集与安全相关的日志数据;
20.所述用户操作收集模块的具体运行步骤如下:
21.a、初始化,用户操作收集模块创建监听进程,等待用户与安卓设备交互;
22.b、收集用户交互信息,当用户与安卓设备交互时,利用配置阶段得到的安卓设备触摸屏的系统名称,用户操作收集模块使用adb工具执行的shell getevent命令收集触摸屏的交互数据;
23.c、分析用户操作,从所有的输入信息中识别一次用户操作信息,根据ev_key/btn_touch down和ev_key/btn_touch up事件的间隔和次数判断用户的操作类型,再利用配置模块得到的安卓设备基本信息,计算坐标转化率将获取到的坐标转化为真实坐标;
24.所述ui收集模块的具体运行步骤如下:
25.a、初始化,ui收集模块创建监听进程,等待用户与安卓设备交互;
26.b、收集应用程序ui和屏幕截图,当用户与安卓设备交互时,ui收集模块使用dump命令获取安卓设备ui的xml文件,并通过push命令将xml文件传输到工具所在平台,ui收集模块还使用screencap命令来获取屏幕截图的png文件;
27.c、解析xml文件,ui收集模块使用基于事件驱动的sax方法来解析xml文件,整个xml文件不需要预先加载,在解析过程中,遇到属性为text且属性值为空的结点,根据该结点的bounds属性来剪切截图,之后对截图执行文本识别,将该结点的属性值填充为文本识别的结果;解析完成后,得到一颗ui的层次树,包括许多ui结点以及结点的详细信息;
28.所述log收集模块的具体运行步骤如下:
29.a、初始化,log收集模块创建守护进程;
30.b、收集并预处理日志,使用adb的logcat命令来收集与安全相关的日志,包括日志优先级为e和w;通过设置logcat参数,使用adb logcat

v time*:w命令对日志进行过滤;数据暂存在缓冲区中,等待下一步处理。
31.进一步的,所述用户操作收集模块的具体运行步骤c包括如下子步骤:
32.(1)监听用户操作的输入\输出流进入该模块;
33.(2)识别输入\输出流中的slot事件,根据安卓的mt协议,一次slot事件包括多条记录,每条记录由事件类型、事件名称和事件值组成,其中开始记录包括三个标签:ev_abs、abs_mt_tracking_id和id值(每次由系统分配),结束记录包括三个标签:ev_syn、syn_report、和id值(默认是00000000);
34.(3)识别一次用户操作信息,一次用户操作至少包括两个slot事件,若slot事件的一条记录包括abs_mt_tracking_id和id值为ffffffff,则说明是一次用户操作的结束,因此两次用户操作的结束中间即为一次用户操作的所有信息;
35.(4)判断用户操作类型,包括点击、滑动和输入;
36.(5)计算真实坐标,配置模块使用adb shell wm size命令获取屏幕分辨率,其参数包括物理高度和物理宽度;接下来,配置模块使用adb shell getevent

p命令获取触摸屏的详细信息,从中获得abs_mt_position_x和abs_mt_position_y的事件最大值,即代码为0035和0036的事件最大值,包括0035的最大值对应的是虚拟宽度,0036的最大值对应的是虚拟高度;之后,用户操作收集模块计算坐标转化率,即宽度转化率和高度转化率,为物理高度/宽度
÷
虚拟高度/宽度;最后,计算真实坐标,即真实x(y)坐标,为abs_mt_position_x(y)
×
宽度/高度转化率。
37.进一步的,所述ui收集模块的具体运行步骤c中的sax解析方法包括如下子步骤:
38.(1)创建处理文档内容相关事件的自定义处理器,处理器中定义对xml中结点的具
体处理方式;
39.(2)创建一个xml解析器,通过sax方式读取解析xml;
40.(3)设置xml解析器的处理文档内容相关事件的处理器;
41.(4)解析xml文档;
42.(5)创建一个临时txt文件,用于暂存解析结果;
43.(6)使用字符流将结果写入txt文件;
44.(7)关闭字符流,返回文件路径。
45.进一步的,所述步骤3分析阶段中,所述ui分析模块的具体运行步骤如下:
46.a、分析用户操作的结点,根据用户操作收集模块得到的用户操作和ui收集模块得到的ui层次树,比对用户操作的坐标与层次树中结点的bounds属性;若坐标包含在bounds中,说明该结点是用户操作的结点;若有多个结点满足该条件,则根据结点的index属性选择最上面的节点;若index属性值相同,则选择最后一个结点;由于用户仅能叶结点交互,因此在分析过程中只分析叶节点;
47.b、存储ui树和用户操作表,根据ui收集模块得到的ui层次树,首先查找数据库的ui结构表中是否已经存储过该ui;若未存储,则将ui层次树作为第二个字段值,而第一个字段值是app的包名和ui对应的类名的组合,同时用户操作表的最后一个字段值存储为null;反之,将数据库中的ui层次树与当前ui层次树匹配,并将它们的不同部分作为用户操作表中最后一个字段的值;用户操作表的前五个字段值在之前的阶段已经确定过;
48.所述log过滤模块的具体运行步骤如下:
49.a、过滤日志条目,定义出现频率高于每2秒一次的为后台活动;该模块把每个日志条目与缓冲区中的内容进行比较;如果它的出现频率高于2秒一次,则删除该日志条目;因为logcat将exception或json数据插入到多个日志条目中,为了更好地可视化,在处理过程中将这些日志条目组合成一个;
50.b、存储日志条目,使用日志表来存储;表中的日志时间表示一个日志事件的时间戳,作为该表的唯一标识,日志appname是触发日志事件的应用程序包的名称,日志优先级表示日志事件的级别,log标记是处理日志事件的应用程序的java类名,log内容是日志事件的详细内容;使用日志appname代替原始日志的pid,因为应用程序每次启动时的pid是不同的;使用adb shell ps命令查找pid对应的包名,并将logcat中的pid转换为对应的应用程序包名。
51.进一步的,所述步骤4关联阶段中关联分析模块的的具体运行步骤如下:
52.a、使用时间戳归因法关联数据,首先该模块将用户操作表和日志表的数据基于时间戳对齐,并且在两个操作之间的系统事件隶属于前一个操作;
53.b、生成html页面,包括还原的ui和操作的位置、ui层次树和操作的结点以及操作所触发的系统事件;首先,该模块读取ui结构表和用户操作表组合为此次操作的完整ui层次树;在生成第一部分时,将原始xml形式的node类型结点转换为html页面的div布局,之后,根据每个结点的bounds,组织div之间的层次关系,同时如果某个结点是用户操作的结点,在html页面中以红色边框表示;然后,完整ui层次树被展示在第二部分;最后,根据a步骤的结果将系统事件展示在第三部分;
54.c、到达规定时间戳停止,该模块在b步骤不断生成html页面作为场景重建的结果,
直到到达用户输入的时间戳为止。
55.进一步的,步骤a中时间戳归因法的原则包括:
56.iii)安卓设备的当前ui在任何时候都只包含一个用户操作;
57.iv)同一时间内由系统事件引起的日志和ui的变化应该表明相同的用户操作。
58.一种用于安卓攻击场景重建的可视化取证系统,包括:配置模块、用户操作收集模块、ui收集模块、ui分析模块、log收集模块、log过滤模块和关联分析模块;
59.所述配置模块用于检测安卓设备是否正常连接,并获取设备基本信息;
60.所述用户操作收集模块用于监控并分析用户如何与android设备的触摸屏交互,包括点击、滑动和输入;当用户操作发生时,该模块从触摸屏和底层系统获取事件;然后提取用户操作的类型和坐标,帮助用户界面树中的节点与用户操作之间的映射;
61.所述ui收集模块用于监控并分析应用程序ui中的更改,并将ui解析为层次树;ui树中定义了六种类型的节点,即按钮、图片、文本、超链接、文件和布局,其中前五种只能是叶节点;
62.所述ui分析模块结合前两个模块的数据分析当前ui结构与原始ui结构的区别,判断是否需要存储当前ui结构,以及分析用户操作的结点,并分别存储在数据库的android应用ui结构表和用户操作表中;
63.所述log收集模块收集与安全相关的日志条目,结果临时存储在日志缓冲区;
64.所述log过滤模块根据日志缓冲区的数据,过滤后台活动类型的日志条目,即不需要用户触发的日志,并且处理日志格式,然后存储在数据库的日志表中;
65.所述关联分析模块结合来自ui结构表、用户操作表和日志表的数据,分析它们之间的关联,并将场景重建的结果以html的形式展现给用户。
66.进一步的,所述ui结构表字段包括:ui唯一标识和ui层次树结构;所述用户操作表字段包括:操作时间、操作类型、对应ui层次树的操作节点、操作的app标识、操作的ui标识和相对原始ui层次树的操作变化部分;所述日志表字段包括:日志时间、日志的app标识、日志优先级、日志标签和日志内容。
67.与现有技术相比,本发明具有如下优点和有益效果:
68.1.提出针对android设备的自顶向下的数字取证工具,将高级应用程序ui元素与低级安全相关的系统事件相结合,重构攻击场景。相比之前的场景重建方法,能够从全局的角度解释攻击的本质,具有细粒度和易于理解的上下文语义。
69.2.本发明方案的实现方法是基于内置的android调试桥(adb)工具包开发的,并且可以在任何安卓系统运行时部署和运行。易于部署,并且无需修改android设备,也弥补了之前方法需要root权限的不足。相对于现有的获取安卓设备数据方法更安全,更灵活,并且场景重建的结果可视化效果更好,适用于大多数攻击场景的重建,特别是社会工程和钓鱼连接攻击。
70.3.本发明采用了java提供的processbuilder类创建、启动和管理进程,分别创建进程监控所有用户操作、ui变化和系统事件,使用时间戳归因法把高级用户界面元素和低级系统事件结合在一起,重建用户在被攻击过程中的一系列用户活动和系统事件,以可视化的方式表示攻击是如何一步一步执行的,帮助调查人员从头到尾了解攻击细节;
71.4.基于动态技术获取安卓设备的数据,在动态分析中使用用户操作收集模块和ui
收集模块可以持续监控用户操作信息和应用界面的变化,log收集模块作为守护进程收集日志数据,而不必从日志、sqlite数据库等中获取稀疏数据,相比之前的方法获取数据更全面。
72.5.在计算机取证过程中,该方法能实时地从android设备收集不确定的数据(即用户与应用程序用户界面的交互,设备的运行状态,以及与安全相关的系统事件日志),以可视化的方式表示攻击是如何一步一步执行的,提供了一条有效的在设备中获取和分析易失性证据的途径。
73.6.本发明使用轻量级的ui存储方式,由于每个应用程序的ui数量有限,并且每次用户对同一个应用程序的同一ui的操作,导致它们ui结构是相似的,因此在存储同一ui时,并不重复存储,而是先存储一个原始完整ui,当用户再次操作该ui时,存储ui的变化部分。
74.7.本发明关联阶段,关联分析模块从数据库中读取ui结构表、用户操作表和日志表的数据,使用时间戳归因法把它们结合在一起,满足准确性,之后结果以html形式展示,可视化效果更好。
附图说明
75.图1为用于安卓攻击场景重建的可视化取证系统的结构示意图。
76.图2为用于安卓攻击场景重建的可视化取证系统的运行状态转移图。
77.图3为用于安卓攻击场景重建的可视化取证系统的各个模块运行流程示意图。
具体实施方式
78.以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
79.图1所示的为本发明提供的用于安卓攻击场景重建的可视化取证系统的结构示意图,包括配置模块、用户操作收集模块、ui收集模块、ui分析模块、log收集模块、log过滤模块和关联分析模块。用户操作收集模块和ui收集模块分别是两个监听进程,log收集模块是一个守护进程
80.本实施例采用了java提供的processbuilder类创建、启动和管理进程,以此使用安卓系统sdk提供的adb工具包,分别创建进程监控所有用户操作、ui变化和系统事件。在工具启动之前,需要确保安卓设备启动usb调试并正常连接到工具所在平台。
81.配置模块可以用于检测安卓设备是否正常连接,并获取设备基本信息。用户操作收集模块和ui收集模块可以持续监控用户操作信息和应用界面的变化。当用户与安卓设备交互时(包括点击、滑动和输入),用户操作收集模块负责收集用户操作的信息,从触摸屏和底层系统获取事件,提取用户操作的坐标和类型,帮助用户界面树中的节点与用户操作之间的映射。同时,ui收集模块监控并分析应用程序ui中的更改,将应用程序ui解析为一个ui层次树。我们在ui树中定义了六种类型的节点,即按钮、图片、文本、超链接、文件和布局,其中前五种只能是叶节点。然后,ui分析模块结合前两个模块的数据分析当前ui结构与原始ui结构的区别,判断ui收集模块的数据是否必须存储在ui结构表中,并结合用户操作收集
模块和ui收集模块的数据,分析用户操作ui层次树的节点,结果存储在用户操作表中。log收集模块收集并预处理与安全相关的日志,并将结果临时存储在日志缓冲区中。然后,log过滤模块处理来自日志缓冲区的数据,过滤后台活动的日志,即不需要用户触发的日志,并且处理日志格式,例如exception和error类型的日志,并将结果存储在日志事件表中。关联分析模块基于时间戳或标记,结合数据库中的用户操作表、ui结构表和日志表,分析它们之间的关联,重构攻击场景。首先,使用基于时间戳的归因方法将用户操作表中的用户操作与日志事件表中的系统事件对齐,以关联攻击的原因和结果。然后查询来自ui结构表和用户操作表的数据,以重建ui和用户操作。最后,将结果以html形式呈现给用户。关联分析模块的结果是由多个html页面组成,每个html页面代表一次用户操作的详细信息,包括三部分:还原的ui和操作的位置、ui层次树和操作的结点以及操作所触发的系统事件。
82.本实施例中的ui结构表字段包括:ui唯一标识和ui层次树结构,用户操作表字段包括:操作时间、操作类型、对应ui层次树的操作节点、操作的app标识、操作的ui标识和相对原始ui层次树的操作变化部分,日志表字段包括:日志时间、日志的app标识、日志优先级、日志标签和日志内容。
83.图2所示的为工具的四个运行状态和四个状态转换过程。其步骤包括:
84.步骤1:配置阶段,通过配置模块检测设备连接情况和获取设备基本信息,为后续收集阶段做准备;本步骤需开启安卓设备的usb调试模式,安装sdk确保运行环境,然后运行工具,配置模块检测安装设备是否连接。
85.步骤2:收集阶段,工具收到用户的记录命令后,用户操作收集模块、ui收集模块和log收集模块同时开始工作,分别收集和预处理用户操作、ui变化和系统日志事件,进入下一阶段;log收集模块作为守护进程,不断收集与安全相关的日志数据并放入缓冲区。当用户与安卓设备交互时,用户操作收集模块被触发用于收集并分析用户的操作,同时ui收集模块被触发用于收集ui,最后结果被传递到ui分析模块。
86.步骤3:分析阶段,ui分析模块和log过滤模块同时开始工作。ui分析模块结合来自用户操作收集模块和ui收集模块的数据,分析当前ui结构与原始ui结构的区别,以及分析用户操作的结点,结果存储在数据库中;同时,log过滤模块过滤后台活动类型的日志条目,并且处理日志格式,结果存储在数据库中;
87.步骤4:关联阶段,工具收到用户的回放命令和设置的时间参数后,关联分析模块开始工作。关联分析模块根据设置的时间参数,从数据库中读取ui结构表、用户操作表和日志表的数据,使用时间戳归因法把它们结合在一起,以html形式展现给用户;
88.步骤5:当关联阶段完成后,等待用户的命令,返回步骤(2)或(4)。
89.图3所示的为工具的各个模块运行流程示意图,更为具体地描述每个模块在各自阶段的运行步骤,其步骤包括:
90.步骤1:配置阶段,通过配置模块检测安卓设备是否连接和已连接的安卓设备数量,并获取安卓设备的基本信息,包括安卓设备触摸屏的系统名称、屏幕分辨率(物理宽度和高度)和输入事件最大值(横坐标和纵坐标最大值);
91.步骤2:收集阶段,利用用户操作收集模块、ui收集模块监控用户与安卓设备的交互并收集ui相关的数据,log收集模块收集与安全相关的日志数据。所述用户操作收集模块的具体运行流程如下:
92.a、初始化,用户操作收集模块创建监听进程,等待用户与安卓设备交互;
93.b、收集用户交互信息,当用户与安卓设备交互时,利用配置阶段得到的安卓设备触摸屏的系统名称,该模块使用adb工具执行的shell getevent命令收集触摸屏的交互数据;
94.c、分析用户操作,从所有的输入信息中识别一次用户操作信息,根据ev_key/btn_touch down和ev_key/btn_touch up事件的间隔和次数判断用户的操作类型,再利用配置模块得到的安卓设备屏幕分辨率和输入事件最大值,计算坐标转化率将获取到的坐标转化为真实坐标。
95.其中,步骤c具体子步骤如下:
96.(1)监听用户操作的输入\输出流进入该模块;
97.(2)识别输入\输出流中的slot事件,根据安卓的mt协议,一次slot事件包括多条记录,每条记录由事件类型、事件名称和事件值组成,其中开始记录包括三个标签:ev_abs、abs_mt_tracking_id和id值(每次由系统分配),结束记录包括三个标签:ev_syn、syn_report、和id值(默认是00000000);
98.(3)识别一次用户操作信息,一次用户操作至少包括两个slot事件,若slot事件的一条记录包括abs_mt_tracking_id和id值为ffffffff,则说明是一次用户操作的结束,因此两次用户操作的结束中间即为一次用户操作的所有信息,例如用户操作的坐标、操作的时间戳等;
99.(4)判断用户操作类型,包括点击、滑动和输入。输入操作通常伴随着点击操作,因此输入操作不会立即触发任何事件,而点击操作可以。滑动操作是由多个点击操作组成。因此,getevent获得的任何类型的用户操作都类似单击操作,包含两个参数:ev_key/btn_touch down和ev_key/btn_touch up。点击操作和滑动操作的区别在于:单击操作只包含一组ev_key/btn_touch down和ev_key/btn_touch up,而对于幻滑动操作,则包含多组;
100.(5)计算真实坐标,配置模块使用adb shell wm size命令获取屏幕分辨率,其参数包括物理高度和物理宽度。接下来,配置模块使用adb shell getevent

p命令获取触摸屏的详细信息,从中获得abs_mt_position_x和abs_mt_position_y的事件最大值,即代码为0035和0036的事件最大值,包括0035的最大值对应的是虚拟宽度,0036的最大值对应的是虚拟高度。之后,用户操作收集模块计算坐标转化率,即宽度转化率和高度转化率,为物理高度(宽度)
÷
虚拟高度(宽度)。最后,计算真实坐标,即真实x(y)坐标,为abs_mt_position_x(y)
×
宽度(高度)转化率。
101.所述ui收集模块的具体运行流程如下:
102.a、初始化,ui收集模块创建监听进程,等待用户与安卓设备交互;
103.b、收集应用程序ui和屏幕截图,当用户与安卓设备交互时,ui收集模块使用dump命令获取安卓设备ui的xml文件,并通过push命令将xml文件传输到工具所在平台。为了避免一些app对ui元素进行了加密,该模块还使用screencap命令来获取屏幕截图的png文件;
104.c、解析xml文件,ui收集模块使用基于事件驱动的sax方法来解析xml文件,整个xml文件不需要预先加载,内存消耗相对较小。在解析过程中,遇到属性为text且属性值为空的结点,根据该结点的bounds属性来剪切截图,之后对截图执行文本识别,将该结点的属性值填充为文本识别的结果。解析完成后,得到一颗ui的层次树,包括许多ui结点以及结点
的详细信息。
105.其中,sax解析方法的具体步骤如下:
106.(1)创建处理文档内容相关事件的自定义处理器,处理器中定义对xml中结点的具体处理方式;
107.(2)创建一个xml解析器,通过sax方式读取解析xml;
108.(3)设置xml解析器的处理文档内容相关事件的处理器;
109.(4)解析xml文档;
110.(5)创建一个临时txt文件,用于暂存解析结果;
111.(6)使用字符流将结果写入txt文件;
112.(7)关闭字符流,返回文件路径。
113.所述log收集模块的具体运行流程如下:
114.a、初始化,log收集模块创建守护进程;
115.b、收集并预处理日志,使用adb的logcat命令来收集与安全相关的日志,包括日志优先级为e(即error)和w(即warning)。通过设置logcat参数,使用adb logcat

v time*:w命令对日志进行过滤。数据暂存在缓冲区中,等待下一步处理。
116.步骤3:分析阶段,利用收集阶段的数据,ui分析模块结合用户操作收集模块和ui收集模块分析ui相关的数据,包括用户操作的结点以及操作造成的ui变化,同时log过滤模块根据log收集模块暂存在缓冲区的数据,过滤无用的日志条目,结果分别存储在数据库中。所述ui分析模块的具体运行流程如下:
117.a、分析用户操作的结点,根据用户操作收集模块得到的用户操作和ui收集模块得到的ui层次树,比对用户操作的坐标与层次树中结点的bounds属性。若坐标包含在bounds中,说明该结点是用户操作的结点;若有多个结点满足该条件,则根据结点的index属性选择最上面的节点;若index属性值相同,则选择最后一个结点。由于用户仅能叶结点交互,因此在分析过程中只分析叶节点;
118.b、存储ui树和用户操作表,根据ui收集模块得到的ui层次树,首先查找数据库的ui结构表中是否已经存储过该ui。若未存储,则将ui层次树作为第二个字段值,而第一个字段值是app的包名和ui对应的类名的组合,同时用户操作表的最后一个字段值存储为null;反之,将数据库中的ui层次树与当前ui层次树匹配,并将它们的不同部分作为用户操作表中最后一个字段的值。用户操作表的前五个字段值在之前的阶段已经确定过。
119.所述log过滤模块的具体运行流程如下:
120.a、过滤日志条目,定义出现频率高于每2秒一次的为后台活动。该模块把每个日志条目与缓冲区中的内容进行比较。如果它的出现频率高于2秒一次,则删除该日志条目。因为logcat将exception或json数据插入到多个日志条目中,为了更好地可视化,在处理过程中将这些日志条目组合成一个;
121.b、存储日志条目,使用日志表来存储,表中的日志时间表示一个日志事件的时间戳,作为该表的唯一标识,日志appname是触发日志事件的应用程序包的名称,日志优先级表示日志事件的级别,log标记是处理日志事件的应用程序的java类名,log内容是日志事件的详细内容。该模块使用日志appname代替原始日志的pid,因为应用程序每次启动时的pid是不同的。该模块使用adb shell ps命令查找pid对应的包名,并将logcat中的pid转换
为对应的应用程序包名。
122.步骤4:关联阶段,根据用户设置的时间参数,关联分析模块结合ui分析模块和log过滤模块存储在数据库中的数据,使用时间戳归因法把它们结合在一起,之后结果以html形式可视化。所述log过滤模块的具体运行步骤如下:
123.a、使用时间戳归因法关联数据,首先该模块将用户操作表和日志表的数据基于时间戳对齐,并且在两个操作之间的系统事件隶属于前一个操作;步骤a的时间戳归因法原则具体包括:
124.(1)安卓设备的当前ui在任何时候都只包含一个用户操作;
125.(2)同一时间内由系统事件引起的日志和ui的变化应该表明相同的用户操作。
126.b、生成html页面,包括还原的ui和操作的位置、ui层次树和操作的结点以及操作所触发的系统事件。首先,该模块读取ui结构表和用户操作表组合为此次操作的完整ui层次树。在生成第一部分时,将原始xml形式的node类型结点转换为html页面的div布局,之后,根据每个结点的bounds,组织div之间的层次关系,同时如果某个结点是用户操作的结点,在html页面中以红色边框表示。然后,完整ui层次树被展示在第二部分。最后,根据a步骤的结果将系统事件展示在第三部分;
127.c、到达规定时间戳停止,该模块在b步骤不断生成html页面作为场景重建的结果,直到到达用户输入的时间戳为止。
128.本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜