污点追踪的方法和装置制造方法及图纸

技术编号:15763574 阅读:46 留言:0更新日期:2017-07-06 01:42
本发明专利技术公开了一种污点追踪的方法和装置。其中,该方法包括:初始化追踪队列和污点队列,并将处于指令队列中的第一指令的指令数据保存至追踪队列和污点队列;将第一指令的第一寄存器集合T和第一寄存器传播集合P1进行并集运算,得到集合M;获取指令队列中第二指令的指令数据;将第二指令的第二寄存器集合N与集合M进行交集运算,得到集合K;如果集合K不为空,从集合K中提取受污染的寄存器放入污染寄存器集合L;采用上述步骤来遍历处理指令队列中的所有指令,追踪得到指令队列中所有的污点寄存器。本发明专利技术解决了现有技术中的寄存器反向追踪方法在寄存器反向追踪的过程中,追踪寄存器的数量单一而且追踪过程不彻底的技术问题。

Method and apparatus for spot tracking

The invention discloses a method and a device for tracing dirt. Among them, the method includes: initialization queue and tracking tainted queue, and be in the first instruction instruction data in the queue queue queue and save to track the stain; will first register first instruction set T and set P1 to set the first register communication operation, get the set M instruction; data acquisition second instructions in the queue the second instruction register; second set N and set M intersection operator, has set K; if the set K is not empty, the extraction of contaminated registers from the set K into the L register set by pollution; the above steps to traverse the handling of all instructions in the queue, get all the stain tracking register instruction queue in. The invention solves the technical problem that the register reverse tracing method in the prior art tracks the number of registers single and the tracking process is incomplete in the process of register reverse tracing.

【技术实现步骤摘要】
污点追踪的方法和装置
本专利技术涉及寄存器追踪领域,具体而言,涉及一种污点追踪的方法和装置。
技术介绍
smali指令是Dalvik指令反编译之后的一种易于理解的指令。Android程序运行在Dalvik虚拟机中,程序中的值或对象引用的传递都是通过寄存器来完成的,跟踪寄存器值的传播过程是数据流追踪的一种有效方法。现有的技术采用匹配某个寄存器是否在当前函数的当前指令之前的特定指令出现,并且以常量赋值或Androidframework函数调用指令为终止条件,不支持复杂指令和函数调用链的追踪。寄存器反向追踪过程中,一个寄存器的值往往是多个寄存器共同求解后的值,而现有技术不支持多个寄存器同时反向追踪,反向追踪不彻底,而且,现有技术在反向追踪过程中的终止条件覆盖不全,会导致提前终止追踪。针对现有技术中的寄存器反向追踪方法在寄存器反向追踪的过程中,追踪寄存器的数量单一而且追踪过程不彻底的技术问题,目前尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种污点追踪的方法和装置,以至少解决现有技术中的寄存器反向追踪方法在寄存器反向追踪的过程中,追踪寄存器的数量单一而且追踪过程不彻底的技术问题。根据本专利技术实施例的一个方面,提供了一种污点追踪的方法,包括:步骤A、初始化追踪队列和污点队列,并将处于指令队列中的第一指令的指令数据保存至追踪队列和污点队列,其中,第一指令为待追踪的反编译指令,第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;步骤B、将第一指令的第一寄存器集合T和第一寄存器传播集合P1进行并集运算,得到集合M;步骤C、获取指令队列中第二指令的指令数据,其中,第二指令的指令数据包括:第二指令内容和第二寄存器集合N,第二指令为第一指令的前一条反编译指令;步骤D、将第二指令的第二寄存器集合N与集合M进行交集运算,得到集合K;步骤E、如果集合K不为空,从集合K中提取受污染的寄存器放入污染寄存器集合L;步骤F、采用步骤C至步骤E来遍历处理指令队列中的所有指令,追踪得到指令队列中所有的污点寄存器,并将追踪得到的包含了污点寄存器集合的指令保存至污点队列。根据本专利技术实施例的另一方面,还提供了一种污点追踪的装置,包括:保存模块,用于初始化追踪队列和污点队列,并将处于指令队列中的第一指令的指令数据保存至追踪队列和污点队列,其中,第一指令为待追踪的反编译指令,第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;第一运算模块,用于将第一指令的第一寄存器集合T和第一寄存器传播集合P1进行并集运算,得到集合M;第一获取模块,用于获取指令队列中第二指令的指令数据,其中,第二指令的指令数据包括:第二指令内容和第二寄存器集合N,第二指令为第一指令的前一条反编译指令;第二运算模块,用于将第二指令的第二寄存器集合N与集合M进行交集运算,得到集合K;第一存储模块,用于如果集合K不为空,从集合K中提取受污染的寄存器放入污染寄存器集合L;追踪模块,用于采用第一获取模块,第二运算模块和第一存储模块来遍历处理指令队列中的所有指令,追踪得到指令队列中所有的污点寄存器,并将追踪得到的包含了污点寄存器集合的指令保存至污点队列。根据本专利技术实施例的另一个方面,还提供了一种污点追踪的方法,包括:步骤A1、获取指令队列中的第一指令的指令数据,其中,第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;步骤B1、将第一指令的第一寄存器集合T和第一寄存器传播集合P1进行并集运算,得到集合M;步骤C1、获取指令队列中第二指令的指令数据,其中,第二指令的指令数据包括:第二指令内容和第二寄存器集合N,第二指令为第一指令的前一条反编译指令;步骤D1、将第二指令的第二寄存器集合N与集合M进行交集运算,得到集合K;步骤E1、如果集合K不为空,从集合K中提取受污染的寄存器;步骤F1、采用步骤C1至步骤E1来遍历处理指令队列中的所有指令,追踪得到指令队列中所有的污点寄存器。在本专利技术实施例中,可以通过循环遍历指令队列中的每一个指令,将处于指令队列中的第一指令的指令数据保存至追踪队列和污点队列,将第一指令的第一寄存器集合T和第一寄存器传播集合P1进行并集运算,得到集合M,再获取指令队列中第二指令的指令数据,将第二指令的第二寄存器集合N与集合M进行交集运算,得到集合K,从集合K中提取受污染的寄存器放入污染寄存器集合L。容易注意到,由于可以基于前后两个指令包含的寄存器集合的交集来追踪指令队列中所有的污点寄存器,并将包含污点寄存器的指令保存在污点队列中,并且寄存器结合本身可以容纳多个寄存器,从而实现对指令队列中全部指令包含的多个寄存器同时反向追踪的目的,因此,通过本申请实施例所提供的方案,可以基于前后两个指令包含的寄存器集合的交集来反向追踪寄存器,整个反向追踪的过程简单、明确,而且支持全部指令和多寄存器的追踪。由此,本申请提供的方案解决了现有技术中的寄存器反向追踪方法在寄存器反向追踪的过程中,追踪寄存器的数量单一而且追踪过程不彻底的技术问题。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是根据本申请实施例的一种污点追踪的方法的计算机终端的硬件结构框图;图2是根据本申请实施例的一种污点追踪的方法的流程图;图3是根据本申请实施例的一种可选的函数内寄存器反向污点追踪的流程图;图4是根据本申请实施例的一种可选的上层函数的寄存器反向污点追踪的流程图;图5是根据本申请实施例的一种污点追踪的装置的示意图;图6是根据本申请实施例的一种可选的污点追踪的装置的示意图;图7是根据本申请实施例的一种可选的污点追踪的装置的示意图;图8是根据本申请实施例的一种可选的污点追踪的装置的示意图;图9是根据本申请实施例的一种可选的污点追踪的装置的示意图;图10是根据本申请实施例的一种可选的污点追踪的装置的示意图;图11是根据本申请实施例的一种可选的污点追踪的装置的示意图;图12是根据本申请实施例的一种可选的污点追踪的装置的示意图;图13是根据本申请实施例的一种可选的污点追踪的装置的示意图;图14是根据本申请实施例的另一种污点追踪的方法的流程图;以及图15是根据本申请实施例的一种计算机终端的结构框图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本专利技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品本文档来自技高网
...
污点追踪的方法和装置

【技术保护点】
一种污点追踪的方法,其特征在于,包括:步骤A,初始化追踪队列和污点队列,并将处于指令队列中的第一指令的指令数据保存至所述追踪队列和所述污点队列,其中,所述第一指令为待追踪的反编译指令,所述第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;步骤B,将所述第一指令的所述第一寄存器集合T和所述第一寄存器传播集合P1进行并集运算,得到集合M;步骤C,获取所述指令队列中第二指令的指令数据,其中,所述第二指令的指令数据包括:第二指令内容和第二寄存器集合N,所述第二指令为所述第一指令的前一条反编译指令;步骤D,将所述第二指令的第二寄存器集合N与所述集合M进行交集运算,得到集合K;步骤E,如果所述集合K不为空,从所述集合K中提取受污染的寄存器放入污染寄存器集合L;步骤F,采用所述步骤C至所述步骤E来遍历处理所述指令队列中的所有指令,追踪得到所述指令队列中所有的污点寄存器,并将追踪得到的包含了污点寄存器集合的指令保存至所述污点队列。

【技术特征摘要】
1.一种污点追踪的方法,其特征在于,包括:步骤A,初始化追踪队列和污点队列,并将处于指令队列中的第一指令的指令数据保存至所述追踪队列和所述污点队列,其中,所述第一指令为待追踪的反编译指令,所述第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;步骤B,将所述第一指令的所述第一寄存器集合T和所述第一寄存器传播集合P1进行并集运算,得到集合M;步骤C,获取所述指令队列中第二指令的指令数据,其中,所述第二指令的指令数据包括:第二指令内容和第二寄存器集合N,所述第二指令为所述第一指令的前一条反编译指令;步骤D,将所述第二指令的第二寄存器集合N与所述集合M进行交集运算,得到集合K;步骤E,如果所述集合K不为空,从所述集合K中提取受污染的寄存器放入污染寄存器集合L;步骤F,采用所述步骤C至所述步骤E来遍历处理所述指令队列中的所有指令,追踪得到所述指令队列中所有的污点寄存器,并将追踪得到的包含了污点寄存器集合的指令保存至所述污点队列。2.根据权利要求1所述的方法,其特征在于,在将所述第一指令的所述第一寄存器集合T和所述第一寄存器传播集合P1进行并集运算,得到集合M之前,所述方法还包括:判断所述指令队列中是否存在所述第二指令;如果存在,则从所述追踪队列中获取上一次追踪的所述第一指令的指令数据;如果不存在,则执行寄存器反向污点追踪。3.根据权利要求1所述的方法,其特征在于,在将所述第一指令的所述第一寄存器集合T和所述第一寄存器传播集合P1进行并集运算,得到集合M之后,所述方法还包括:判断并集运算得到的所述集合M是否为空;如果不为空,则计算所述第二指令所用到的寄存器,得到所述第二寄存器集合;如果为空,则执行寄存器反向污点追踪。4.根据权利要求1至3中任一项所述的方法,其特征在于,在将所述第二指令的第二寄存器集合N与所述集合M进行交集运算,得到集合K之后,所述方法还包括:判断交集运算得到的所述集合K是否为空;如果不为空,则初始化所述污染寄存器集合L,并进入将所述集合K中满足污染条件的寄存器放入所述污染寄存器集合L的步骤;如果为空,则将所述第一指令的指令数据继续放入所述追踪队列,并返回继续执行遍历所述指令队列中的所有指令,直至追踪得到所述指令队列中所有的污点寄存器。5.根据权利要求1至3中任一项所述的方法,其特征在于,在所述第二寄存器集合N包括:读寄存器集合R和写寄存器集合W的情况下,其中,从所述集合K中提取受污染的寄存器放入污染寄存器集合L,包括:遍历交集运算得到的所述集合K中的已经存在的寄存器;如果存在未遍历到的寄存器r,则判断所述寄存器r的属性;如果所述寄存器r属于所述读寄存器集合R,则将所述寄存器r放入所述污染寄存器集合L;如果所述寄存器r属于所述写寄存器集合W,则将所述第二寄存器结合N中除了所述寄存器r之外的寄存器放入所述污染寄存器集合L。6.根据权利要求5所述的方法,其特征在于,如果所述集合K中的寄存器被全部遍历完之后,将所述集合M与所述污染寄存器集合L的差集作为所述第二指令的第二寄存器传播集合P2,并将所述第二指令更新后的指令数据保存至所述追踪队列和所述污点队列,其中,所述第二指令更新后的指令数据包括:所述第二指令内容、所述污染寄存器集合L和所述第二寄存器传播集合P2。7.根据权利要求2或3所述的方法,其特征在于,寄存器反向污点追踪,包括:步骤A',所述污点队列中提取队列尾部的第一受污染指令的指令数据,所述第一受污染指令的指令数据包括:受染指令内容、受染寄存器集合和受染寄存器传播集合;步骤B',获取所述第一受污染指令所对应的第一函数,并获取所述第一函数的参数寄存器集合M';步骤C',将所述受染寄存器集合和所述受染寄存器传播集合做并集运算,将所述并集运算的结果与所述的参数寄存器集合M'做交集运算,得到集合C;步骤D',在获取到用于调用所述第一函数的调用函数和调用指令之后,计算所述集合C中包含的寄存器在所述参数寄存器集合M'中对应的序列号;步骤E',获取所述调用指令所包含的调用寄存器集合F;步骤F',使用所述序列号从所述调用寄存器集合F中提取对应的调用寄存器,生成寄存器集合T;步骤G',将所述调用指令所对应的调用指令数据放入初始化后的所述追踪队列和所述污点队列;步骤H',返回所述步骤A',并采用所述步骤A'至所述步骤G'来遍历处理所述污点队列中的所有受污染指令,实现反向污点追踪。8.根据权利要求7所述的方法,其特征在于,在将所述受染寄存器集合和所述受染寄存器传播集合做并集运算,将所述并集运算的结果与所述的参数寄存器集合M'做交集运算,得到集合C之后,所述方法还包括:判断交集运算得到的所述集合C是否为空;如果不为空,则获取到用于调用所述第一函数的调用函数和调用指令;如果为空,则停止执行所述寄存器反向污点追踪,并输出追踪结果。9.根据权利要求7所述的方法,其特征在于,获取所述调用指令所包含的调用寄存器集合F,包括:判断所述调用指令是否为静态调用指令;如果所述调用指令为非静态调用指令,则将所述调用指令所包含的所有指令寄存器中的第一个寄存器删除后,得到所述调用寄存器集合F;如果所述调用指令为所述静态调用指令,则将所述调用指令所包含的所有指令寄存器构成所述调用寄存器集合F。10.一种污染寄存器的获取方法,其特征在于,包括:步骤A1,获取指令队列中的第一指令的指令数据,其中,所述第一指令的指令数据包括如下参数:第一指令内容、第一寄存器集合T和第一寄存器传播集合P1;步骤B1,将所述第一指令的所述第一寄存器集合T和所述第一寄存器传播集合P1进行并集运算,得到集合M;步骤C1,获取所述指令队列中第二指令的指令数据,其中,所述第二指令的指令数据包括:第二指令内容和第二寄存器集合N,所述第二指令为所述第一指令...

【专利技术属性】
技术研发人员:徐胜
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1