基于自动化测试的安卓应用网络行为信息提取系统及方法与流程

文档序号:20838414发布日期:2020-05-22 17:10阅读:212来源:国知局
基于自动化测试的安卓应用网络行为信息提取系统及方法与流程

本发明属于android移动终端软件安全技术领域,特别是一种基于自动化测试的安卓应用网络行为信息提取系统及方法。



背景技术:

在移动智能终端所搭载的操作系统中,google公司推出的android操作系统因为其开放性得到了广泛的应用。随着用户与应用开发者的不断加入,android应用的数量也出现了爆发式的增长。面对海量的应用,如何保证应用的质量成为了亟待解决的难题。由于互联网技术的发展,人们的生活越来越离不开网络,想要在众多的网络行为中发现恶意网络行为是非常具有挑战性的。对android应用进行静态分析的方式往往具有较高的误报率,而在用户实际使用时对网络行为进行管理又会占用较多的资源,并且对于网络行为频繁的应用来说,会严重影响用户的使用体验。因此,若果能够在用户使用之前,对应用在实际使用时可能发生的网络行为进行全面的检测,就会可以减少用户使用时发生的安全问题。

目前针对android应用的自动化测试技术主要有三种:随机测试、基于状态模型的测试以及系统测试。随机测试是随机的生成gui驱动事件来探索应用,在路径过长或路径中约束条件过多时,随机测试不能有效的覆盖,这是因为路径长度未知会使得随机测试产生大量的冗余事件或是因为生成事件太少而导致探索不完全。基于状态模型的测试技术是对程序的状态进行不同粒度的抽象,按照一定策略去探索程序所有可能状态,由于缺乏静态分析,无法根据应用状态描述应用行为,当抽象粒度过细时会遇到状态爆炸的问题,而粒度过粗则不能描述状态细节。系统测试是采用符号执行技术或启发式算法来对特定的路径产生测试用例,能够更加有效的发现应用中难以到达的状态。系统测试依赖于对应用的静态分析,而静态分析结果的准确性也决定了系统测试的效率。这三种自动化测试方法都没有目标导向性,对于网络行为的执行路径覆盖率不理想,同时由于缺少对应用行为的分析,因此当网络行为发生时也不能了解当前网络行为的实际意图。



技术实现要素:

本发明的目的在于提出了一种覆盖率高、应用行为理解能力强的基于自动化测试的安卓应用网络行为信息提取系统及方法。

实现本发明的技术解决方案为:一种基于自动化测试的安卓应用网络行为信息提取系统,包括静态分析模块、字符串分析模块、测试用例生成模块和行为监控与信息提取模块;

所述静态分析模块,用于将android应用的二进制码转换为jimple中间码,采用生命周期建模与组件关联分析生成完整的程序调用图,在程序调用图上使用路径搜索算法计算出程序执行路径,采用符号执行技术对路径进行约束收集与事件收集;

所述字符串分析模块,用于对关键变量值的逆向计算,首先采用符号表达式来表示变量,采用污点传播分析技术不断更新相关变量的符号表达式,然后采用系统函数对表达式中的操作进行模拟还原,计算出最终的变量值;

所述测试用例生成模块,用于将静态分析所得到的事件序列翻译为可以在移动端实际运行的脚本语言,将事件信息中的源信息、事件类型及事件参数转换为对应的python脚本;

所述行为监控与信息提取模块,用于在android应用运行时监控应用状态,当网络行为发生时拦截相关方法并提取出其中参数,网络行为信息用于网络流量分类和是判别否存在恶意行为。

一种基于自动化测试的安卓应用网络行为信息提取方法,包括以下步骤:

步骤1、静态分析模块通过对android应用的apk进行预处理,生成程序调用图;

步骤2、静态分析模块以网络行为作为出发点对程序可能的执行路径进行探索,收集路径上的gui驱动事件以及事件触发的条件;

步骤3、字符串分析模块对关键变量进行字符串求解,确定关键变量的实际值;

步骤4、测试用例生成模块根据收集的事件序列,生成覆盖网络行为执行路径的测试用例;

步骤5、将测试用例注入davilk虚拟机,行为监控与信息提取模块在网络行为发生时拦截方法并提取相关信息。

进一步地,步骤1中所述的静态分析模块通过对android应用的apk进行预处理,生成程序调用图,具体如下:

步骤1.1、使用逆向工程将二进制字节码转换为三地址jimple中间码;

步骤1.2、对中间码进行函数调用分析,构建函数调用图;

步骤1.3、对组件进行关联分析,在函数调用图中添加组件调用关系;

步骤1.4、针对android特有的生命周期函数进行建模,在组件内部添加生命周期函数间调用关系;

步骤1.5、对动态加载方法进行分析,根据反射调用函数在函数调用图中添加相应边;

步骤1.6、解析manifest文件中intent标签中的内容,提取组件调用所需的相关字段对组件进行建模。

进一步地,步骤1中所述的生成程序调用图时,对于组件内部由于回调函数而产生的android应用生命周期函数之间的隐式调用进行了建模分析,符合android应用多入口的特性。

进一步地,步骤2所述的静态分析模块以网络行为作为出发点对程序可能的执行路径进行探索,收集路径上的gui驱动事件以及事件触发的条件,具体如下:

步骤2.1、对网络行为相关方法进行标记;

步骤2.2、从标记点出发,采用深度优先搜索策略,在程序调用图上探索网络行为执行路径,直到搜索到程序入口;

步骤2.3、采用符号执行技术对路径上的约束进行收集并求解,获得路径执行条件;

步骤2.4、对路径中的事件监听器进行分析,获得路径中与用户交互的事件序列。

进一步地,步骤2.4中所述的事件监听器,包括manifest文件中注册的监听器和应用程序中动态注册的监听器。

进一步地,步骤2.4中所述的事件序列,包括与用户交互的gui事件和系统事件。

进一步地,步骤2中所述的gui驱动事件,每个单独的事件由三个参数构成,分别为事件源、事件类型和事件参数;所述事件源的每个widget由唯一的resouce-id确定,对事件监听器进行分析以确定事件类型,对于路径约束中的变量,若变量来源于用户输入则通过字符串分析确定初始值。

进一步地,步骤3中所述的字符串分析模块对关键变量进行字符串求解,具体如下:

当关键变量为字符串类型时,采用逆向污点传播分析技术将关键变量的符号表达式以后缀形式保存在栈结构中,分析完成后利用系统函数对模拟字符串操作对符号表达式进行求解,从而计算出字符串的实际值;由于后缀表达式中不存在括号因此不需要考虑运算的优先级,求解时需要申请一个空的常量栈辅助计算,依次弹出符号表达式中的操作符,若操作符为常量则压入常量栈中,若为字符串操作方法则根据方法所需参数从常量栈中取出相应个数的常量进行计算,计算结果压入常量栈中,当符号表达式为空时常量栈顶元素即为计算结果。

进一步地,步骤5所述的将测试用例注入davilk虚拟机,行为监控与信息提取模块在网络行为发生时拦截方法并提取相关信息,具体如下:

步骤5.1、在移动终端上运行当前测试用例开始进行测试;

步骤5.2、当解释器中执行方法时,根据当前方法是否为敏感api来判断当前方法是否获取了用户隐私信息,若获取了用户隐私则记录获取数据的源信息并执行步骤5.4,若没有获取用户隐私则执行步骤5.3;

步骤5.3、当解释器中执行方法时,判断当前方法是否为网络通信方法,若是网络通信方法则阻塞目标进程并提取网络行为信息,若不是网络通信方法则进入步骤5.5;

步骤5.4、恢复目标进程的运行,继续进行gui事件输入;

步骤5.5、当前测试用例执行完后检查是否所有测试用例都已执行完毕,若是则进入步骤5.6,若不是则执行步骤5.2;

步骤5.6、所有测试用例执行完毕后,根据提取的网络行为信息生成测试报告。

本发明与现有技术相比,其显著优点为:(1)采用静态分析技术在对androidapk分析的基础上生成了程序调用图,针对组件进行建模分析同时加入了对于反射调用的分析,对于组件间的数据通信也能进行有效追踪使得分析结果更加准确;(2)由于静态分析具有较高的覆盖率,使得对于应用的探索更加全面;(3)以网络行为作为目标导向更具有针对性,在用户隐私信息可能的泄露点处对敏感方法进行拦截,判断该行为是否为恶意行为,减少了对于无关行为的分析,因此具有更高的执行效率。

附图说明

图1为本发明基于自动化测试的安卓应用网络行为信息提取系统的架构图。

图2为本发明中的行为监控与信息提取的流程示意图。

具体实施方式

一种基于自动化测试的安卓应用网络行为信息提取系统,包括静态分析模块、字符串分析模块、测试用例生成模块和行为监控与信息提取模块;

所述静态分析模块,用于将android应用的二进制码转换为jimple中间码,采用生命周期建模与组件关联分析生成完整的程序调用图,在程序调用图上使用路径搜索算法计算出程序执行路径,采用符号执行技术对路径进行约束收集与事件收集;

所述字符串分析模块,用于对关键变量值的逆向计算,首先采用符号表达式来表示变量,采用污点传播分析技术不断更新相关变量的符号表达式,然后采用系统函数对表达式中的操作进行模拟还原,计算出最终的变量值;

所述测试用例生成模块,用于将静态分析所得到的事件序列翻译为可以在移动端实际运行的脚本语言,将事件信息中的源信息、事件类型及事件参数转换为对应的python脚本;

所述行为监控与信息提取模块,用于在android应用运行时监控应用状态,当网络行为发生时拦截相关方法并提取出其中参数,网络行为信息用于网络流量分类和是判别否存在恶意行为。

一种基于自动化测试的安卓应用网络行为信息提取方法,包括以下步骤:

步骤1、静态分析模块通过对android应用的apk进行预处理,生成程序调用图;

步骤2、静态分析模块以网络行为作为出发点对程序可能的执行路径进行探索,收集路径上的gui驱动事件以及事件触发的条件;

步骤3、字符串分析模块对关键变量进行字符串求解,确定关键变量的实际值;

步骤4、测试用例生成模块根据收集的事件序列,生成覆盖网络行为执行路径的测试用例;

步骤5、将测试用例注入davilk虚拟机,行为监控与信息提取模块在网络行为发生时拦截方法并提取相关信息。

进一步地,步骤1中所述的静态分析模块通过对android应用的apk进行预处理,生成程序调用图,具体如下:

步骤1.1、使用逆向工程将二进制字节码转换为三地址jimple中间码;

步骤1.2、对中间码进行函数调用分析,构建函数调用图;

步骤1.3、对组件进行关联分析,在函数调用图中添加组件调用关系;

步骤1.4、针对android特有的生命周期函数进行建模,在组件内部添加生命周期函数间调用关系;

步骤1.5、对动态加载方法进行分析,根据反射调用函数在函数调用图中添加相应边;

步骤1.6、解析manifest文件中intent标签中的内容,提取组件调用所需的相关字段对组件进行建模。

进一步地,步骤1中所述的生成程序调用图时,对于组件内部由于回调函数而产生的android应用生命周期函数之间的隐式调用进行了建模分析,符合android应用多入口的特性。

进一步地,步骤2所述的静态分析模块以网络行为作为出发点对程序可能的执行路径进行探索,收集路径上的gui驱动事件以及事件触发的条件,具体如下:

步骤2.1、对网络行为相关方法进行标记;

步骤2.2、从标记点出发,采用深度优先搜索策略,在程序调用图上探索网络行为执行路径,直到搜索到程序入口;

步骤2.3、采用符号执行技术对路径上的约束进行收集并求解,获得路径执行条件;

步骤2.4、对路径中的事件监听器进行分析,获得路径中与用户交互的事件序列。

进一步地,步骤2.4中所述的事件监听器,包括manifest文件中注册的监听器和应用程序中动态注册的监听器。

进一步地,步骤2.4中所述的事件序列,包括与用户交互的gui事件和系统事件。

进一步地,步骤2中所述的gui驱动事件,每个单独的事件由三个参数构成,分别为事件源、事件类型和事件参数;所述事件源的每个widget由唯一的resouce-id确定,对事件监听器进行分析以确定事件类型,对于路径约束中的变量,若变量来源于用户输入则通过字符串分析确定初始值。

进一步地,步骤3中所述的字符串分析模块对关键变量进行字符串求解,具体如下:

当关键变量为字符串类型时,采用逆向污点传播分析技术将关键变量的符号表达式以后缀形式保存在栈结构中,分析完成后利用系统函数对模拟字符串操作对符号表达式进行求解,从而计算出字符串的实际值;由于后缀表达式中不存在括号因此不需要考虑运算的优先级,求解时需要申请一个空的常量栈辅助计算,依次弹出符号表达式中的操作符,若操作符为常量则压入常量栈中,若为字符串操作方法则根据方法所需参数从常量栈中取出相应个数的常量进行计算,计算结果压入常量栈中,当符号表达式为空时常量栈顶元素即为计算结果。

进一步地,步骤5所述的将测试用例注入davilk虚拟机,行为监控与信息提取模块在网络行为发生时拦截方法并提取相关信息,具体如下:

步骤5.1、在移动终端上运行当前测试用例开始进行测试;

步骤5.2、当解释器中执行方法时,根据当前方法是否为敏感api来判断当前方法是否获取了用户隐私信息,若获取了用户隐私则记录获取数据的源信息并执行步骤5.4,若没有获取用户隐私则执行步骤5.3;

步骤5.3、当解释器中执行方法时,判断当前方法是否为网络通信方法,若是网络通信方法则阻塞目标进程并提取网络行为信息,若不是网络通信方法则进入步骤5.5;

步骤5.4、恢复目标进程的运行,继续进行gui事件输入;

步骤5.5、当前测试用例执行完后检查是否所有测试用例都已执行完毕,若是则进入步骤5.6,若不是则执行步骤5.2;

步骤5.6、所有测试用例执行完毕后,根据提取的网络行为信息生成测试报告。

下面结合附图和具体实施例对本发明作进一步详细说明。

实施例

结合图1,本发明一种基于自动化测试的android应用网络行为信息提取系统,包括静态分析模块、字符串分析模块、测试用例生成模块和行为监控与信息提取模块;

所述静态分析模块,用于将android应用的二进制码转换为jimple中间码,采用生命周期建模与组件关联分析生成完整的程序调用图,在程序调用图上使用路径搜索算法计算出程序执行路径,采用符号执行技术对路径进行约束收集与事件收集;

所述字符串分析模块,用于对关键变量值的逆向计算,首先采用符号表达式来表示变量,采用污点传播分析技术不断更新相关变量的符号表达式,然后采用系统函数对表达式中的操作进行模拟还原,计算出最终的变量值;

所述测试用例生成模块,用于将静态分析所得到的事件序列翻译为可以在移动端实际运行的脚本语言,将事件信息中的源信息、事件类型及事件参数转换为对应的python脚本;

所述行为监控与信息提取模块,用于在android应用运行时监控应用状态,当网络行为发生时拦截相关方法并提取出其中参数,网络行为信息用于网络流量分类和是判别否存在恶意行为。

一种基于自动化测试的android应用网络行为信息提取方法,包括以下步骤:

步骤1、静态分析模块通过对android应用的apk进行预处理,生成程序调用图,具体如下:

步骤1.1、使用逆向工程将二进制字节码转换为三地址jimple中间码;

步骤1.2、对中间码进行函数调用分析,构建函数调用图;

步骤1.3、对组件进行关联分析,在函数调用图中添加组件调用关系;

步骤1.4、针对android特有的生命周期函数进行建模,在组件内部添加生命周期函数间调用关系;

步骤1.5、对动态加载方法进行分析,根据反射调用函数在函数调用图中添加相应边;

步骤1.6、解析manifest文件中intent标签中的内容,提取组件调用所需的相关字段对组件进行建模。

进一步地,生成程序调用图时,对于组件内部由于回调函数而产生的android应用生命周期函数之间的隐式调用进行了建模分析,符合android应用多入口的特性。

步骤2、静态分析模块以网络行为作为出发点对程序可能的执行路径进行探索,收集路径上的gui驱动事件以及事件触发的条件,具体如下:

步骤2.1、对网络行为相关方法进行标记;

步骤2.2、从标记点出发,采用深度优先搜索策略,在程序调用图上探索网络行为执行路径,直到搜索到程序入口;

步骤2.3、采用符号执行技术对路径上的约束进行收集并求解,获得路径执行条件;

步骤2.4、对路径中的事件监听器进行分析,获得路径中与用户交互的事件序列。

所述事件监听器,包括manifest文件中注册的监听器和应用程序中动态注册的监听器;所述事件序列,包括与用户交互的gui事件和系统事件。

所述gui驱动事件,每个单独的事件由三个参数构成,分别为事件源、事件类型和事件参数;所述事件源的每个widget可以由唯一的resouce-id确定,对事件监听器进行分析可以确定事件类型,对于路径约束中的变量,若变量来源于用户输入则通过字符串分析确定其初始值。

步骤3、字符串分析模块对关键变量进行字符串求解,确定关键变量的实际值,具体如下:

当关键变量为字符串类型时,采用逆向污点传播分析技术,利用系统函数对字符串操作进行模拟,从而计算出字符串的实际值。由于后缀表达式中不存在括号因此不需要考虑运算的优先级,求解时需要申请一个空的常量栈辅助计算,依次弹出符号表达式中的操作符,若操作符为常量则压入常量栈中,若为字符串操作方法则根据方法所需参数从常量栈中取出相应个数的常量进行计算,计算结果压入常量栈中,当符号表达式为空时常量栈顶元素即为计算结果。步骤4、测试用例生成模块根据收集的事件序列,生成覆盖网络行为执行路径的测试用例;

步骤5、将测试用例注入davilk虚拟机,行为监控与信息提取模块在网络行为发生时拦截方法并提取相关信息,具体如下:

步骤5.1、在移动终端上运行当前测试用例开始进行测试;

步骤5.2、当解释器中执行方法时,根据当前方法是否为敏感api来判断当前方法是否获取了用户隐私信息,若获取了用户隐私则记录获取数据的源信息并执行步骤5.4,若没有获取用户隐私则执行步骤5.3;

步骤5.3、当解释器中执行方法时,判断当前方法是否为网络通信方法,若是网络通信方法则阻塞目标进程并提取网络行为信息,若不是网络通信方法则进入步骤5.5;

步骤5.4、恢复目标进程的运行,继续进行gui事件输入;

步骤5.5、当前测试用例执行完后检查是否所有测试用例都已执行完毕,若是则进入步骤5.6,若不是则执行步骤5.2;

步骤5.6、所有测试用例执行完毕后,根据提取的网络行为信息生成测试报告。

本发明采用静态分析技术在对androidapk分析的基础上生成了程序调用图,针对组件进行建模分析同时加入了对于反射调用的分析,对于组件间的数据通信也能进行有效追踪使得分析结果更加准确;由于静态分析具有较高的覆盖率,使得对于应用的探索更加全面;以网络行为作为目标导向更具有针对性,在用户隐私信息可能的泄露点处对敏感方法进行拦截,判断该行为是否为恶意行为,减少了对于无关行为的分析,因此具有更高的执行效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1