反编译数据的处理方法和装置与流程

文档序号:12801699阅读:570来源:国知局
本发明涉及反编译数据领域,具体而言,涉及一种反编译数据的处理方法和装置。
背景技术
::android程序运行在dalvik虚拟机中,由dalvik虚拟机解释执行android程序的dalvik指令,dalvik指令经过反编译输出方便人阅读的smali指令。对android程序进行执行流追踪,一般分为两类:静态追踪和动态追踪。动态追踪即运行时追踪,存在执行分支覆盖不全的缺点;静态追踪分支覆盖全,但是,涉及程序的切片技术和函数调用链追踪技术。现有的静态追踪技术中会把切片后的基本块以指针形式串接起来表达函数调用链关系。现有技术将基本块结构体以指针方式构建函数调用关系,虽然,能解决从某个函数出发正向深度递归遍历某个分支执行流,但是,对于定位执行入口,全分支覆盖执行,反向追踪执行方面加重了程序设计、编码的难度,使程序不易理解,降低了程序稳定性、可扩展性和灵活性。针对现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题,目前尚未提出有效的解决方案。技术实现要素:本发明实施例提供了一种反编译数据的处理方法和装置,以至少解决现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题。根据本发明实施例的一个方面,提供了一种反编译数据的处理方法,包括:创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和第三维数组;在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息;获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系;将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记录至第一维数 组中、第二维数组中和第三维数组中。根据本发明实施例的另一方面,还提供了一种反编译数据的处理装置,包括:创建模块,用于创建三维数组模型,装置三维数组模型包括:第一维数组、第二维数组和第三维数组;第一获取模块,用于在将应用程序反编译为反编译程序之后,遍历装置反编译程序所包含的多个方法,获取每个方法的标识信息,其中,装置方法的标识信息包括:方法类名和方法签名信息;第二获取模块,用于获取装置每个方法对应的多维向量对象,以及装置每个多维向量对象之间的调用关系;记录模块,用于将装置每个方法的装置标识信息、对应的装置多维向量对象以及每个多维向量对象之间的调用关系分别记录至装置第一维数组中、装置第二维数组中和装置第三维数组中。在本发明实施例中,可以在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,每个方法对应的多维向量对象和每个多维向量对象之间的调用关系,并将每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系记录至创建好的三维数组模型。容易注意到,由于可以通过将遍历反编译程序获取到每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系全部记录到创建的三维数组模型中,实现根据方法的类名和签名信息从三维数组模型中快速定位到多维向量对象的目的,因此,通过本申请实施例所提供的方案,可以根据需要的方法的类名和签名信息从三维数组模型中快速定位到多维向量对象,然后对所有向量采用深度优先递归遍历,完成全分支覆盖。由此,本发明提供的上述方案解决了现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据本申请实施例的一种反编译数据的处理方法的计算机终端的硬件结构框图;图2是根据本申请实施例一的一种反编译数据的处理方法的流程图;图3是根据本申请实施例的可选的三维坐标系下多维向量映射的示意图;图4是根据本申请实施例的一种可选的反编译数据的处理方法的流程图;图5是根据本申请实施例二的一种反编译数据的处理装置的示意图;图6是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图7是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图8是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图9是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图10是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图11是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;图12是根据本申请实施例二的一种可选的反编译数据的处理装置的示意图;以及图13是根据本申请实施例的一种计算机终端的结构框图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:dalvik虚拟机:是google公司等厂商合作开发的android移动设备平台的核心组成部分之一,可以支持已转换为.dex(即dalvikexecutable)格式的java应用程序的运行,.dex格式是专门为dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。smali:是dalvik虚拟机所使用的一种.dex格式文件的汇编器。实施例1根据本发明实施例,还提供了一种反编译数据的处理方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种反编译数据的处理方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的反编译数据的处理方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的反编译数据的处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。在上述运行环境下,本申请提供了如图2所示的反编译数据的处理方法。图2是根据本申请实施例一的一种反编译数据的处理方法的流程图,如图2所示,该方法包括:步骤s21,创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和 第三维数组。在一种可选的方案中,上述三维数组模型可以采用三维坐标系模型来进行表示,上述第一维数组、第二维数组和第三维数组可以采用三维坐标系模型中的坐标轴来进行描述,其中,第一维数组可以是x轴,第二维数组可以是y轴,第三维数据可以是z轴,创建三维数组模型可以是初始化三维坐标系模型,使x,y,z轴为空,其中x,y,z轴都是顺序结构,z轴队列的每个元素也是顺序结构用以保存多个调用者的向量,x和y轴队列的元素分别保存字符串对象和向量对象。步骤s23,在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息。步骤s25,获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系。步骤s27,将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记录至第一维数组中、第二维数组中和第三维数组中。在一种可选的方案中,可以通过三维坐标系模型管理模块和分支执行追踪模块执行上述步骤,其中,三维坐标系模型管理模块(记为c),主要负责完成将登记过的多维向量映射到三维坐标系中,如图3所示,多维向量ds和dt在三维坐标系中分别获得了各自的坐标(m,m,m)和(n,n,n)。分支执行追踪模块(记为t),主要负责从某个执行入口正向或反向追踪程序的执行流。本申请上述实施例一公开的方案中,可以在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,每个方法对应的多维向量对象和每个多维向量对象之间的调用关系,并将每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系记录至创建好的三维数组模型。容易注意到,由于可以通过将遍历反编译程序获取到每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系全部记录到创建的三维数组模型中,实现根据方法的类名和签名信息从三维数组模型中快速定位到多维向量对象的目的,因此,通过本申请实施例所提供的方案,可以根据需要的方法的类名和签名信息从三维数组模型中快速定位到多维向量对象,然后对所有向量采用深度优先递归遍历,完成全分支覆盖。由此,本申请提供的上述实施例一的方案解决了现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题。根据本申请上述实施例,在一种优选的方案中,任意一个方法在第一维数组、第二维数组和第三维数组中对应的记录位置具有相同的位置坐标。根据本申请上述实施例,步骤s27,将每个方法的标识信息记录至第一维数组,包括:步骤s271,将每个方法的标识信息以队列形式的顺序结构映射至第一维数组中,并记录每个方法的标识信息在第一维数组的队列中的记录位置。在一种可选的方案中,可以将获取到的每个方法的标识信息(即切片的方法的类名和方法签名)映射到步骤s21中初始化的三维坐标系的x轴上,即放入x轴队列中,其在x轴队列中的位置记为m,并将步骤s25中的多维向量ds映射到y轴上,即放入y轴队列中的m位置上。如果已经映射过了无需映射。根据本申请上述实施例,步骤s27,将每个方法对应的多维向量对象记录至第二维数组,包括:步骤s273,将每个方法所对应的多维向量对象以队列形式的顺序结构映射至第二维数组中,并记录每个方法对应的多维向量对象在第二维数组的队列中的记录位置。根据本申请上述实施例,步骤s25,获取每个方法对应的多维向量对象,包括:步骤s251,在遍历得到反编译程序所包含的多个方法之后,将每个方法进行切片和分支剥离处理,得到每个方法所包含的多个执行分支,执行分支由反编译得到的程序基本块构成。具体地,上述程序基本块可以是smali指令基本块,可以根据分支跳转偏移,将步骤s25中获取到的每个方法切片后所得的smali指令基本块组建成分支执行序列(bc1,bc2,…,bcn),每个执行分支bcx(即bc1,bc2,…,bcn中的任意一个)都是一个基本块序列(b1,b2,…,bn),而每个基本块bx(即b1,b2,…,bn中的任意一个)都是由smali指令构成。在一种可选的方案中,可以通过程序切片和分支剥离模块执行上述步骤,其中,程序切片和分支剥离模块(记为b),主要负责对android程序反编译成smali程序,并对smali程序按方法逐个进行切片和分支剥离,最终,形成以切片后的smali指令基本块构成的多个执行分支,如图3所示的多维向量ds和dt的各自执行分支bc1和bc2。步骤s253,将每个方法所包含的执行分支映射到多维向量中,建立每个方法的执行分支序列所对应的多维向量对象,其中,方法中包含的执行分支在对应的多维向量 对象中存在一个分支向量。具体地,针对上述步骤s251得出的分支执行序列(bc1,bc2,…,bcn)建立对应的多维向量ds对象。在一种可选的方案中,可以通过向量模型管理模块执行上述步骤,其中,向量模型管理模块(记为v),主要负责将b模块完成的每个方法的所有执行分支映射到多维向量中,程序中的每个方法对应一个多维向量,每个方法的每个分支对应一个多维向量中的某一维,如图1中ds和dt分别与bc1和bc2之间的关系。每完成一个多维向量的创建就会在三维坐标系管理模块中登记该向量。根据本申请上述实施例,获取每个方法对应的多维向量对象之间的调用关系,包括:步骤s255,循环遍历第二维数组中的多维向量对象,在第二维数组中确定任意一个方法的第一多维向量对象之后,使用回溯处理方法确定与第一多维向量对象具有函数调用链关系的第二多维向量对象,得到每个方法对应的多维向量对象之间的调用关系。根据本申请上述实施例,步骤s255,在第二维数组中确定任意一个方法的第一多维向量对象之后,使用回溯处理方法确定与第一多维向量对象具有函数调用关系的第二多维向量对象,得到每个方法对应的多维向量对象之间的调用关系的步骤包括:步骤s2551,获取第二维数组中记录在第一记录位置的第一多维向量对象。步骤s2552,遍历第一多维向量对象所包含的多个分支向量,得到每个分支向量所对应的执行分支中所包含的程序基本块,其中,程序基本块由反编译得到的程序指令构成。步骤s2553,如果分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令所调用的被调函数的标识信息。步骤s2554,根据被调函数的标识信息,在第一维数组中查询是否存在与被调函数的标识信息相同的方法,获取标识信息相同的第一类方法。步骤s2555,获取第一类方法在第一维数组中的第一记录位置。步骤s2556,在第二维数组中查询与第一记录位置的坐标值相同的第二记录位置,并获取记录在第二记录位置的第二多维向量对象,其中,第二多维向量对象为被第一多维向量对象调用的向量对象。步骤s2557,将第一多维向量对象和第二多维向量对象之间的函数调用关系记录 在第三维数组中的对应位置,第三维数组中的对应位置与第二维数组中的第一记录位置相同。在一种可选的方案中,循环遍历多维向量ds中的每个分支向量对应的执行分支bcx,遍历分支中的smali指令,如果存在调用函数指令,则取出该函数的类名和方法名信息记为xn,然后,查找x轴是否存在xn的坐标n,如果存在该点,则通过与该点对应的y轴上的n坐标处取出被调用向量dt,并将向量ds放入向量dt所对应的z轴n处的队列中,这样就建立了一个向量ds指向向量dt的关系,即建立了一个函数调用链关系。根据本申请上述实施例,在第一维数组中未查询到标识信息相同的方法的情况下,在第二维数组中建立一个空向量,并将调用函数指令所调用的函数的标识信息映射到第一维数组中的对应位置。在一种可选的方案中,如果xn在x轴上不存在,则建立一个空向量dt映射到y轴坐标上,同时将xn映射到x轴上n坐标处。根据本申请上述实施例,在步骤s23,遍历反编译程序所包含的多个方法之后,上述方法还包括:步骤s231,如果反编译程序中所包含的多个方法被遍历完全,则启动追踪处理流程。步骤s233,接收待追踪的方法的标识信息,并根据待追踪的方法的标识信息确定待追踪的多维向量对象。步骤s235,基于待追踪的多维向量对象进行正向追踪或反向追踪反编译程序。在一种可选的方案中,在追踪某一向量的过程中,遇到调用函数情形,只需要在三维坐标系查找z轴映射关系就可以定位到下一个执行入口函数,进去之后继续深度优先遍历;而反向追踪执行流程也类似,定位入口之后从向量尾部反向追踪,到达向量顶点则查找z轴,找到后通过三维坐标系定位到调用者的向量继续反向追踪过程。本申请通过三维坐标系和多维向量模型,在定位执行入口,正向或反向追踪程序执行流方面加快了遍历和查找速度,健全了分支覆盖,使程序编码更清晰、简单、稳定和易于维护。根据本申请上述实施例,步骤s235,基于待追踪的多维向量对象进行正向追踪反编译程序,包括:步骤s2351,获取待追踪的多维向量对象在第二维数组中的第三记录位置,以及 待追踪的多维向量对象所包含的分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块。步骤s2353,基于执行分支的尾部程序基本块进行反向追踪,在追踪到执行分支的头部程序基本块时,从第三维数组中获取与待追踪的多维向量对象具有调用关系的多维向量对象。步骤s2355,在将与待追踪的多维向量对象具有调用关系的多维向量对象作为执行入口之后,执行后续的深度优先遍历来完成反向追踪。根据本申请上述实施例,在一种优选的方案中,将第三维数组中记录在第一记录位置的多维向量对象,作为与待追踪的多维向量对象具有调用关系的多维向量对象,其中,第三维数组的第一记录位置与第二维数组的第三记录位置具有相同的位置坐标。根据本申请上述实施例,步骤s235,基于待追踪的多维向量对象进行正向追踪或反向追踪反编译程序,包括:步骤s2350,获取待追踪的多维向量对象所包含的所有分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块。步骤s2352,对待追踪的多维向量对象所包含的所有分支向量进行深度优先遍历,在遍历到第一分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令的标识信息。步骤s2354,根据调用函数指令的标识信息,在第一维数组中确定调用函数指令的坐标位置。步骤s2356,并根据调用函数指令在第一维数组中的坐标位置,在第二维数组中查询得到对应的新多维向量对象。步骤s2358,并从新多维向量对象开始执行深度递归遍历来完成正向追踪。在一种可选的方案中,在三维坐标系中,根据提供的类名加方法签名信息转化为x轴坐标上点记为m,然后,到y轴上的m位置处取出向量dm。如果是正向追踪执行流,则取出dm所映射的所有执行分支并进行深度优先遍历,每当在某个执行分支遇到调用函数指令则取出该函数的类名和方法签名去x轴找到坐标位置k,然后,再根据位置k查找y轴找到新向量dk,从dk开始继续深度递归遍历实现正向追踪执行流。如果是反向追踪执行流,则取出dm所映射的所有分支后从分支尾部基本块开始追踪,每当追踪到执行分支的头部,则取出z轴上m位置上的向量队列中的某个向量dz,然后,重新以向量dz为执行入口进行反向执行追踪。通过本申请上述实施例,根据smali语言中的分支指令,对android程序中的任意java方法进行切片处理,切片后由smali指令组成的基本块构成了多个执行分支。本申请通过对android程序的smali指令进行三维坐标系和多纬向量建模,为android静态自动化漏洞挖掘提供了一种可以从某个执行点快速地正向或反向追踪程序执行流的方法。下面结合图3和图4详细介绍本申请的一种优选的实施例。如图3和图4所示,提供了一种可选的反编译数据的处理方法,该方法可以包括如下步骤s41至步骤s415:步骤s41,初始化三维坐标轴x,y,z轴。可选地,初始化三维坐标系模型,使x,y,z轴为空,其中x,y,z轴都是顺序结构,z轴队列的每个元素也是顺序结构用以保存多个调用者的向量,x和y轴队列的元素分别保存字符串对象和向量对象。步骤s42,遍历smali程序中的方法。步骤s43,判断是否遍历完成。具体地,遍历smali程序中的下一个方法,如果没有遍历完则进入步骤s44;如果遍历完成则进入步骤s412。步骤s44,将方法切片生成分支执行序列(bc1,bc2,…,bcn)并转化为向量ds。可选地,根据分支跳转偏移,将步骤s42对方法切片后所得的smali指令基本块组建成分支执行序列(bc1,bc2,…,bcn),每个执行分支bcx都是一个基本块序列(b1,b2,…,bn),而每个基本块bx都是由smali指令构成,针对上述分支执行序列(bc1,bc2,…,bcn)建立对应的多维向量ds对象。步骤s45,将切片方法的类名和方法签名信息映射到x轴上,将ds映射到y轴上。可选地,将步骤s44切片的方法的类名和方法签名映射到步骤s41中初始化的三维坐标系的x轴上,即放入x轴队列中,其在x轴队列中的位置记为m,将步骤s44中的向量ds映射到y轴上,即放入y轴队列中的m位置上。如果已经映射过了无需映射。步骤s46,循环遍历向量ds中的分支执行向量bcx。步骤s47,判断是否有调用函数指令。具体地,如果有调用指令,则进入步骤s48,取出被调函数的类名和方法名信息记为xm;如果没有,则返回步骤s46。步骤s49,判断x轴是否存在xm坐标m。具体地,如果x轴存在xm坐标m,则进入步骤s410,取y轴上m位置坐标处被调向量dt,并将向量ds放入向量dt所对应的z轴坐标的队列中,执行完成之后返回步骤s42;如果不存在,则进入步骤s411,建立一个空向量dt映射到y轴坐标上,同时将xm映射到x轴上,执行完成之后返回步骤s42。可选地,循环遍历向量ds中的每个分支向量对应的bcx,遍历分支中的smali指令,如果存在调用函数指令,则取出该函数的类名和方法名信息记为xn,然后,查找x轴是否存在xn的坐标n,如果存在该点,则通过与该点对应的y轴上的n坐标处取出被调用向量dt,并将向量ds放入向量dt所对应的z轴n处的队列中,这样就建立了一个向量ds指向向量dt的关系,即建立了一个函数调用链关系;如果xn在x轴上不存在,则建立一个空向量dt映射到y轴坐标上,同时将xn映射到x轴上n坐标处。继续步骤s42,直到完成遍历。步骤s412,开始指令执行追踪过程,取待追踪的类名加方法签名信息记为xm转化为x轴上坐标m,然后,取y轴上m位置处向量dm。可选地,在三维坐标系中,根据提供的类名加方法签名信息转化为x轴坐标上点记为m,然后,到y轴上的m位置处取出向量dm。步骤s413,判断是正向追踪执行过程或者反向追踪执行过程。具体地,如果是正向追踪执行过程,则进入步骤s414,取出dm所映射的所有执行分支并进行深度优先遍历,每当在某个执行分支遇到调用函数指令则取出该函数的类名和方法签名去x轴找到坐标位置k,然后,再根据位置k查找y轴找到新向量dk,从dk开始继续深度递归遍历实现正向追踪执行流;如果是反向追踪执行过程,则进入步骤s415,取出dm所映射的所有分支后从分支尾部基本块开始追踪,每当追踪到执行分支的头部,则取出z轴上m位置上的向量队列中的某个向量dz,然后,重新以向量dz为执行入口进行反向执行追踪。本申请将所有方法的类名加方法签名信息映射到三维坐标系中的横轴(记为x轴)上,将对应于该方法的所有执行分支映射成一个多维向量(多维向量记为d),将所有多维向量映射到三维坐标系中的纵轴(记为y轴)上,将某个多维向量的调用关系映射到三维坐标系的垂直于x轴y轴平面的z轴上。当需要正向从某个方法追踪执行分支的时候,只需要用该方法的类名加方法签名就可以快速的从三维坐标系的x轴对应的 y轴上定位到执行入口函数的多维向量d,然后,对d的所有向量采用深度优先递归遍历,即完成全分支覆盖。上述优选的实施例可以通过以下模块执行实现:程序切片和分支剥离模块(记为b),主要负责对android程序反编译成smali程序,并对smali程序按方法逐个进行切片和分支剥离,最终,形成以切片后的smali指令基本块构成的多个执行分支,如图3中ds和dt的各自执行分支bc1和bc2。向量模型管理模块(记为v),主要负责将b模块完成的每个方法的所有执行分支映射到多维向量中,程序中的每个方法对应一个多维向量,每个方法的每个分支对应一个多维向量中的某一维,如图1中ds和dt分别与bc1和bc2之间的关系。每完成一个多维向量的创建就会在三维坐标系管理模块中登记该向量。三维坐标系模型管理模块(记为c),主要负责完成将登记过的多维向量映射到三维坐标系中,如图3中的ds和dt在三维坐标系中分别获得了各自的坐标(m,m,m)和(n,n,n)。分支执行追踪模块(记为t),主要负责从某个执行入口正向或反向追踪程序的执行流。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。实施例2根据本发明实施例,还提供了一种用于实施上述反编译数据的处理方法的反编译数据的处理装置,如图5所示,该装置包括:创建模块51,第一获取模块53,第二获 取模块55和记录模块57。其中,创建模块51用于创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和第三维数组。在一种可选的方案中,上述三维数组可以是三维坐标系模型,上述第一维数组、第二维数组和第三维数组可以是三维坐标系模型的坐标轴,第一维数组可以是x轴,第二维数组可以是y轴,第三维数据可以是z轴,创建三维数组模型可以是初始化三维坐标系模型,使x,y,z轴为空,其中x,y,z轴都是顺序结构,z轴队列的每个元素也是顺序结构用以保存多个调用者的向量,x和y轴队列的元素分别保存字符串对象和向量对象。第一获取模块53用于在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息。第二获取模块55用于获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系。记录模块57用于将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记录至第一维数组中、第二维数组中和第三维数组中。在一种可选的方案中,可以通过三维坐标系模型管理模块和分支执行追踪模块执行上述步骤,其中,三维坐标系模型管理模块(记为c),主要负责完成将登记过的多维向量映射到三维坐标系中,如图3所示,多维向量ds和dt在三维坐标系中分别获得了各自的坐标(m,m,m)和(n,n,n)。分支执行追踪模块(记为t),主要负责从某个执行入口正向或反向追踪程序的执行流。本申请上述实施例二公开的方案中,可以在将应用程序反编译为反编译程序之后,第一获取模块和第二获取模块遍历反编译程序所包含的多个方法,获取每个方法的标识信息,每个方法对应的多维向量对象和每个多维向量对象之间的调用关系,记录模块将每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系记录至创建模块创建好的三维数组模型。容易注意到,由于可以通过将遍历反编译程序获取到每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系全部记录到创建的三维数组模型中,实现根据方法的类名和签名信息从三维数组模型中快速定位到多维向量对象的目的,因此,通过本申请实施例所提供的方案,可以根据需要的方法的类名和签名信息从三维数组模型中快速定位到多维向量对象,然后对所有向量采用深度优先递归遍历, 完成全分支覆盖。由此,本申请提供的上述实施例二的方案解决了现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题。根据本申请上述实施例,在一种优选的方案中,任意一个方法在第一维数组、第二维数组和第三维数组中对应的记录位置具有相同的位置坐标。根据本申请上述实施例,在一种优选的方案中,记录模块57包括:第一记录子模块。其中,第一记录子模块用于将每个方法的标识信息以队列形式的顺序结构映射至第一维数组中,并记录每个方法的标识信息在第一维数组的队列中的记录位置。在一种可选的方案中,记录子模块可以将获取到的每个方法的标识信息(即切片的方法的类名和方法签名)映射到创建模块初始化的三维坐标系的x轴上,即放入x轴队列中,其在x轴队列中的位置记为m,并将第二获取模块获取到的多维向量ds映射到y轴上,即放入y轴队列中的m位置上。如果已经映射过了无需映射。根据本申请上述实施例,在一种优选的方案中,记录模块57还包括:第二记录子模块。其中,第二记录子模块用于将每个方法所对应的多维向量对象以队列形式的顺序结构映射至第二维数组中,并记录每个方法对应的多维向量对象在第二维数组的队列中的记录位置。根据本申请上述实施例,如图6所示,第二获取模块55包括:第一处理模块61和建立模块63。其中,第一处理模块61用于在遍历得到反编译程序所包含的多个方法之后,将每个方法进行切片和分支剥离处理,得到每个方法所包含的多个执行分支,执行分支由反编译得到的程序基本块构成。具体地,上述程序基本块可以是smali指令基本块,可以根据分支跳转偏移,将步骤s25中获取到的每个方法切片后所得的smali指令基本块组建成分支执行序列(bc1,bc2,…,bcn),每个执行分支bcx(即bc1,bc2,…,bcn中的任意一个)都是一个基本块序列(b1,b2,…,bn),而每个基本块bx(即b1,b2,…,bn中的任意一个)都是由smali指令构成。在一种可选的方案中,可以通过程序切片和分支剥离模块执行上述步骤,其中, 程序切片和分支剥离模块(记为b),主要负责对android程序反编译成smali程序,并对smali程序按方法逐个进行切片和分支剥离,最终,形成以切片后的smali指令基本块构成的多个执行分支,如图3所示的多维向量ds和dt的各自执行分支bc1和bc2。建立模块63用于将每个方法所包含的执行分支映射到多维向量中,建立每个方法的执行分支序列所对应的多维向量对象,其中,方法中包含的执行分支在对应的多维向量对象中存在一个分支向量。具体地,针对第一处理模块61得出的分支执行序列(bc1,bc2,…,bcn)建立对应的多维向量ds对象。在一种可选的方案中,可以通过向量模型管理模块执行上述步骤,其中,向量模型管理模块(记为v),主要负责将b模块完成的每个方法的所有执行分支映射到多维向量中,程序中的每个方法对应一个多维向量,每个方法的每个分支对应一个多维向量中的某一维,如图1中ds和dt分别与bc1和bc2之间的关系。每完成一个多维向量的创建就会在三维坐标系管理模块中登记该向量。根据本申请上述实施例,如图7所示,第二获取模块55还包括:第二处理模块71。其中,第二处理模块71用于循环遍历第二维数组中的多维向量对象,在第二维数组中确定任意一个方法的第一多维向量对象之后,使用回溯处理方法确定与第一多维向量对象具有函数调用链关系的第二多维向量对象,得到每个方法对应的多维向量对象之间的调用关系。根据本申请上述实施例,如图8所示,第二处理模块71包括:第一获取子模块81,处理子模块82,第二获取子模块83,第三获取子模块84,第四获取子模块85,第五获取子模块86和记录子模块87。其中,第一获取子模块81用于获取第二维数组中记录在第一记录位置的第一多维向量对象。处理子模块82用于遍历第一多维向量对象所包含的多个分支向量,得到每个分支向量所对应的执行分支中所包含的程序基本块,其中,程序基本块由反编译得到的程序指令构成。第二获取子模块83用于如果分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令所调用的被调函数的标识信息。第三获取子模块84用于根据被调函数的标识信息,在第一维数组中查询是否存在与被调函数的标识信息相同的方法,获取标识信息相同的第一类方法。第四获取子模块85用于获取第一类方法在第一维数组中的第一记录位置。第五获取子模块86用于在第二维数组中查询与第一记录位置的坐标值相同的第二记录位置,并获取记录在第二记录位置的第二多维向量对象,其中,第二多维向量对象为被第一多维向量对象调用的向量对象。记录子模块87用于将第一多维向量对象和第二多维向量对象之间的函数调用关系记录在第三维数组中的对应位置,第三维数组中的对应位置与第二维数组中的第一记录位置相同。在一种可选的方案中,循环遍历多维向量ds中的每个分支向量对应的执行分支bcx,遍历分支中的smali指令,如果存在调用函数指令,则取出该函数的类名和方法名信息记为xn,然后,查找x轴是否存在xn的坐标n,如果存在该点,则通过与该点对应的y轴上的n坐标处取出被调用向量dt,并将向量ds放入向量dt所对应的z轴n处的队列中,这样就建立了一个向量ds指向向量dt的关系,即建立了一个函数调用链关系。根据本申请上述实施例,在一种优选的方案中,第二处理模块71还可以包括:建立子模块。其中,建立子模块用于在第一维数组中未查询到标识信息相同的方法的情况下,在第二维数组中建立一个空向量,并将调用函数指令所调用的函数的标识信息映射到第一维数组中的对应位置。在一种可选的方案中,如果xn在x轴上不存在,则建立一个空向量dt映射到y轴坐标上,同时将xn映射到x轴上n坐标处。根据本申请上述实施例,如图9所示,上述装置还包括:启动模块91,第一确定模块93和追踪模块95。其中,启动模块91用于如果反编译程序中所包含的多个方法被遍历完全,则启动追踪处理流程。第一确定模块93用于接收待追踪的方法的标识信息,并根据待追踪的方法的标识信息确定待追踪的多维向量对象。追踪模块95用于基于待追踪的多维向量对象进行正向追踪或反向追踪反编译程 序。在一种可选的方案中,在追踪某一向量的过程中,遇到调用函数情形,只需要在三维坐标系查找z轴映射关系就可以定位到下一个执行入口函数,进去之后继续深度优先遍历;而反向追踪执行流程也类似,定位入口之后从向量尾部反向追踪,到达向量顶点则查找z轴,找到后通过三维坐标系定位到调用者的向量继续反向追踪过程。本申请通过三维坐标系和多维向量模型,在定位执行入口,正向或反向追踪程序执行流方面加快了遍历和查找速度,健全了分支覆盖,使程序编码更清晰、简单、稳定和易于维护。根据本申请上述实施例,如图10所示,追踪模块95包括:第三获取模块101,第四获取模块103和执行模块105。其中,第三获取模块101用于获取待追踪的多维向量对象在第二维数组中的第三记录位置,以及待追踪的多维向量对象所包含的分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块。第四获取模块103用于基于执行分支的尾部程序基本块进行反向追踪,在追踪到执行分支的头部程序基本块时,从第三维数组中获取与待追踪的多维向量对象具有调用关系的多维向量对象。执行模块105用于在将与待追踪的多维向量对象具有调用关系的多维向量对象作为执行入口之后,执行后续的深度优先遍历来完成反向追踪。根据本申请上述实施例,如图11所示,上述装置还包括:第三处理模块111。其中,第三处理模块111用于将第三维数组中记录在第一记录位置的多维向量对象,作为与待追踪的多维向量对象具有调用关系的多维向量对象,其中,第三维数组的第一记录位置与第二维数组的第三记录位置具有相同的位置坐标。根据本申请上述实施例,如图12所示,追踪模块95包括:第五获取模块121,第六获取模块123,第二确定模块125,查询模块127和第四处理模块129。其中,第五获取模块121用于获取待追踪的多维向量对象所包含的所有分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块。第六获取模块123用于对待追踪的多维向量对象所包含的所有分支向量进行深度优先遍历,在遍历到第一分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令的标识信息。第二确定模块125用于根据调用函数指令的标识信息,在第一维数组中确定调用函数指令的坐标位置。查询模块127用于并根据调用函数指令在第一维数组中的坐标位置,在第二维数组中查询得到对应的新多维向量对象。第四处理模块129用于并从新多维向量对象开始执行深度递归遍历来完成正向追踪。在一种可选的方案中,在三维坐标系中,根据提供的类名加方法签名信息转化为x轴坐标上点记为m,然后,到y轴上的m位置处取出向量dm。如果是正向追踪执行流,则取出dm所映射的所有执行分支并进行深度优先遍历,每当在某个执行分支遇到调用函数指令则取出该函数的类名和方法签名去x轴找到坐标位置k,然后,再根据位置k查找y轴找到新向量dk,从dk开始继续深度递归遍历实现正向追踪执行流。如果是反向追踪执行流,则取出dm所映射的所有分支后从分支尾部基本块开始追踪,每当追踪到执行分支的头部,则取出z轴上m位置上的向量队列中的某个向量dz,然后,重新以向量dz为执行入口进行反向执行追踪通过本申请上述实施例,根据smali语言中的分支指令,对android程序中的任意java方法进行切片处理,切片后由smali指令组成的基本块构成了多个执行分支。本申请通过对android程序的smali指令进行三维坐标系和多纬向量建模,为android静态自动化漏洞挖掘提供了一种可以从某个执行点快速地正向或反向追踪程序执行流的方法。实施例3本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。在本实施例中,上述计算机终端可以执行反编译数据的处理方法中以下步骤的程序代码:创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和第三维数组;在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息;获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系;将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记 录至第一维数组、第二维数组中和第三维数组中。可选地,图13是根据本申请实施例的一种计算机终端的结构框图。如图13所示,该计算机终端a可以包括:一个或多个(图中仅示出一个)处理器131、存储器133、以及传输装置135。其中,存储器133可用于存储软件程序以及模块,如本发明实施例中的反编译数据的处理方法和装置对应的程序指令/模块,处理器131通过运行存储在存储器133内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的反编译数据的处理方法。存储器133可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器133可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端a。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。处理器131可以通过传输装置135调用存储器133存储的信息及应用程序,以执行下述步骤:创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和第三维数组;在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息;获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系;将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记录至第一维数组中、第二维数组中和第三维数组中。可选的,上述处理器131还可以执行如下步骤的程序代码:任意一个方法在第一维数组、第二维数组和第三维数组中对应的记录位置具有相同的位置坐标。可选的,上述处理器131还可以执行如下步骤的程序代码:将每个方法的标识信息以队列形式的顺序结构映射至第一维数组中,并记录每个方法的标识信息在第一维数组的队列中的记录位置。可选的,上述处理器131还可以执行如下步骤的程序代码:将每个方法所对应的多维向量对象以队列形式的顺序结构映射至第二维数组中,并记录每个方法对应的多维向量对象在第二维数组的队列中的记录位置。可选的,上述处理器131还可以执行如下步骤的程序代码:在遍历得到反编译程序所包含的多个方法之后,将每个方法进行切片和分支剥离处理,得到每个方法所包含的多个执行分支,执行分支由反编译得到的程序基本块构成;将每个方法所包含的执行分支映射到多维向量中,建立每个方法的执行分支序列所对应的多维向量对象, 其中,方法中包含的执行分支在对应的多维向量对象中存在一个分支向量。可选的,上述处理器131还可以执行如下步骤的程序代码:循环遍历第二维数组中的多维向量对象,在第二维数组中确定任意一个方法的第一多维向量对象之后,使用回溯处理方法确定与第一多维向量对象具有函数调用链关系的第二多维向量对象,得到每个方法对应的多维向量对象之间的调用关系。可选的,上述处理器131还可以执行如下步骤的程序代码:获取第二维数组中记录在第一记录位置的第一多维向量对象;遍历第一多维向量对象所包含的多个分支向量,得到每个分支向量所对应的执行分支中所包含的程序基本块,其中,程序基本块由反编译得到的程序指令构成;如果分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令所调用的被调函数的标识信息;根据被调函数的标识信息,在第一维数组中查询是否存在与被调函数的标识信息相同的方法,获取标识信息相同的第一类方法;获取第一类方法在第一维数组中的第一记录位置;在第二维数组中查询与第一记录位置的坐标值相同的第二记录位置,并获取记录在第二记录位置的第二多维向量对象,其中,第二多维向量对象为被第一多维向量对象调用的向量对象;将第一多维向量对象和第二多维向量对象之间的函数调用关系记录在第三维数组中的对应位置。可选的,上述处理器131还可以执行如下步骤的程序代码:在第一维数组中未查询到标识信息相同的方法的情况下,在第二维数组中建立一个空向量,并将调用函数指令所调用的函数的标识信息映射到第一维数组中的对应位置。可选的,上述处理器131还可以执行如下步骤的程序代码:如果反编译程序中所包含的多个方法被遍历完全,则启动追踪处理流程;接收待追踪的方法的标识信息,并根据待追踪的方法的标识信息确定待追踪的多维向量对象;基于待追踪的多维向量对象进行正向追踪或反向追踪反编译程序。可选的,上述处理器131还可以执行如下步骤的程序代码:获取待追踪的多维向量对象在第二维数组中的第三记录位置,以及待追踪的多维向量对象所包含的分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块;基于执行分支的尾部程序基本块进行反向追踪,在追踪到执行分支的头部程序基本块时,从第三维数组中获取与待追踪的多维向量对象具有调用关系的多维向量对象;在将与待追踪的多维向量对象具有调用关系的多维向量对象作为执行入口之后,执行后续的深度优先遍历来完成反向追踪。可选的,上述处理器131还可以执行如下步骤的程序代码:将第三维数组中记录 在第一记录位置的多维向量对象,作为与待追踪的多维向量对象具有调用关系的多维向量对象,其中,第三维数组的第一记录位置与第二维数组的第三记录位置具有相同的位置坐标。可选的,上述处理器131还可以执行如下步骤的程序代码:获取待追踪的多维向量对象所包含的所有分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块;对待追踪的多维向量对象所包含的所有分支向量进行深度优先遍历,在遍历到第一分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令的标识信息;根据调用函数指令的标识信息,在第一维数组中确定调用函数指令的坐标位置;并根据调用函数指令在第一维数组中的坐标位置,在第二维数组中查询得到对应的新多维向量对象;并从新多维向量对象开始执行深度递归遍历来完成正向追踪。采用本发明实施例,提供了一种反编译数据的处理方法的方案,可以在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,每个方法对应的多维向量对象和每个多维向量对象之间的调用关系,并将每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系记录至创建好的三维数组模型。容易注意到,由于可以通过将遍历反编译程序获取到每个方法的标识信息,对应的多维向量对象和每个多维向量对象之间的调用关系全部记录到创建的三维数组模型中,实现根据方法的类名和签名信息从三维数组模型中快速定位到多维向量对象的目的,因此,通过本申请实施例所提供的方案,可以根据需要的方法的类名和签名信息从三维数组模型中快速定位到多维向量对象,然后对所有向量采用深度优先递归遍历,完成全分支覆盖。由此,本申请提供的上述方案解决了现有技术将基本块结构体以指针方式构建函数调用关系,在全分支覆盖执行方面遍历速度慢的技术问题。本领域普通技术人员可以理解,图13所示的结构仅为示意,计算机终端也可以是智能手机(如android手机、ios手机等)、平板电脑、掌声电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图13其并不对上述电子装置的结构造成限定。例如,计算机终端a还可包括比图13中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图13所示不同的配置。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介 质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。实施例4本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的反编译数据的处理方法所执行的程序代码。可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:创建三维数组模型,三维数组模型包括:第一维数组、第二维数组和第三维数组;在将应用程序反编译为反编译程序之后,遍历反编译程序所包含的多个方法,获取每个方法的标识信息,其中,方法的标识信息包括:方法类名和方法签名信息;获取每个方法对应的多维向量对象,以及每个多维向量对象之间的调用关系;将每个方法的标识信息、对应的多维向量对象以及每个多维向量对象之间的调用关系分别记录至第一维数组中、第二维数组中和第三维数组中。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:任意一个方法在第一维数组、第二维数组和第三维数组中对应的记录位置具有相同的位置坐标。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:将每个方法的标识信息以队列形式的顺序结构映射至第一维数组中,并记录每个方法的标识信息在第一维数组的队列中的记录位置。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:将每个方法所对应的多维向量对象以队列形式的顺序结构映射至第二维数组中,并记录每个方法对应的多维向量对象在第二维数组的队列中的记录位置。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在遍历得到反编译程序所包含的多个方法之后,将每个方法进行切片和分支剥离处理,得到每个方法所包含的多个执行分支,执行分支由反编译得到的程序基本块构成;将每个方法所包含的执行分支映射到多维向量中,建立每个方法的执行分支序列所对应的多维向量对象,其中,方法中包含的执行分支在对应的多维向量对象中存在一个分支向量。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:循环遍历第二维数组中的多维向量对象,在第二维数组中确定任意一个方法的第一多维向量对象之后,使用回溯处理方法确定与第一多维向量对象具有函数调用链关系的第二多维 向量对象,得到每个方法对应的多维向量对象之间的调用关系。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:获取第二维数组中记录在第一记录位置的第一多维向量对象;遍历第一多维向量对象所包含的多个分支向量,得到每个分支向量所对应的执行分支中所包含的程序基本块,其中,程序基本块由反编译得到的程序指令构成;如果分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令所调用的被调函数的标识信息;根据被调函数的标识信息,在第一维数组中查询是否存在与被调函数的标识信息相同的方法,获取标识信息相同的第一类方法;获取第一类方法在第一维数组中的第一记录位置;在第二维数组中查询与第一记录位置的坐标值相同的第二记录位置,并获取记录在第二记录位置的第二多维向量对象,其中,第二多维向量对象为被第一多维向量对象调用的向量对象;将第一多维向量对象和第二多维向量对象之间的函数调用关系记录在第三维数组中的对应位置。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:在第一维数组中未查询到标识信息相同的方法的情况下,在第二维数组中建立一个空向量,并将调用函数指令所调用的函数的标识信息映射到第一维数组中的对应位置。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:如果反编译程序中所包含的多个方法被遍历完全,则启动追踪处理流程;接收待追踪的方法的标识信息,并根据待追踪的方法的标识信息确定待追踪的多维向量对象;基于待追踪的多维向量对象进行正向追踪或反向追踪反编译程序。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:获取待追踪的多维向量对象在第二维数组中的第三记录位置,以及待追踪的多维向量对象所包含的分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块;基于执行分支的尾部程序基本块进行反向追踪,在追踪到执行分支的头部程序基本块时,从第三维数组中获取与待追踪的多维向量对象具有调用关系的多维向量对象;在将与待追踪的多维向量对象具有调用关系的多维向量对象作为执行入口之后,执行后续的深度优先遍历来完成反向追踪。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:将第三维数组中记录在第一记录位置的多维向量对象,作为与待追踪的多维向量对象具有调用关系的多维向量对象,其中,第三维数组的第一记录位置与第二维数组的第三记录位置具有相同的位置坐标。可选地,上述存储介质还被设置为存储用于执行以下步骤的程序代码:获取待追 踪的多维向量对象所包含的所有分支向量,其中,每个分支向量所对应的执行分支中所包含多个程序基本块;对待追踪的多维向量对象所包含的所有分支向量进行深度优先遍历,在遍历到第一分支向量中包含的一个或多个程序指令为调用函数指令,则获取调用函数指令的标识信息;根据调用函数指令的标识信息,在第一维数组中确定调用函数指令的坐标位置;并根据调用函数指令在第一维数组中的坐标位置,在第二维数组中查询得到对应的新多维向量对象;并从新多维向量对象开始执行深度递归遍历来完成正向追踪。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1