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 ...
【技术保护点】
一种污点追踪的方法,其特征在于,包括:步骤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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。