买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】应用程序的处理方法及处理装置_阿里巴巴集团控股有限公司_201511004777.6 

申请/专利权人:阿里巴巴集团控股有限公司

申请日:2015-12-29

公开(公告)日:2021-04-27

公开(公告)号:CN106933642B

主分类号:G06F8/41(20180101)

分类号:G06F8/41(20180101)

优先权:

专利状态码:有效-授权

法律状态:2021.04.27#授权;2017.08.01#实质审查的生效;2017.07.07#公开

摘要:本申请公开了一种应用程序的处理方法及处理装置。其中,该处理方法包括:获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;基于状态信息和控制流图生成目标应用程序的控制流和数据流。本申请解决了现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。

主权项:1.一种应用程序的处理方法,其特征在于,包括:获取目标应用程序的控制流图,其中,所述控制流图中包含由所述目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,所述后继程序块ID用于指向所跳转的程序块;按照所述控制流图中的所述当前程序块ID和所述后继程序块ID所构成的执行路径,执行所述多个程序块,得到每个程序块对应的状态信息,其中,所述状态信息用于指示执行每个程序块时所使用的数据状态;根据所述状态信息,更新所述控制流图;依据更新后的所述控制流图生成所述目标应用程序的控制流,以及依据所述状态信息生成所述目标应用程序的数据流。

全文数据:应用程序的处理方法及处理装置技术领域[0001]本申请涉及计算机领域,具体而言,涉及一种应用程序的处理方法及处理装置。背景技术[0002]应用程序的数据流和控制流被广泛用于计算机行业的诸多领域,例如软件测试领域、漏洞挖掘领域以及病毒行为分析领域等。其中,数据流DataHow是指一组有顺序、有起点和终点的字节集合,应用程序从输入设备获取数据、向文件中写入数据、或是在网络连接上进行数据的读写操作,都可以使用数据流来完成。控制流ControlFlow是指程序逻辑行之间的控制关系。[0003]目前,一般采用动态方法或静态方法来获取应用程序的数据流和控制流,然而,对于动态方法而言,一般受限于应用程序的运行环境和运行状态,而导致不能发现应用程序的所有行为,无法准确获取应用程序的数据流和控制流;对于静态方法而言,由于缺失应用程序运行过程中的一些环境变量(如高级语言中的继承关系、远程服务器交互等),而导致无法准确获取应用程序的数据流和控制流。[0004]针对上述的问题,目前尚未提出有效的解决方案。[0005]申请内容[0006]本申请实施例提供了一种应用程序的处理方法及处理装置,以至少解决现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。[0007]根据本申请实施例的一个方面,提供了一种应用程序的处理方法,包括:获取目标应用程序的控制流图,其中,上述控制流图中包含由上述目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,上述后继程序块ID用于指向所跳转的程序块;按照上述控制流图中的上述当前程序块ID和上述后继程序块ID所构成的执行路径,执行上述多个程序块,得到每个程序块对应的状态信息,其中,上述状态信息用于指示执行每个程序块时所使用的数据状态;基于上述状态信息和上述控制流图生成上述目标应用程序的上述控制流和上述数据流。[0008]根据本申请实施例的另一方面,还提供了一种应用程序的处理装置,包括:获取单元,用于获取目标应用程序的控制流图,其中,上述控制流图中包含由上述目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,上述后继程序块ID用于指向所跳转的程序块;执行单元,用于按照上述控制流图中的上述当前程序块ID和上述后继程序块ID所构成的执行路径,执行上述多个程序块,得到每个程序块对应的状态信息,其中,上述状态信息用于指示执行每个程序块时所使用的数据状态;生成单元,用于基于上述状态信息和上述控制流图生成上述目标应用程序的上述控制流和上述数据流。[0009]在本申请实施例中,采用获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;按照控制流图中的当前程序块1D和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;基于状态信息和控制流图生成目标应用程序的控制流和数据流的方式,通过获取目标应用程序的控制流图,并根据控制流图中的执行路径执行多个程序块得到每个程序块对应的状态信息,采用动静态执行结合的方法,达到了基于状态信息和控制流图生成目标应用程序的控制流和数据流的目的,从而实现了有效监控目标应用程序的数据流、避免遗漏掉程序行为、提高控制'流和数据流的准确率的技术效果,进而解决了现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。附图说明[0010]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:[0011]图1是根据本申请实施例的一种运行文件检测方法的计算机终端的硬件结构框图;[0012]图2是根据本申请实施例的一种可选的应用程序的处理方法的流程示意图;[0013]图3是根据本申请实施例的另一种可选的应用程序的处理方法的流程示意图;[0014]图4是根据本申请实施例的又一种可选的应用程序的处理方法的流程示意图;[0015]图5是根据本申请实施例的又一种可选的应用程序的处理方法的结构示意图;[0016]图6是根据本申请实施例的一种可选的应用程序的处理装置的结构示意图;[0017]图7是根据本申请实施例的另一种可选的应用程序的处理装置的结构示意图;[0018]图8是根据本申请实施例的又一种可选的应用程序的处理装置的结构示意图;[0019]图9是根据本申请实施例的又一种可选的应用程序的处理装置的结构示意图;[0020]图10是根据本申请实施例的又一种可选的应用程序的处理装置的结构示意图;[0021]图11是根据本申请实施例的一种计算机终端的结构框图。具体实施方式[0022]为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。[0023]需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。[0024]实施例1[0025]根据本申请实施例,还提供了一种应用程序的处理方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。[0026]本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种应用程序的处理方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个处理器1〇2处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。[0027]存储器104可用于存储应用软件的软件程序以及模程序块,如本申请实施例中的应用程序的处理方法对应的程序指令模程序块,处理器102通过运行存储在存储器104内的软件程序以及模程序块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。[0028]传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器NetworkInterfaceController,NIC,其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频RadioFrequenCy,RF模程序块,其用于通过无线方式与互联网进行通讯。[0029]在上述运行环境下,本申请提供了如图2所示的应用程序的处理方法。图2是根据本申请实施例一的应用程序的处理方法的流程图。[0030]如图2所示,该应用程序的处理方法可以包括如下实现步骤:[0031]步骤S202,获取目标应用程序的控制流图。[0032]本申请上述步骤S202中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块。控制流图(ControlFlowGraph,简称CFG又称为控制流程图,是一个过程或者程序的抽象表现,通常以数据链的形式表示。控制流图是用在编译器中的一个抽象数据结构,由编译器进行内部维护。[0033]需要说明的是,需获取目标应用程序的控制流和数据流可以包括如下几种情况:[0034]情况一、需要对目标应用程序进行软件测试。其中,该软件测试可以为测试人员在开发环境下进行的测试,也可以为测试人员在模拟实际操作环境下进行的测试,例如a测试。[0035]情况二、需要对目标应用程序进行漏洞挖掘。[0036]情况三、需要对目标应用程序进行病毒行为分析。[0037]需要说明的是,上述三种情况仅为示例性描述,并不用于限制需获取目标应用程序的控制流和数据流的其他情况。[0038]可选地,程序块是可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。一般,程序块能被装入内存中运行的可执行代码和数据集合。程序块ID为程序块的标识,即每个程序块都有一个独立的当前程序块ID用以唯一地表示该程序块以及该程序块在sma1i目标应用程序的字节码代码中的位置。当前程序块ID可以由如下所示的组成部分组成:[0039]类名方法名方法参数和返回值当前程序块首条指令在函数中的偏移。[0040]可选地,每个程序块除包含当前程序块ID之外,还包含后继程序块ID。前述每个程序块需是由一个函数调用指令或者跳转指令结束,当前程序块的后继程序块就是上述跳转指令的跳转地址,因此,后继程序块ID就是当前程序块将要或己经跳转所至的程序块的ID。[0041]本实施例中,目标应用程序可以但不限于为C语言程序、基于iOS系统的程序或者基于Android系统的程序(以下简称Android程序)。若目标应用程序为Android程序,则该目标应用程序的格式为APKAndroidPackage,安卓安装包格式,APK格式通常是一个zip—种计算机文件压缩算法格式的压缩包,其包含一个classes.dex文件作为执行主体。此外,若目标应用程序为Android程序,则其字节码为smali。[0042]步骤S204,按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态。[0043]本申请上述步骤S204中,该状态信息可以包括以下一种或几种:调用桟、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系等。后继程序块ID实质上为当前程序块的跳转信息,后继程序块ID用于指示当前程序块按照其指示的执行路径跳转至后继程序块。[0044]例如,某控制流图中包含程序块A、程序块B、程序块C、程序块D和程序块E共计5个程序块,其中,若程序块A包含程序块A的ID和程序块B的ID,则可以确定程序块B为程序块A的后继程序块,程序块B的ID用于指向所跳转的程序块B,且程序块A的ID和程序块B的ID构成由程序块A到程序块B的执行路径“A—B”(箭头“―”表示执行路径的方向);若程序块B包含程序块B的ID和程序块D的ID,则程序块B的ID和程序块D的ID构成由程序块B到程序块D的执行路径“B—D”。[0045]再例如,若两条不同的执行路径均连接至同一程序块,且该程序块同时作为其中一条执行路径的起点以及另一条执行路径的终点,则该两条不同的执行路径可构成同一条执行路径,如上述执行路径“A—B”和“B—D”可构成执行路径“A—B—D”。[0046]又例如,从某程序块到另一程序块之间的执行路径可能有多条,例如,从程序块A到程序块E之间的执行路径可以为“A—B—C—d—E”,也可以为“A—B—D—E”,还可以为“A—C^E”,甚至可以为“A—E”。[0047]步骤S206,基于状态信息和控制流图生成目标应用程序的控制流和数据流。[0048]本申请上述步骤S206中,控制流即为最终的控制流图本身,对于数据流,即由状态信息组成,因此,基于动静态结合方法获得的状态信息和控制流图所生成的目标应用程序的控制流和数据流,可以避免现有技术中的动态方法存在漏报的问题,也可以避免现有技术中的静态方法由于无法获取目标应用程序调用的外部程序库中的代码、从而导致目标应用程序中的一些函数调用存在解释不清的问题。[0049]由上可知,本申请上述实施例一所提供的方案,通过获取目标应用程序的控制流图,并根据控制流图中的执行路径执行多个程序块得到每个程序块对应的状态信息,达到了基于状态信息和控制流图生成目标应用程序的控制流和数据流的目的,从而实现了有效监控目标应用程序的数据流、避免遗漏掉任何程序行为的技术效果,进而解决了现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。[0050]本申请上述实施例提供的一种可选方案中,图3是根据本申请实施例的另一种可选的应用程序的处理方法的流程示意图,如图3所示,上述步骤S2〇2,获取目标应用程序的控制流图可以包括:_[0051]步骤S302,将目标应用程序转换为代码文件,代码文件包含函数以及函数的标识息。[0052]本申请上述步骤S302中,该代码文件可以为源代码,也可以为通过反编译或者反汇编的方式还原而成的低级别的汇编代码或字节码,还可以为由上述代码转化而成的中间代码。需要说明的是,将目标应用程序转换为代码文件需要保证不造成目标应用程序的数据信息或控制信息的丢失。[0053]以目标应用程序为Android程序为例,Android上的应用程序是APK格式,APK实际是一个zip格式的压缩包,里面包含了classes.dex文件是执行的主体,Android应用程序的字节码是smali。可以通过Backsmali—款APK编译反编译工具将dex类型的文件转换为smali文件。[0054]可选地,对上述sraali代码进行文本分析,可以确定该段smali代码中包含的函数方法指令、类名成员变量以及继承关系等信息。[0055]步骤S304,遍历代码文件中的函数,将函数分解成多个程序块。[0056]本申请上述步骤S304中,通过遍历smali代码中的每个类的每个函数,可以将每个函数分解成多个程序块,其中,程序块是能够顺序执行的最大的指令集。因此,函数调用、跳转指令等都会结束当前程序块,并催生一个新的程序块的创建。[0057]步骤S306,依据多个程序块,生成具有目标应用程序执行方向的控制流图。[0058]本申请上述步骤S306中,因每个程序块都包含当前程序块ID和后继程序块ID,对于每一个程序块,仅需通过后继程序块ID查找到其指示的后继程序块,并将该后继程序块添加到当前程序块所在的控制流图中,进而将每个程序块与其后继程序块用边连接,从而可以生成具有目标应用程序执行方向的控制流图。需要说明的是,每条边都具有方向,其方向由其连接的当前程序块指向后继程序块,且最终生成的控制流图在整体上是一个有向有环图。[0059]可选地,函数的标识信息包括以下一种或几种:函数的函数名、类名、返回值以及类的成员变量的名称。具体地,以该目标应用程序为Android程序为例,通过Backsmali—款APK编译反编译工具将dex类型的文件转换为smali文件之后,smali文件中包含文本格式的smali代码以及该smali代码的函数名、类名、返回值等,同时也包含类的所有成员变量的名称。[0060]本申请上述实施例提供的一种可选方案中,步骤S2〇4,按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块可以包括:[0061]步骤S10,从控制流图中确定多个程序块的入口程序块,其中,多个程序块的入口程序块是指执行多个程序块的起点。[0062]本申请上述步骤S10中,由于控制流图是一个有向有环图,因此在执行控制流图时,需要找到一个起点,即上述的入口程序块。具体如何从控制流图中确定多个程序块的入口程序块后续实施例中会进行详细描述,此处不做赘述。[0063]步骤S12,根据入口程序块以及执行路径,执行多个程序块。[0064]本申请上述步骤S12中,在确定了入口程序块之后,以入口程序块为起点,按照上述的执行路径,执行每个程序块。控制流图中的边即为上述执行路径。[0065]本申请上述实施例提供的一种可选方案中,步骤S10,从控制流图中确定多个程序块的入口程序块可以包括:[0066]步骤S20,在多个程序块中,判断每个程序块的入度是否为第一标识。[0067]本申请上述步骤S20中,在控制流图中,入度通常指某程序块作为图中执行路径的终点的次数之和。若该第一标识为〇,则可以确定控制流图中的程序块不作为任何执行路径的终点,也就是说,该程序块可以作为连接该程序块的所有执行路径的起点。具体地,可以在多个程序块中,判断每个程序块的入度是否为〇。[0068]步骤S22,从入度为第一标识的程序块中,筛选出预定义的入口程序块。[0069]本申请上述步骤S22中,若程序块的入度为0,筛选出预定义的入口程序块的方式可以为:获取入度为0的程序块的当前程序块ID中的名称信息,通过该名称信息确定该程序块是否为预定义的入口程序块,进而筛选出预定义的入口程序块。[0070]此外,筛选预定义的入口程序块的方法还可以为调用入口程序块列表,该入口程序块列表中记录了可作为入口程序块的所有程序块的名称信息,该名称信息可以为类名或方法名,进而,通过该入口程序块列表中的名称信息可以确定并筛选出预定义的入口程序块。[0071]步骤S24,将预定义的入口程序块确定为多个程序块的入口程序块。[0072]本申请上述步骤S24中,入口程序块可以为多个,多个入口程序块可以以列表方式显示,从而向其他非入口程序块指示可作为程序入口的函数。上述步骤的必要性在于,本申请实施例一中步骤S10提供的确定入口程序块的方式有别于C语言程序或Android程序确定入口程序块的方式。具体的,C语言程序的入口程序块可以为main函数,Android程序的入口程序块可以封装于Activity组件中的onCreat函数、onStart函数或者onPause函数。[0073]可选地,根据入口程序块以及执行路径,执行多个程序块包括:从入口程序块开始,沿执行路径,调用预设的缺陷执行列表,对多个程序块进行缺陷执行,其中,缺陷执行列表用于指示在执行多个程序块的过程中需获取的状态信息,状态信息包括预设变量的预设属性。[0074]可选地,可以通过执行引擎ExecutionEngine根据入口程序块以及执行路径,执行多个程序块。具体地,执行引擎在根据控制流图中的执行路径进行缺陷执行时,同时维护类的实例、类的继承关系等信息,执行引擎还可以将一些仅能通过动态方法获取到的执行流程反馈至控制流图,以使控制流图愈加完善。需要说明的是,缺陷执行为本申请实施例一所提供的一种对目标应用程序动态运行的模拟。较实际的动态运行而言,缺陷执行至少具备下述特征:[0075]特征一、缺陷执行只关心部分变量的部分属性,即对于目标应用程序运行过程中的所有变量,缺陷执行只保证部分关键变量的某些特定属性的变化是准确的。[0076]特征二、缺陷执行对有指令进行缺陷解释,基于缺陷执行只关心某些变量的某些属性,因此对指令进行解释时,缺陷执行只关注该指令对这些特定属性的操作以及影响。其中,缺陷解释可以被理解为对目标对象的局部特征的局部说明。[0077]特征三、缺陷执行不需要解释全部的指令集,即某些指令具有不操作属性时,则缺陷执行无需解释这条指令。[0078]特征四、缺陷执行不解释跳转指令,由于执行引擎依据控制流图执行,而控制流图中已经包含了程序的全部跳转信息,所以仅需沿控制流图中的边执行路径执行即可。[0079]特征五、缺陷执行中的每个跳转指令能够覆盖其所有分支。例如,一个具有两个分支的跳转指令,会在控制流图中产生一个节点和两个分支。执行引擎会依次执行每个分支,保证能够还原出程序的全部行为。其中,具有两个分支的跳转指令可以为条件跳转指令。[0080]特征六、缺陷执行对于目标应用程序所需要的运行环境变量,除非被显示指定特殊值,否则全部标记成为“未知”。这使得在缺陷执行过程中可以引入未知变量,这部分变量可以保证缺陷执行的正常运行,而不会因为某些变量的缺失或不确定导致缺陷执行发生异常或崩溃。[0081]特征七、缺陷执行可以模拟其它应用程序运行时的所有特征或机制,比如高级语言的类的实例化、面向对象的继承以及一些系统相关的行为等信息。[0082]可选地,缺陷执行除过上述特征,还包含若干执行指令,具体如下:[0083]指令一、跳转指令,执行引擎对跳转指令不进行解释,而是根据从控制流图中获取到的执行路径依次执行,从而保证每个分支都可以执行到。[0084]指令二、数据操作指令。执行引擎对数据操作指令都进行缺陷解释,即只关注该指令对目标数据的某些属性所产生的影响。以Android系统中的“move”指令为例,若某条指令为“movevl,v2”,执行引擎执行该指令会导致寄存器v2中的指令被复制到寄存器vl中。在执行引擎执行该条指令之前,该条指令中vl=〇且v2=l,在执行引擎执行该条指令之后,该条指令中vl=v2=0。假设测试人员需要通过缺陷执行得到数据流以用作污点分析,则测试人员仅需关注数据的污点属性,也就是说,对于该条指令,缺陷执行所需进行的操作就是把v2中数据的污点属性复制给vl寄存器中的数据,而无需确定其具体的数值。[0085]指令三、高级语言特征相关指令。对于高级语言相关的一些特征,如类的继承多态等,缺陷执行和实际的动态运行时的行为一致。反馈这部分信息可以完善控制流图。以类的继承为例,类A包含函数a,类B继承自A,并且没有重载函数a。当创建一个类B的实例ib并调用ib的a方法时,基于纯静态的控制流图则无法找到ib的a方法,从而导致控制流图不完整。但借助执行引擎,则可以判断出ib的a方法继承自A类,进而在缺陷执行时,执行引擎可以自动跳转到A类的a方法继续执行,控制流图中的该部分信息也可以得到补全。[0086]需要说明的是,由于执行引擎是针对目标应用程序的分析进行缺陷执行,但是目标应用程序调用的系统APIApplicationProgrammingInterface,应用程序编程接口)会对目标应用程序内部的数据流产生影响,因此,本申请实施例一提供了一种基于描述的未知调用建模,用以消除上述影响。具体地,若只关心数据的某些特定属性,则仅描述这些未知调用过程中对特定属性该特定属性可以为未知属性的影响即可。例如,假设存在字符串拼接函数aal,a2属于未知调用,其功能是将al和a2的值拼接在一起并返回,也就是说,若存在a1=“123”,a2=“abc”,那么调用aa1,a2的返回值则为“123abc”。再例如,在污点分析场景中,若参数al或者a2中存在被污染参数情形,为确定返回值是否同样被污染,则只要简单的通过描述告诉执行引擎对于该类未知调用,若参数被污染则返回值也要被污染即可。遵循上述方法,可以省去重写函数a的代码的诸多繁琐。[0087]本申请上述实施例提供的一种可选方案中,图4是根据本申请实施例的又一种可选的应用程序的处理方法的流程示意图,如图4所示,该方法可以包括如下步骤:[0088]步骤S402,执行引擎开始执行。[0089]步骤S404,获取当前程序块中的指令。[0090]其中,该当前程序块中可以包含至少一条指令,例如,该指令可以为“move”指令、“add”指令和“push”指令等多语言指令。[0091]步骤S406,进行指令解释。[0092]其中,该指令解释可以为对某条指令进行缺陷解释,进行缺陷解释的对象可以为当前程序块中的全部指令,也可以为当前程序块中的部分指令。例如,执行引擎可以对“move”指令进行缺陷解释、而对“invoke”指令和“return”指令进行正常解释。[0093]步骤S408,判断指令是否为当前程序块的最后指令。[0094]例如,当前程序块中的某条指令为“end”指令,则可以通过判断该条指令是否为无条件结束指令,进而确定该条指令是否为当前程序块的最后指令。[0095]若执行完成步骤S408,且结果为是,则执行步骤S410;若执行完成步骤S408,且执行结果为否,则返回执行步骤S404。[0096]步骤S410,判断当前程序块是否有后继程序块。[0097]具体地,可以通过判断当前程序块中是否包含后继程序块ID,进而确定当前程序块是否有后继程序块。[0098]若执行完成步骤S410,且结果为是,则执行步骤S412;若执行完成步骤S410,且执行结果为否,则执行步骤S414。[0099]步骤S412,解释每个后继程序块。[0100]具体地,解释每个后继程序块可以为对每个后继程序块中的指令进行缺陷解释。[0101]步骤S414,执行引擎结束执行。[0102]本申请步骤S414中,执行引擎结束缺陷执行,流程结束。[0103]本申请上述实施例提供的一种可选方案中,图5是根据本申请实施例的又一种可选的应用程序的处理方法的结构示意图,如图5所示,执行引擎包括指令解释组件502和状态信息获取组件504,其中,该指令解释组件502可用于对程序块中的每条指令进行解释,例如,指令解释组件502可以对程序块中的“move”指令、“invoke”指令和“return”指令等进行缺陷解释。该状态信息获取组件504可以获取每条指令的状态信息,该状态信息可以包括调用栈、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系等。此外,指令解释组件502基于控制流图和入口程序块对程序块中所包含的指令进行解释,从而得到每条指令的状态信息。需要说明的是,图5中的执行引擎可用于执行本申请实施例一中的上述步骤S402至步骤S414。[0104]本申请上述实施例提供的一种可选方案中,步骤S206,基于状态信息和控制流图生成目标应用程序的控制流以及数据流包括:[0105]步骤S30,根据状态信息,更新控制流图。[0106]步骤S32,依据更新后的控制流图生成控制流,以及依据状态信息生成数据流。[0107]本申请上述步骤S30至S32中,控制流与数据流的生成都依赖于状态信息,由于执行引擎在进行缺陷执行时,状态信息的获取方法规避了前述动态方法和静态方法各自的缺点,获取到的状态信息也更为全面和准确,从而保证了基于状态信息生成的控制流和数据流的准确性。[0108]可选地,状态信息包括以下一种或几种:调用栈、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系。[0109]其中,调用栈CallStack用于记录目标应用程序运行过程中的函数调用。函数执行返回值即函数名变量,通常用于把函数的处理结果数据带回给调用函数。类的实例为根据类创造出来的一个真实的对象。寄存器是CPU的内部组成部分,其为有限存储容量的高速存储部件,可以用于暂存指令、数据和地址,具体地,CPU控制部件中的寄存器可以为指令寄存器(InstructionRegister,简称IR或程序计数器ProgramCounter,简称PC,CPU算术及逻辑部件中的寄存器可以为累加器Accumulator,简称ACC。指令集(InstructionSet是存储在CPU内部的程序,用于对CPU运算进行指导和优化,以使CPU更为高效的运行。类的继承关系中,继承指的是一个类称为子类或子接口)继承另外的一个类称为父类或父接口)的功能、并可以增加自身新功能的能力。在UMLUnifiedModelingLanguage,统一建模语言类图设计中,继承用一条带空心三角箭头的实线表示,并由子类指向父类,或者由子接口指向父接口。[0110]需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。[0111]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如R0MRAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备可以是手机,计算机,服务器,或者网络设备等执行本申请各个实施例所述的方法。[0112]实施例2[0113]根据本申请实施例,还提供了一种用于实施上述应用程序的处理方法的应用程序的处理装置,如图6所示,该装置可以包括:获取单元602,执行单元604,生成单元6〇6。[0114]其中,获取单元602,用于获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;执行单元604,用于按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;生成单元606,用于基于状态信息和控制流图生成目标应用程序的控制流和数据流。[0115]此处需要说明的是,上述获取单元602,执行单元604,生成单元606对应于实施例一中的步骤S2〇2至步骤S206,三个单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。[0116]由上可知,本申请上述实施例二所提供的方案,通过获取目标应用程序的控制流图,并根据控制流图中的执行路径执行多个程序块得到每个程序块对应的状态信息,达到了基于状态信息和控制流图生成目标应用程序的控制流和数据流的目的,从而实现了有效监控目标应用程序的数据流、避免遗漏掉任何程序行为的技术效果,进而解决了现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。[0117]可选地,如图7所示,获取单元可以602包括:转换模块702,分解模块704,生成模块706。[0118]其中,转换模块702,用于将目标应用程序转换为代码文件,代码文件包含函数以及函数的标识信息;分解模块704,用于遍历代码文件中的函数,将函数分解成多个程序块;生成模块706,用于依据多个程序块,生成具有目标应用程序执行方向的控制流图。[0119]此处需要说明的是,上述转换模块702,分解模块704,生成模块706对应于实施例一中的步骤S302至步骤S306,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。[0120]可选地,上述实施例二中函数的标识信息包括以下一种或几种:函数的函数名、类名、返回值以及类的成员变量的名称。[0121]可选地,如图8所示,执行单元604包括:确定模块802,执行模块804。[0122]其中,确定模块802,用于从控制流图中确定多个程序块的入口程序块,其中,多个程序块的入口程序块是指执行多个程序块的起点;执行模块804,用于根据入口程序块以及执行路径,执行多个程序块。[0123]此处需要说明的是,上述确定模块802,执行模块804对应于实施例一中的步骤S10至步骤S12,两个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。[0124]可选地,如图9所示,确定模块802包括:判断子模块902,筛选子模块904,确定子模块906。[0125]其中,判断子模块902,用于在多个程序块中,判断每个程序块的入度是否为第一标识;筛选子模块904,用于从入度为第一标识的程序块中,筛选出预定义的入口程序块;确定子模块906,用于将预定义的入口程序块确定为多个程序块的入口程序块。[0126]此处需要说明的是,上述判断子模块902,筛选子模块904,确定子模块9〇6对应于实施例一中的步骤S20至步骤S24,三个子模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述子模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。[0127]可选地,上述实施例二中的执行模块804用于执行以下步骤根据入口程序块以及执行路径,执行多个程序块:从入口程序块开始,沿执行路径,调用预设的缺陷执行列表,对多个程序块进行缺陷执行,其中,缺陷执行列表用于指示在执行多个程序块的过程中需获取的状态信息,状态信息包括预设变量的预设属性。[0128]可选地,如图10所示,生成单元706包括:更新模块1002,生成模块1004。[0129]其中,更新模块1002,用于根据状态信息,更新控制流图;生成模块1004,用于依据更新后的控制流图生成控制流,以及依据状态信息生成数据流。[0130]此处需要说明的是,上述更新模块1002,生成模块1004对应于实施例一中的步骤S30至步骤S32,两个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。[0131]可选地,上述实施例二中的状态信息包括以下一种或几种:调用栈、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系。[0132]实施例3[0133]本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。[0134]可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。[0135]在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;基于状态信息和控制流图生成目标应用程序的控制流和数据流。[0136]可选地,图11是根据本申请实施例的一种计算机终端的结构框图。如图11所示,该计算机终端A可以包括:一个或多个(图中仅示出一个处理器1102、存储器1104、以及传输装置1106。[0137]其中,存储器1104可用于存储软件程序以及模程序块,如本申请实施例中的安全漏洞检测方法和装置对应的程序指令模程序块,处理器1102通过运行存储在存储器1104内的软件程序以及模程序块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器1104可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1104可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。[0138]上述的传输装置11〇6用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1106包括一个网络适配器NetworkInterfaceController,NIC,其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置11〇6为射频RadioFrequency,RF模块,其用于通过无线方式与互联网进行通讯。[0139]其中,具体地,存储器1104用于存储预设动作条件和预设权限用户的信息、以及应用程序。[0140]处理器1102可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;基于状态信息和控制流图生成目标应用程序的控制流和数据流。[0141]由上可知,本申请上述实施例三所提供的方案,通过获取目标应用程序的控制流图,并根据控制流图中的执行路径执行多个程序块得到每个程序块对应的状态信息,达到了基于状态信息和控制流图生成目标应用程序的控制流和数据流的目的,从而实现了有效监控目标应用程序的数据流、避免遗漏掉任何程序行为的技术效果,进而解决了现有技术获取到的应用程序的控制流和数据流的准确率较低的技术问题。[0142]可选的,上述处理器1102还可以执行如下步骤的程序代码:将目标应用程序转换为代码文件,代码文件包含函数以及函数的标识信息;遍历代码文件中的函数,将函数分解成多个程序块;依据多个程序块,生成具有目标应用程序执行方向的控制流图。[0143]可选的,上述处理器1102还可以执行如下步骤的程序代码:从控制流图中确定多个程序块的入口程序块,其中,多个程序块的入口程序块是指执行多个程序块的起点;根据入口程序块以及执行路径,执行多个程序块。[0144]可选的,上述处理器1102还可以执行如下步骤的程序代码:在多个程序块中,判断每个程序块的入度是否为第一标识;从入度为第一标识的程序块中,筛选出预定义的入口程序块;将预定义的入口程序块确定为多个程序块的入口程序块。[0145]可选的,上述处理器1102还可以执行如下步骤的程序代码:从入口程序块开始,沿执行路径,调用预设的缺陷执行列表,对多个程序块进行缺陷执行,其中,缺陷执行列表用于指示在执行多个程序块的过程中需获取的状态信息,状态信息包括预设变量的预设属性。[0146]可选地,上述处理器1102还可以执行如下步骤的程序代码:根据状态信息,更新控制流图;依据更新后的控制流图生成控制流,以及依据状态信息生成数据流。[0147]本领域普通技术人员可以理解,图11所示的结构仅为示意,计算机终端也可以是智能手机如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备MobileInternetDevices,MID、PAD等终端设备。图11其并不对上述电子装置的结构造成限定。例如,计算机终端A还可包括比图11中所示更多或者更少的组件如网络接口、显示装置等),或者具有与图11所示不同的配置。[0148]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器Read-On1yMemory,ROM、随机存取器RandomAccessMemory,RAM、磁盘或光盘等。[0149]实施例4[0150]本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的应用程序的处理方法所执行的程序代码。[0151]可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。[0152]可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取目标应用程序的控制流图,其中,控制流图中包含由目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,后继程序块ID用于指向所跳转的程序块;按照控制流图中的当前程序块ID和后继程序块ID所构成的执行路径,执行多个程序块,得到每个程序块对应的状态信息,其中,状态信息用于指示执行每个程序块时所使用的数据状态;基于状态信息和控制流图生成目标应用程序的控制流和数据流。[0153]此处需要说明的是,上述计算机终端群中的任意一个可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的值命令。[0154]上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。[0155]在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。[0156]在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模程序块的间接耦合或通信连接,可以是电性或其它的形式。[0157]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0158]另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0159]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备可为个人计算机、服务器或者网络设备等执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器R0M,Read_0nlyMemory、随机存取存储器RAM,RandomAccessMemory、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。[0160]以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

权利要求:1.一种应用程序的处理方法,其特征在于,包括:一获取目标应用程序的控制流图,其中,所述控制流图中包含由所述目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,所述后继程序块ID用于指向所跳转的程序块;_按照所述控制流图中的所述当前程序块ID和所述后继程序块ID所构成的执行路径,执行所述多个程序块,得到每个程序块对应的状态信息,其中,所述状态信息用于指示执行每个程序块时所使用的数据状态;基于所述状态信息和所述控制流图生成所述目标应用程序的控制流和数据流。2.根据权利要求1所述的方法,其特征在于,所述获取目标应用程序的控制流图包括:将所述目标应用程序转换为代码文件,所述代码文件包含函数以及所述函数的标识信息;遍历所述代码文件中的所述函数,将所述函数分解成所述多个程序块;依据所述多个程序块,生成具有所述目标应用程序执行方向的所述控制流图。3.根据权利要求2所述的方法,其特征在于,所述函数的标识信息包括以下一种或几种:所述函数的函数名、类名、返回值以及类的成员变量的名称。4.根据权利要求1所述的方法,其特征在于,所述按照所述控制流图中的所述当前程序块ID和所述后继程序块ID所构成的执行路径,执行所述多个程序块包括:从所述控制流图中确定所述多个程序块的入口程序块,其中,所述多个程序块的入口程序块是指执行所述多个程序块的起点;根据所述入口程序块以及所述执行路径,执行所述多个程序块。5.根据权利要求4所述的方法,其特征在于,所述从所述控制流图中确定所述多个程序块的入口程序块包括:在所述多个程序块中,判断每个程序块的入度是否为第一标识;从所述入度为所述第一标识的程序块中,筛选出预定义的入口程序块;将所述预定义的入口程序块确定为所述多个程序块的入口程序块。6.根据权利要求4所述的方法,其特征在于,所述根据所述入口程序块以及所述执行路径,执行所述多个程序块包括:从所述入口程序块开始,沿所述执行路径,调用预设的缺陷执行列表,对所述多个程序块进行缺陷执行,其中,所述缺陷执行列表用于指示在执行所述多个程序块的过程中需获取的所述状态信息,所述状态信息包括预设变量的预设属性。7.根据权利要求1所述的方法,其特征在于,所述基于所述状态信息和所述控制流图生成所述目标应用程序的控制流以及数据流包括:根据所述状态信息,更新所述控制流图;依据更新后的所述控制流图生成所述控制流,以及依据所述状态信息生成所述数据流。8.根据权利要求1至7中任一项所述的方法,其特征在于,所述状态信息包括以下一种或几种:调用找、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系。9.一种应用程序的处理装置,其特征在于,包括:获取单元,用于获取目标应用程序的控制流图,其中,所述控制流图中包含由所述目标应用程序中的函数分解而成的多个程序块,每个程序块包含当前程序块ID和后继程序块ID,所述后继程序块ID用于指向所跳转的程序块;执行单元,用于按照所述控制流图中的所述当前程序块ID和所述后继程序块ID所构成的执行路径,执行所述多个程序块,得到每个程序块对应的状态信息,其中,所述状态信息用于指示执行每个程序块时所使用的数据状态;生成单元,用于基于所述状态信息和所述控制流图生成所述目标应用程序的控制流和数据流。10.根据权利要求9所述的装置,其特征在于,所述获取单元包括:转换模块,用于将所述目标应用程序转换为代码文件,所述代码文件包含函数以及所述函数的标识信息;分解模块,用于遍历所述代码文件中的所述函数,将所述函数分解成所述多个程序块;生成模块,用于依据所述多个程序块,生成具有所述目标应用程序执行方向的所述控制流图。11.根据权利要求10所述的装置,其特征在于,所述函数的标识信息包括以下一种或几种:所述函数的函数名、类名、返回值以及类的成员变量的名称。12.根据权利要求9所述的装置,其特征在于,所述执行单元包括:确定模块,用于从所述控制流图中确定所述多个程序块的入口程序块,其中,所述多个程序块的入口程序块是指执行所述多个程序块的起点;执行模块,用于根据所述入口程序块以及所述执行路径,执行所述多个程序块。13.根据权利要求12所述的装置,其特征在于,所述确定模块包括:判断子模块,用于在所述多个程序块中,判断每个程序块的入度是否为第一标识;筛选子模块,用于从所述入度为所述第一标识的程序块中,筛选出预定义的入口程序块;确定子模块,用于将所述预定义的入口程序块确定为所述多个程序块的入口程序块。14.根据权利要求12所述的装置,其特征在于,所述执行模块用于执行以下步骤根据所述入口程序块以及所述执行路径,执行所述多个程序块:从所述入口程序块开始,沿所述执行路径,调用预设的缺陷执行列表,对所述多个程序块进行缺陷执行,其中,所述缺陷执行列表用于指示在执行所述多个程序块的过程中需获取的所述状态信息,所述状态信息包括预设变量的预设属性。15.根据权利要求9所述的装置,其特征在于,所述生成单元包括:更新模块,用于根据所述状态信息,更新所述控制流图;生成模块,用于依据更新后的所述控制流图生成所述控制流,以及依据所述状态信息生成所述数据流。16.根据权利要求9至I5中任一项所述的装置,其特征在于,所述状态信息包括以下一种或几种:调用栈、函数执行返回值、类的实例、寄存器、指令集以及类的继承关系。

百度查询: 阿里巴巴集团控股有限公司 应用程序的处理方法及处理装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。