CN106330599A - Android应用程序网络流量多线程采集系统及方法 - Google Patents
Android应用程序网络流量多线程采集系统及方法 Download PDFInfo
- Publication number
- CN106330599A CN106330599A CN201610681572.XA CN201610681572A CN106330599A CN 106330599 A CN106330599 A CN 106330599A CN 201610681572 A CN201610681572 A CN 201610681572A CN 106330599 A CN106330599 A CN 106330599A
- Authority
- CN
- China
- Prior art keywords
- application program
- android
- android application
- sub
- threads
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0876—Network utilisation, e.g. volume of load or congestion level
Landscapes
- Engineering & Computer Science (AREA)
- Environmental & Geological Engineering (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了Android应用程序网络流量多线程采集系统及方法;步骤:判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;提取Android应用程序的基本信息,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;接收数组链表;根据得到的线程数量,控制全部的子线程启动;根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。本发明具有批量式的获取Android终端应用程序产生的流量的优点。
Description
技术领域
本发明涉及Android应用程序网络流量多线程采集系统及方法。
背景技术
Android应用程序网络流量数据集是目前很多安全研究人员研究的对象。恶意Android应用程序会在运行时与恶意目标建立网络连接,因此从网络流量的角度上也可以防范Android恶意应用程序。
但目前Android应用程序产生的网络流量在收集过程中有以下问题:
(1)大规模流量的获取途径单一,即研究人员只能从网络运营商处获取网络流量,这样做无法区分单个应用程序的网络流量,给后续研究带来问题;
(2)手动的采集网络流量,即在Android终端或者Android模拟器上人工的运行Android应用程序,然后通过代理或者网关收集的方式获取应用程序的网络流量,这样收集的网络流量数据集很小,不适合做大规模的机器学习实验;
(3)进行自动化的移动终端网络流量采集过程中,没有对应用程序的运行产生触发事件,即无法模拟人在使用应用程序时的操作。
发明内容
本发明的目的就是为了解决上述问题,提供Android应用程序网络流量多线程采集系统及方法,它具有批量式的获取Android终端应用程序产生的流量的优点。
为了实现上述目的,本发明采用如下技术方案:
Android应用程序网络流量多线程采集方法,包括如下步骤:
步骤(1):判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则进入步骤(2);
步骤(2):根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;
步骤(3):提取Android应用程序的基本信息,检测基本信息中的SDK版本,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;
步骤(4):接收数组链表,根据步骤(2)中得到的线程数量,控制全部的子线程启动;
步骤(5):根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。
优选的,所述步骤(3)通过Android AssetPackaging工具提取出应用程序的MainActivity、packetname和minSDKVersion信息。
所述步骤(2)包括如下步骤:
判断输入参数是设定的线程数量还是Android应用程序的数量;若是设定的线程数量,则直接输出线程数量;若是Android应用程序的数量,则检测计算机的剩余资源,根据单个Android虚拟机运行所消耗资源和计算机的剩余资源,通过计算得出当前计算机能够容纳的线程数量;将计算得出的线程数量输出。
优选的,所述步骤(2)中计算机的剩余资源是指计算机内存剩余量和CPU剩余量。
所述步骤(3)包括如下步骤:
步骤(31):对AndroidManifest文件进行反编译操作;检测反编译是否成功,反编译如果失败,则记录错误信息后结束;反编译如果成功,则在反编译后的AndroidManifest文件中提取应用程序的基本信息;
步骤(32):检测基本信息中的SDK版本,判断是否存在minSDKVersion信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
步骤(33):将提取出来的应用程序的信息打包成信息数组,存入数组链表中。
优选的,所述步骤(31)中调用Android Asset Packaging工具中的aapt dumpbadging命令对AndroidManifest文件进行反编译操作。
优选的,所述步骤(31)中应用程序的基本信息包括:MainActivity,packet name和minSDKVersion信息。
优选的,步骤(32):检测基本信息中的SDK版本(software development kit即软件开发工具包,SDK版本可以理解为android系统的版本),是否存在minSDKVersion(应用程序可以运行的最低的SDK版本)信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
所述步骤(4)包括如下步骤:
步骤(41):创建一个子线程,并将启动参数传入;所述启动参数包括子线程需要检测的应用程序数组链表和SDK版本。
步骤(42):判断创建的子线程数量是否达到设定数量,如果未达到设定的子线程数量,则返回步骤(41)继续创建子线程;如果创建的子线程数量达到设定的数量,则启动全部子线程;
步骤(43):主程序阻塞,等待子线程全部执行完毕。
所述步骤(5)包括如下步骤:
步骤(5-1):在数组链表中提取一组数据,检测数据是否完整有效;如果数据不完整或者存在无效字符,则说明Android应用程序提取的信息有误,跳转至步骤(5-7)跳过该应用程序;如果数据是完整并且有效的,则根据SDK版本创建Android虚拟机;启动Android虚拟机;
步骤(5-2):安装Android应用程序;检测该应用程序是否安装成功;如果应用程序安装成功,则进入步骤(5-4);如果应用程序没有安全成功,则进入步骤(5-3);
步骤(5-3):判断是否是首次安装失败,如果是就返回步骤(5-2);若否则跳转至步骤(5-6);
步骤(5-4):重启Android虚拟机,启动采集网络流量的tcpdump工具以及重启前安装的Android应用程序;
步骤(5-5):判断应用程序是否启动成功,如果启动失败,则跳转至步骤(5-6);如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境;待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,跳转至步骤(5-6)。
步骤(5-6):关闭并删除Android虚拟机;进入步骤(5-7);
步骤(5-7):检测Android应用程序信息数组链表中是否还有Android应用程序;如果有,则提取一组待采集网络流量的应用程序后跳转至步骤(5-1),如果没有,则结束。
Android应用程序网络流量多线程采集系统,包括:
Android应用程序是否存在判断模块:判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则进入线程数量配置模块;
线程数量配置模块:根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;
Android应用程序的基本信息提取模块:提取Android应用程序的基本信息,检测基本信息中的SDK版本,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;
子线程启动模块:接收数组链表;根据线程数量配置模块中得到的线程数量,控制全部的子线程启动;
网络流量采集模块:根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。
优选的,所述Android应用程序的基本信息提取模块通过AndroidAssetPackaging工具提取出应用程序的MainActivity、packetname和minSDKVersion信息。
所述线程数量配置模块包括:
判断输入参数是设定的线程数量还是Android应用程序的数量;若是设定的线程数量,则直接输出线程数量;若是Android应用程序的数量,则检测计算机的剩余资源,根据单个Android虚拟机运行所消耗资源和计算机的剩余资源,通过计算得出当前计算机能够容纳的线程数量;将计算得出的线程数量输出。
优选的,所述线程数量配置模块中计算机内存资源空闲情况是指计算机内存剩余量和CPU剩余量。
所述Android应用程序的基本信息提取模块包括:
反编译子模块:对AndroidManifest文件进行反编译操作;检测反编译是否成功,反编译如果失败,则记录错误信息后结束;反编译如果成功,则进入信息获取子模块;
信息获取子模块,在反编译后的AndroidManifest文件中提取应用程序的基本信息;
SDK版本检测子模块:检测基本信息中的SDK版本,判断是否存在minSDKVersion信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
打包子模块:将提取出来的应用程序的信息打包成信息数组,存入数组链表中。
优选的,所述反编译子模块中调用Android Asset Packaging工具中的aapt dumpbadging命令对AndroidManifest文件进行反编译操作。
优选的,所述反编译子模块中应用程序的基本信息包括:MainActivity,packetname和minSDKVersion信息。
优选的,SDK版本检测子模块:检测基本信息中的SDK版本(software developmentkit即软件开发工具包,SDK版本可以理解为android系统的版本),是否存在minSDKVersion(应用程序可以运行的最低的SDK版本)信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
所述子线程启动模块包括如下步骤:
子线程创建子模块:创建一个子线程,并将启动参数传入;所述启动参数包括子线程需要检测的应用程序数组链表和SDK版本。
子线程数量检测子模块:判断创建的子线程数量是否达到设定数量,如果未达到设定的子线程数量,则返回子线程创建子模块继续创建子线程;如果创建的子线程数量达到设定的数量,则启动全部子线程;
子线程执行等待子模块:主程序阻塞,等待子线程全部执行完毕。
所述网络流量采集模块包括如下步骤:
数据检测子模块:在数组链表中提取一组数据,检测数据是否完整有效;如果数据不完整或者存在无效字符,则说明Android应用程序提取的信息有误,跳转至Android应用程序剩余检测子模块,跳过Android应用程序;如果数据是完整并且有效的,则根据SDK版本创建Android虚拟机;启动Android虚拟机;
Android应用程序安装子模块:安装Android应用程序;检测该应用程序是否安装成功;如果应用程序安装成功,则进入Android虚拟机重启子模块;如果应用程序没有安全成功,则进入首次安装失败与否检测子模块;
首次安装失败与否检测子模块:判断是否是首次安装失败,如果是就返回Android应用程序安装子模块;若否则跳转至Android虚拟机删除子模块;
Android虚拟机重启子模块:重启Android虚拟机,启动采集网络流量的tcpdump工具以及重启前安装的Android应用程序;
应用程序启动成功检测子模块:判断应用程序是否启动成功,如果启动失败,则跳转至Android虚拟机删除子模块;如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境;待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,跳转至Android虚拟机删除子模块。
Android虚拟机删除子模块:关闭并删除Android虚拟机;进入Android应用程序剩余检测子模块;
Android应用程序剩余检测子模块:检测Android应用程序信息数组链表中是否还有Android应用程序;如果有,则提取一组待采集网络流量的应用程序后跳转至数据检测子模块,如果没有,则结束。
本发明的有益效果:
(1)充分考虑到了在大量采集Android终端应用程序产生的网络流量时的效率问题,采用多线程的方式,每条线程控制一台Android虚拟机进行网络流量采集,使得一台PC机可以同时采集多个Android应用程序产生的网络流量。
(2)Android终端的创建、应用程序的安装运行、网络流量的收集等工作可以自动化的完成;Android应用程序网络流量采集过程是自动化进行的,并在自动化过程中加入编写的操作脚本,模拟人在使用Android应用程序时的操作,使产生的网络流量更加接近Android手机用户在现实中使用Android手机所产生的网络流量。
附图说明
图1为本发明的总体结构图;
图2为本发明的总体流程图;
图3为本发明实现配置线程数量子模块的流程图;
图4为本发明实现获取应用程序基本信息子模块的流程图;
图5为本发明实现线程控制器控制子线程启动模块的流程图;
图6为本发明实现每一线程采集应用程序网络流量子模块的流程图;
图7为本发明Android应用程序网络流量多线程采集系统功能模块图;
图8为本发明Android应用程序的基本信息提取模块的内部子模块结构图;
图9为本发明子线程启动模块的内部子模块结构图
图10为本发明网络流量采集模块的内部子模块结构图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
一种多线程的Android应用程序网络流量自动化采集方法具体工作过程为:
1)检测Android应用程序的数量并配置线程数量。扫描指定路径下Android应用程序的数量如果数量小于1,则记录运行日志后退出程序,如果数量大于1则查询用户是否指定线程数,如果用户指定了启动的线程数则按照要求初始化线程数量,如果没有指定则程序根据当然计算机的内存资源和Android应用程序的数量初始化线程。
2)提取Android应用程序的基本信息。需要采集网络流量的应用程序存放在计算机本地的硬盘中,首先系统调用aapt dump badging命令提取应用程序的packetname、mainactivity和minSDKVersion信息;然后将提取的信息和Android应用程序的本地硬盘存放路径一同存储到数组中并将整个数组存入到数组链表中;最后重复前面两步将全部的应用程序信息存入到数组链表中,将链表返回给主程序。
3)启动线程控制器。线程控制器将存储Android应用程序信息的数组链表中的数据平分给每一个线程,并且每隔30秒启动一个线程,然后主线程阻塞等待全部线程执行完毕。
4)子线程做采集Android应用程序网络流量的准备工作。首先从传入的参数中提取一条数组数据,检测数据的有效性,即Android应用程序的安装包是否存在,数组中数据数量是否正确;然后,根据minSDKVersion创建Android虚拟机,启动虚拟机;最后,等待虚拟机启动完毕后开始安装Android应用程序,检测应用程序是否安装成功如果安装成功则重启Android虚拟机,如果是首次安装失败,则再次尝试安装,如果非首次安装失败,则跳过这个Android应用程序,直接安装应用程序数组链表中的下一个Android应用程序。
5)子线程开始采集Android应用程序产生的网络流量。首先,待Android虚拟机重启完毕后,启动Android虚拟机中的Tcpdump程序开始采集Android虚拟机的网络流量;然后,运行重启前安装的Android应用程序并检测Android应用程序是否启动成功,如果启动失败则关闭并删除创建的Android模拟机,记录失败日志然后循环回4)开始采集下一个Android应该程序产生的网络流量,如果启动成功则运行Android应用程序自动化遍历脚本,模拟人在使用Android应用程序时的操作。
6)保存Android应用程序产生的网络流量。首先,待Android应用程序自动化遍历脚本执行完毕设定的动作次数后,停止Android模拟机中的Tcpdump进程;然后,通过pull命令将Android应用程序产生的网络流量文件拷贝回计算机本地硬盘中;最后关闭、删除Android虚拟机,记录日志文件后检测Android应用程序信息数组链表中是否还有数据,如果还有数据则循环会4)开始采集下一个Android应用程序产生的网络流量,如果没有数据则结束线程,返回主线程。
为了更好的理解本发明,以下给出了本发明更为详细的说明:
图1为本发明实现多线程Android应用程序网络流量自动化采集方法的总体结构图,如图1所示。信息源层、管控层和采集层;
信息源层,用于从Android应用程序中提取必要信息,并将信息传递给管控层;所述必要信息包括MainActivity、packetname和minSDKVersion;
管控层负责多线程的调度工作,提取信息后的Android应用程序随提取的信息一同进入到应用程序信息队列,等待提取执行,该层包括线程控制器、临界资源锁和应用程序信息队列。
线程控制器用于控制系统线程,包括线程创建、初始化、监控线程运行情况以及销毁线程等。
临界资源锁在每一个线程调用临界资源时用到,包括请求临界资源,加锁,读取写入临界资源,解锁,等待等操作。
应用程序信息队列用户存储信息源层传来的信息,以及应用程序安装包的名称和存放路径,用于线程在队列中获取应用程序的信息;
所述临界资源锁用于控制多线程任务执行时的资源争抢问题,加入了临界资源锁,保证信息不被死锁。即一旦临界资源被使用,则其他线程无法在请求使用临界资源,只有等待其他线程使用临界资源完毕后,临界资源锁被打开才能请求使用临界资源。
所述采集层包括Android虚拟机控制模块、流量获取模块、异常处理模块和虚拟操作模块;
所述Android虚拟机控制模块,用于控制Android虚拟机创建、Android虚拟机开启、将指定应用程序安装到Android虚拟机中、运行安装的应用程序、启动流量获取模块、启动虚拟操作模块、将产生的异常事件发送给异常处理模块和Android虚拟机关闭删除;
所述流量获取模块,用于采集应用程序的网络流量;
所述异常处理模块,用于对线程运行过程中遇到的异常情况进行处理;
所述虚拟操作模块,用于在应用程序运行期间,模拟人工操作。
图2为本发明实现多线程Android应用程序网络流量自动化采集方法的总体流程图,如图2所示。该方法包括:
步骤110,检测指定目录下是否有Android应用程序。
步骤111,如果没有Android应用程序,则说明没有待提取网络流量的Android应用程序。记录本次操作的日志,然后退出。即当前系统内存剩余数量除以一个线程所需的内存数量,对结果取整数,该整数即为可以启动的线程数量;
步骤112,根据用户设定的线程数量或者根据计算机内存等资源空闲情况,自动确定启动的线程数量。
步骤113,通过Android AssetPackaging工具提取出应用程序的MainActivity,packetname,minSDKVersion等信息,再将这些信息与Android应用程序的存放路径存储在数组链表中。
步骤114,线程控制器控制子线程启动。
步骤115,线程控制器控制每一个线程进行网络流量采集工作。
图3为本发明实现配置线程数量子模块的流程图,如图3所示。该方法包括:
步骤120,步骤112需要输入参数,输入参数要么为Android应用程序的数量,要么为用户在程序开始前输入的设定的线程数量。
步骤121,检测输入的参数是否为用户输入的线程数量,如果是则直接输出线程数量。
步骤122,如果输入的参数是Android应用程序的数量,则检测计算机的内存剩余量,CPU使用率等现象。
步骤123,根据单个Android虚拟机运行所消耗的内存和CPU以及步骤122中检测到当前计算机剩余资源情况,计算得出当前计算机可以容纳的最多线程数量。
步骤124,将计算得出的线程数量或者用户设定的线程数量输出。
图4为本发明实现获取应用程序基本信息子模块的流程图,如图4所示,该方法包括:
步骤130,调用Android Asset Packaging工具中的aapt dump badging命令反编译AndroidManifest文件。
步骤131,检测反编译是否成功。
步骤132,反编译如果失败,则记录错误信息后结束。
步骤133,反编译如果成功,则在反编译后的AndroidManifest文件中提取该应用程序的MainActivity,packet name和minSDKVersion信息。其中只有minSDKVersion是需要进行一步检测的,MainActivity信息和packet name信息是无需检测,直接等待minSDKVersion的检测结果后,一同存储到数组链表中的;
步骤134,检测minSDKVersion信息是否存在。
步骤135,如果没设定minSDKVersion信息,则使用最高版本的SDK。
步骤136,如果存在则使用设定的SDK版本。
步骤137,将以上提取的信息打包成信息数组,存入数组链表中,并返回主程序。
图5为本发明实现线程控制器控制子线程启动模块的流程图,如图5所示,该方法包括:
步骤140,创建一个子线程,并将启动参数传入。启动参数包括该线程需要检测的应用程序信息数组链表,SDK版本。
步骤141,检测创建的线程数量是否达到了设定的数量。如果未达到设定的线程数量,则返回步骤140继续创建线程。
步骤142,如果创建的线程数量达到设定的数量,则启动全部线程。
步骤143,主程序阻塞,等待子线程全部执行完毕。
图6为本发明实现每一线程采集应用程序网络流量子模块的流程图,如图6所示,该方法包括:
步骤150,在数组链表中提取一组数据,检测数据完整性,有效性。
步骤151,数据是否完整有效,如果数据不完整或者存在无效字符,则说明该应用程序提取的信息有误,跳转至步骤162跳过该应用程序。
步骤152,如果数据是完整并且有效的,则根据SDK信息创建Android虚拟机。
步骤153,等待Android虚拟机启动完毕后,开始安装应用程序。
步骤154,检测该应用程序是否安装成功。
步骤155,如果应用程序没有安全成功,并且是首次安装失败,则返回步骤153再次安装。如果非首次安装失败,则说明该应用程序安装出现问题,跳转至步骤161。
步骤156,如果应用程序安装成功,则重启Android虚拟机。
步骤157,启动采集网络流量的tcpdump工具程序以及重启前安装的应用程序。
步骤158,检测应用程序是否启动成功。如果启动失败,则跳转至步骤161。
步骤159,如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境。
步骤160,待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,并拷贝到计算机本地硬盘中。
步骤161,关闭并删除Android虚拟机。
步骤162,检测Android应用程序信息数组链表中是否还有数据。如果还有数据则说明还有待采集网络流量的应用程序,提取一组数据后跳转至步骤150,如果没有数据,则说明本线程的Android应用程序网络流量采集工作以及完成,结束并返回主程序。
如图7所示,Android应用程序网络流量多线程采集系统,包括:
Android应用程序是否存在判断模块:判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则进入线程数量配置模块;
线程数量配置模块:根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;
Android应用程序的基本信息提取模块:提取Android应用程序的基本信息,检测基本信息中的SDK版本,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;
子线程启动模块:接收数组链表;根据线程数量配置模块中得到的线程数量,控制全部的子线程启动;
网络流量采集模块:根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。
优选的,所述Android应用程序的基本信息提取模块通过AndroidAssetPackaging工具提取出应用程序的MainActivity、packetname和minSDKVersion信息。
所述线程数量配置模块包括:
判断输入参数是设定的线程数量还是Android应用程序的数量;若是设定的线程数量,则直接输出线程数量;若是Android应用程序的数量,则检测计算机的剩余资源,根据单个Android虚拟机运行所消耗资源和计算机的剩余资源,通过计算得出当前计算机能够容纳的线程数量;将计算得出的线程数量输出。
优选的,所述线程数量配置模块中计算机内存资源空闲情况是指计算机内存剩余量和CPU剩余量。
如图8所示,所述Android应用程序的基本信息提取模块包括:
反编译子模块:对AndroidManifest文件进行反编译操作;检测反编译是否成功,反编译如果失败,则记录错误信息后结束;反编译如果成功,则进入信息获取子模块;
信息获取子模块,在反编译后的AndroidManifest文件中提取应用程序的基本信息;
SDK版本检测子模块:检测基本信息中的SDK版本,判断是否存在minSDKVersion信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
打包子模块:将提取出来的应用程序的信息打包成信息数组,存入数组链表中。
优选的,所述反编译子模块中调用Android Asset Packaging工具中的aapt dumpbadging命令对AndroidManifest文件进行反编译操作。
优选的,所述反编译子模块中应用程序的基本信息包括:MainActivity,packetname和minSDKVersion信息。
优选的,SDK版本检测子模块:检测基本信息中的SDK版本(software developmentkit即软件开发工具包,SDK版本可以理解为android系统的版本),是否存在minSDKVersion(应用程序可以运行的最低的SDK版本)信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
如图9所示,所述子线程启动模块包括如下步骤:
子线程创建子模块:创建一个子线程,并将启动参数传入;所述启动参数包括子线程需要检测的应用程序数组链表和SDK版本。
子线程数量检测子模块:判断创建的子线程数量是否达到设定数量,如果未达到设定的子线程数量,则返回子线程创建子模块继续创建子线程;如果创建的子线程数量达到设定的数量,则启动全部子线程;
子线程执行等待子模块:主程序阻塞,等待子线程全部执行完毕。
如图10所示,所述网络流量采集模块包括如下步骤:
数据检测子模块:在数组链表中提取一组数据,检测数据是否完整有效;如果数据不完整或者存在无效字符,则说明Android应用程序提取的信息有误,跳转至Android应用程序剩余检测子模块,跳过Android应用程序;如果数据是完整并且有效的,则根据SDK版本创建Android虚拟机;启动Android虚拟机;
Android应用程序安装子模块:安装Android应用程序;检测该应用程序是否安装成功;如果应用程序安装成功,则进入Android虚拟机重启子模块;如果应用程序没有安全成功,则进入首次安装失败与否检测子模块;
首次安装失败与否检测子模块:判断是否是首次安装失败,如果是就返回Android应用程序安装子模块;若否则跳转至Android虚拟机删除子模块;
Android虚拟机重启子模块:重启Android虚拟机,启动采集网络流量的tcpdump工具以及重启前安装的Android应用程序;
应用程序启动成功检测子模块:判断应用程序是否启动成功,如果启动失败,则跳转至Android虚拟机删除子模块;如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境;待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,跳转至Android虚拟机删除子模块。
Android虚拟机删除子模块:关闭并删除Android虚拟机;进入Android应用程序剩余检测子模块;
Android应用程序剩余检测子模块:检测Android应用程序信息数组链表中是否还有Android应用程序;如果有,则提取一组待采集网络流量的应用程序后跳转至数据检测子模块,如果没有,则结束。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.Android应用程序网络流量多线程采集方法,其特征是,包括如下步骤:
步骤(1):判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则进入步骤(2);
步骤(2):根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;
步骤(3):提取Android应用程序的基本信息,检测基本信息中的SDK版本,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;
步骤(4):接收数组链表;根据步骤(2)中得到的线程数量,控制全部的子线程启动;
步骤(5):根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。
2.如权利要求1所述的Android应用程序网络流量多线程采集方法,其特征是,所述步骤(2)包括如下步骤:
判断输入参数是设定的线程数量还是Android应用程序的数量;若是设定的线程数量,则直接输出线程数量;若是Android应用程序的数量,则检测计算机的剩余资源,根据单个Android虚拟机运行所消耗资源和计算机的剩余资源,通过计算得出当前计算机能够容纳的线程数量;将计算得出的线程数量输出。
3.如权利要求1所述的Android应用程序网络流量多线程采集方法,其特征是,所述步骤(3)包括如下步骤:
步骤(31):对AndroidManifest文件进行反编译操作;检测反编译是否成功,反编译如果失败,则记录错误信息后结束;反编译如果成功,则在反编译后的AndroidManifest文件中提取应用程序的基本信息;
步骤(32):检测基本信息中的SDK版本,判断是否存在minSDKVersion信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
步骤(33):将提取出来的应用程序的信息打包成信息数组,存入数组链表中。
4.如权利要求1所述的Android应用程序网络流量多线程采集方法,其特征是,所述步骤(4)包括如下步骤:
步骤(41):创建一个子线程,并将启动参数传入;所述启动参数包括子线程需要检测的应用程序数组链表和SDK版本;
步骤(42):判断创建的子线程数量是否达到设定数量,如果未达到设定的子线程数量,则返回步骤(41)继续创建子线程;如果创建的子线程数量达到设定的数量,则启动全部子线程;
步骤(43):主程序阻塞,等待子线程全部执行完毕。
5.如权利要求1所述的Android应用程序网络流量多线程采集方法,其特征是,所述步骤(5)包括如下步骤:
步骤(5-1):在数组链表中提取一组数据,检测数据是否完整有效;如果数据不完整或者存在无效字符,则说明Android应用程序提取的信息有误,跳转至步骤(5-7)跳过该应用程序;如果数据是完整并且有效的,则根据SDK版本创建Android虚拟机;启动Android虚拟机;
步骤(5-2):安装Android应用程序;检测该应用程序是否安装成功;如果应用程序安装成功,则进入步骤(5-4);如果应用程序没有安全成功,则进入步骤(5-3);
步骤(5-3):判断是否是首次安装失败,如果是就返回步骤(5-2);若否则跳转至步骤(5-6);
步骤(5-4):重启Android虚拟机,启动采集网络流量的tcpdump工具以及重启前安装的Android应用程序;
步骤(5-5):判断应用程序是否启动成功,如果启动失败,则跳转至步骤(5-6);如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境;待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,跳转至步骤(5-6);
步骤(5-6):关闭并删除Android虚拟机;进入步骤(5-7);
步骤(5-7):检测Android应用程序信息数组链表中是否还有Android应用程序;如果有,则提取一组待采集网络流量的应用程序后跳转至步骤(5-1),如果没有,则结束。
6.Android应用程序网络流量多线程采集系统,其特征是,包括:
Android应用程序是否存在判断模块:判断设定目录下是否有Android应用程序;如果没有Android应用程序,则记录本次操作的日志,然后结束;若有Android应用程序则进入线程数量配置模块;
线程数量配置模块:根据设定的线程数量或者根据计算机内存资源空闲情况,确定启动的线程数量;
Android应用程序的基本信息提取模块:提取Android应用程序的基本信息,检测基本信息中的SDK版本,将提取出的基本信息与Android应用程序的存放路径对应存储在应用程序信息队列的应用程序数组链表中;
子线程启动模块:接收数组链表;根据线程数量配置模块中得到的线程数量,控制全部的子线程启动;
网络流量采集模块:根据SDK版本创建Android虚拟机;启动Android虚拟机;安装Android应用程序;每一个子线程对应用程序数组链表中的Android应用程序进行网络流量采集。
7.如权利要求6所述的Android应用程序网络流量多线程采集系统,其特征是,所述线程数量配置模块包括:
判断输入参数是设定的线程数量还是Android应用程序的数量;若是设定的线程数量,则直接输出线程数量;若是Android应用程序的数量,则检测计算机的剩余资源,根据单个Android虚拟机运行所消耗资源和计算机的剩余资源,通过计算得出当前计算机能够容纳的线程数量;将计算得出的线程数量输出。
8.如权利要求6所述的Android应用程序网络流量多线程采集系统,其特征是,所述Android应用程序的基本信息提取模块包括:
反编译子模块:对AndroidManifest文件进行反编译操作;检测反编译是否成功,反编译如果失败,则记录错误信息后结束;反编译如果成功,则进入信息获取子模块;
信息获取子模块,在反编译后的AndroidManifest文件中提取应用程序的基本信息;
SDK版本检测子模块:检测基本信息中的SDK版本,判断是否存在minSDKVersion信息,若不存在,则使用最高版本的SDK;若存在,则使用设定版本的SDK;
打包子模块:将提取出来的应用程序的信息打包成信息数组,存入数组链表中。
9.如权利要求6所述的Android应用程序网络流量多线程采集系统,其特征是,
所述子线程启动模块包括如下步骤:
子线程创建子模块:创建一个子线程,并将启动参数传入;所述启动参数包括子线程需要检测的应用程序数组链表和SDK版本;
子线程数量检测子模块:判断创建的子线程数量是否达到设定数量,如果未达到设定的子线程数量,则返回子线程创建子模块继续创建子线程;如果创建的子线程数量达到设定的数量,则启动全部子线程;
子线程执行等待子模块:主程序阻塞,等待子线程全部执行完毕。
10.如权利要求6所述的Android应用程序网络流量多线程采集系统,其特征是,所述网络流量采集模块包括如下步骤:
数据检测子模块:在数组链表中提取一组数据,检测数据是否完整有效;如果数据不完整或者存在无效字符,则说明Android应用程序提取的信息有误,跳转至Android应用程序剩余检测子模块,跳过Android应用程序;如果数据是完整并且有效的,则根据SDK版本创建Android虚拟机;启动Android虚拟机;
Android应用程序安装子模块:安装Android应用程序;检测该应用程序是否安装成功;如果应用程序安装成功,则进入Android虚拟机重启子模块;如果应用程序没有安全成功,则进入首次安装失败与否检测子模块;
首次安装失败与否检测子模块:判断是否是首次安装失败,如果是就返回Android应用程序安装子模块;若否则跳转至Android虚拟机删除子模块;
Android虚拟机重启子模块:重启Android虚拟机,启动采集网络流量的tcpdump工具以及重启前安装的Android应用程序;
应用程序启动成功检测子模块:判断应用程序是否启动成功,如果启动失败,则跳转至Android虚拟机删除子模块;如果应用程序启动成功,则启动Android应用程序自动化遍历脚本,模拟人工操作环境;待Android应用程序自动化遍历脚本执行完毕后,保存采集的网络流量,跳转至Android虚拟机删除子模块;
Android虚拟机删除子模块:关闭并删除Android虚拟机;进入Android应用程序剩余检测子模块;
Android应用程序剩余检测子模块:检测Android应用程序信息数组链表中是否还有Android应用程序;如果有,则提取一组待采集网络流量的应用程序后跳转至数据检测子模块,如果没有,则结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610681572.XA CN106330599B (zh) | 2016-08-16 | 2016-08-16 | Android应用程序网络流量多线程采集系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610681572.XA CN106330599B (zh) | 2016-08-16 | 2016-08-16 | Android应用程序网络流量多线程采集系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106330599A true CN106330599A (zh) | 2017-01-11 |
CN106330599B CN106330599B (zh) | 2019-07-19 |
Family
ID=57743650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610681572.XA Active CN106330599B (zh) | 2016-08-16 | 2016-08-16 | Android应用程序网络流量多线程采集系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106330599B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992366A (zh) * | 2017-12-26 | 2018-05-04 | 网易(杭州)网络有限公司 | 对多个目标对象进行检测和跟踪的方法、系统和电子设备 |
CN110598054A (zh) * | 2019-08-19 | 2019-12-20 | 桂林长海发展有限责任公司 | 一种多线程链表处理方法、装置及计算机可读存储介质 |
CN110879726A (zh) * | 2019-10-24 | 2020-03-13 | 深圳数位传媒科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN111010316A (zh) * | 2019-12-17 | 2020-04-14 | 广州唯品会信息科技有限公司 | 一种流量回放方法、装置及系统 |
CN112765028A (zh) * | 2021-01-22 | 2021-05-07 | 济南大学 | 基于群控机制的Android应用程序测试方法及系统 |
CN112783777A (zh) * | 2021-01-27 | 2021-05-11 | 济南大学 | 一种安卓环境内采集实时信息与网络流量的方法与系统 |
CN113163453A (zh) * | 2021-04-22 | 2021-07-23 | Tcl通讯(宁波)有限公司 | 一种Wifi传输速度的控制方法、系统、存储介质及移动终端 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218566A (zh) * | 2013-01-25 | 2013-07-24 | 江南大学 | 基于Android平台软件行为检测的主动防御系统 |
CN105022960A (zh) * | 2015-08-10 | 2015-11-04 | 济南大学 | 基于网络流量的多特征移动终端恶意软件检测方法及系统 |
-
2016
- 2016-08-16 CN CN201610681572.XA patent/CN106330599B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218566A (zh) * | 2013-01-25 | 2013-07-24 | 江南大学 | 基于Android平台软件行为检测的主动防御系统 |
CN105022960A (zh) * | 2015-08-10 | 2015-11-04 | 济南大学 | 基于网络流量的多特征移动终端恶意软件检测方法及系统 |
Non-Patent Citations (2)
Title |
---|
XUEPING WU,ETC AL.,: ""Detect repackaged Android application based on HTTP traffic similarity"", 《SECURITY AND COMMUNICATION NETWORKS》 * |
王文群,: ""Android平台恶意代码检测技术研究"", 《中国优秀硕士学位论文全文数据库-信息科技辑》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992366A (zh) * | 2017-12-26 | 2018-05-04 | 网易(杭州)网络有限公司 | 对多个目标对象进行检测和跟踪的方法、系统和电子设备 |
CN110598054A (zh) * | 2019-08-19 | 2019-12-20 | 桂林长海发展有限责任公司 | 一种多线程链表处理方法、装置及计算机可读存储介质 |
CN110598054B (zh) * | 2019-08-19 | 2021-11-23 | 桂林长海发展有限责任公司 | 一种多线程链表处理方法、装置及计算机可读存储介质 |
CN110879726A (zh) * | 2019-10-24 | 2020-03-13 | 深圳数位传媒科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN110879726B (zh) * | 2019-10-24 | 2023-09-26 | 深圳数位大数据科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN111010316A (zh) * | 2019-12-17 | 2020-04-14 | 广州唯品会信息科技有限公司 | 一种流量回放方法、装置及系统 |
CN111010316B (zh) * | 2019-12-17 | 2021-08-06 | 广州唯品会信息科技有限公司 | 一种流量回放方法、装置及系统 |
CN112765028A (zh) * | 2021-01-22 | 2021-05-07 | 济南大学 | 基于群控机制的Android应用程序测试方法及系统 |
CN112765028B (zh) * | 2021-01-22 | 2023-08-04 | 济南大学 | 基于群控机制的Android应用程序测试方法及系统 |
CN112783777A (zh) * | 2021-01-27 | 2021-05-11 | 济南大学 | 一种安卓环境内采集实时信息与网络流量的方法与系统 |
CN112783777B (zh) * | 2021-01-27 | 2023-08-04 | 济南大学 | 一种安卓环境内采集实时信息与网络流量的方法与系统 |
CN113163453A (zh) * | 2021-04-22 | 2021-07-23 | Tcl通讯(宁波)有限公司 | 一种Wifi传输速度的控制方法、系统、存储介质及移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN106330599B (zh) | 2019-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106330599A (zh) | Android应用程序网络流量多线程采集系统及方法 | |
CN107659543B (zh) | 面向云平台apt攻击的防护方法 | |
CN103927484B (zh) | 基于Qemu模拟器的恶意程序行为捕获方法 | |
CN113067728A (zh) | 一种网络安全攻防试验平台 | |
CN107508722B (zh) | 一种业务监控方法和装置 | |
WO2007061517A2 (en) | Rule based engines for diagnosing grid-based computing systems | |
EP2479698A1 (en) | Systems and methods for detecting fraud associated with systems application processing | |
CN106156353A (zh) | 一种为数据库增加多语言动态编译执行引擎的方法和系统 | |
Montani et al. | Achieving self-healing in service delivery software systems by means of case-based reasoning | |
CN102833120B (zh) | 一种快速自动化测试中处理网管服务器异常的方法及系统 | |
CN103701783A (zh) | 一种预处理单元、由其构成的数据处理系统以及处理方法 | |
CN109614201A (zh) | 防脑裂的OpenStack虚拟机高可用系统 | |
CN110971464A (zh) | 一种适合灾备中心的运维自动化系统 | |
CN107239563A (zh) | 舆情信息动态监控方法 | |
CN106656927A (zh) | 将Linux账号加入AD域的方法及装置 | |
CN110245077A (zh) | 一种程序异常的响应方法及设备 | |
CN111258591A (zh) | 程序部署任务执行方法、装置、计算机设备和存储介质 | |
CN107506194A (zh) | 应用版本回退确定方法及装置 | |
CN110502366A (zh) | 案例执行方法、装置、设备及计算机可读存储介质 | |
CN109977681A (zh) | 一种面向无人机的模糊测试方法及无人机的模糊测试系统 | |
CN110221816A (zh) | 基于算法平台的算法运行方法、装置、介质及算法平台 | |
CN113535532B (zh) | 故障注入系统、方法和装置 | |
CN107644165A (zh) | 安全防护平台以及安全防护方法和装置 | |
CN113676354A (zh) | 一种混合云运维管理方法及系统 | |
CN103391211A (zh) | 一种按策略自动执行配置管理的装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |