反编译指令中寄存器的处理方法和装置制造方法及图纸

技术编号:15762723 阅读:94 留言:0更新日期:2017-07-05 22:40
本发明专利技术公开了一种反编译指令中寄存器的处理方法和装置。其中,该方法包括:在从反编译指令序列中确定待求解的反编译指令之后,将待求解的反编译指令转换为对应的逆波兰表达式,得到待求解的初始逆波兰表达式;以待求解的反编译指令为初始指令,采用预定规则反向顺序遍历反编译指令序列中的反编译指令;在将遍历结果插入初始逆波兰表达式之后,获取逆波兰计算表达式;使用逆波兰计算表达式计算得到待求解的反编译指令中的寄存器的值。本发明专利技术解决了现有技术中根据反编译指令计算寄存器的值的过程速度慢、效率低的技术问题。

Method and device for processing register in decompile instruction

The invention discloses a method and a device for processing a register in a decompile instruction. Among them, the method includes: from the anti compiler instruction in the sequence is determined to be solved after decompile decompile instructions, instructions for anti Poland formula corresponding to the initial solution, to be solved for the solution of the anti Poland formula; anti compilation directives for the initial order, using the predetermined rules in reverse order reverse traversal compile decompile instructions in the sequence; in will traverse the results into the initial anti Poland formula, get the inverse calculation expression of Poland; Poland is calculated using the inverse calculation expression of decompilation value register in the instruction to be solved. The invention solves the technical problems of slow speed and low efficiency of calculating the register value according to the decompile instruction in the prior art.

【技术实现步骤摘要】
反编译指令中寄存器的处理方法和装置
本专利技术涉及寄存器追踪领域,具体而言,涉及一种反编译指令中寄存器的处理方法和装置。
技术介绍
smali指令是Dalvik指令反编译之后的一种易于理解的指令。Android程序运行在Dalvik虚拟机中,程序中的值或对象引用的传递都是通过寄存器来完成的,跟踪寄存器值的传播过程是数据流追踪的一种有效方法。现有的技术在反向追踪某条smali指令中某个寄存器Rx值的来源的时候,根据寄存器污点传播算法得到大量的smali指令集合(记作T)计算寄存器Rx值的过程速度慢,效率低。针对现有技术中根据反编译指令计算寄存器的值的过程速度慢、效率低的技术问题,目前尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种反编译指令中寄存器的处理方法和装置,以至少解决现有技术中根据反编译指令计算寄存器的值的过程速度慢、效率低的技术问题。根据本专利技术实施例的一个方面,提供了一种反编译指令中寄存器的处理方法,包括:在从反编译指令序列中确定待求解的反编译指令之后,将待求解的反编译指令转换为对应的逆波兰表达式,得到待求解的初始逆波兰表达式,其中,逆波兰表达式至少包括如下任意一个或多个元素:反编译指令的寄存器、运算符号和常量值;以待求解的反编译指令为初始指令,采用预定规则反向顺序遍历反编译指令序列中的反编译指令;在将遍历结果插入初始逆波兰表达式之后,获取逆波兰计算表达式;使用逆波兰计算表达式计算得到待求解的反编译指令中的寄存器的值。根据本专利技术实施例的另一方面,还提供了一种反编译指令中寄存器的处理装置,包括:第一转换模块,用于在从反编译指令序列中确定待求解的反编译指令之后,将待求解的反编译指令转换为对应的逆波兰表达式,得到待求解的初始逆波兰表达式,其中,逆波兰表达式至少包括如下任意一个或多个元素:反编译指令的寄存器、运算符号和常量值;遍历模块,用于以待求解的反编译指令为初始指令,采用预定规则反向顺序遍历反编译指令序列中的反编译指令;插入模块,用于在将遍历结果插入初始逆波兰表达式之后,获取逆波兰计算表达式;第一计算模块,用于使用逆波兰计算表达式计算得到待求解的反编译指令中的寄存器的值。在本专利技术实施例中,可以在获取到反编译程序中包含的反编译指令序列之后,将待求解的反编译指令转换为对应的逆波兰表达式,以待求解的反编译指令为初始指令,采用预定规则反向顺序遍历反编译指令序列中的反编译指令,并在将遍历结果插入初始逆波兰表达式之后,得到逆波兰计算表达式,使用逆波兰计算表达式计算得到待求解的反编译指令中的寄存器的值。容易注意到,由于可以将待求解的反编译指令转换为对应的逆波兰表达式,并通过遍历反编译指令序列中的反编译指令得到逆波兰计算表达式,进一步计算得出反编译指令中的寄存器的值,从而实现求解指令集合中寄存器的值的目的,因此,通过本申请实施例所提供的方案,可以通过遍历反编译指令转换得到逆波兰表达式,进一步计算得到寄存器的值,整个计算过程速度快,效率高。由此,本申请提供的上述方案解决了现有技术中根据反编译指令计算寄存器的值的过程速度慢、效率低的技术问题。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是根据本专利技术实施例的一种反编译指令中寄存器的处理方法的计算机终端的硬件结构框图;图2是根据本申请实施例的一种反编译指令中寄存器的处理方法的流程图;图3是根据本申请实施例的一种可选的执行反编译指令中寄存器的处理方法的模块的示意图;图4(a)是根据本申请实施例的一种可选的逆波兰表达式映射二叉树的示意图;图4(b)是根据本申请实施例的一种可选的逆波兰表达式映射二叉树的示意图;图4(c)是根据本申请实施例的一种可选的逆波兰表达式映射二叉树的示意图;图5是根据本申请实施例的另一种可选的逆波兰表达式映射二叉树的示意图;图6(a)是根据本申请实施例的一种可选的反向遍历后的求解二叉树的示意图;图6(b)是根据本申请实施例的一种可选的反向遍历后的求解二叉树的示意图;图7是根据本申请实施例的一种可选的反向遍历后的完全二叉树的示意图;图8是根据本申请实施例的一种可选的初始化的求解二叉树的示意图;图9是根据本申请实施例的一种可选的反编译指令中寄存器的处理方法的流程图;图10是根据本申请实施例的一种反编译指令中寄存器的处理装置的示意图;图11是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图12是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图13是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图14是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图15是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图16是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图17是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;图18是根据本申请实施例的一种可选的反编译指令中寄存器的处理装置的示意图;以及图19是根据本申请实施例的一种计算机终端的结构框图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本专利技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:Dalvik虚拟机:是Google公司等厂商合作开发的Android移动设备平台的核心组成部分之一,可以支持已转换为.dex(即DalvikExecutable)格式的Java应用程序的运行,.dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Smali:是Dalvik虚拟机所使用的一种.dex格式文件的汇编器。逆波兰表达式:逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示,如表1所示。表1正常的表达式逆波兰表达式a+ba,b,+a+(b-c)a,b,c,-,+a+(b-c)*da,b,c,-,d,*,+a+d*(b-c)a,d本文档来自技高网
...
反编译指令中寄存器的处理方法和装置

【技术保护点】
一种反编译指令中寄存器的处理方法,其特征在于,包括:在从反编译指令序列中确定待求解的反编译指令之后,将所述待求解的反编译指令转换为对应的逆波兰表达式,得到待求解的初始逆波兰表达式,其中,所述逆波兰表达式至少包括如下任意一个或多个元素:所述反编译指令的寄存器、运算符号和常量值;以所述待求解的反编译指令为初始指令,采用预定规则反向顺序遍历所述反编译指令序列中的反编译指令;在将遍历结果插入所述初始逆波兰表达式之后,获取逆波兰计算表达式;使用所述逆波兰计算表达式计算得到所述待求解的所述反编译指令中的寄存器的值。

【技术特征摘要】
1.一种反编译指令中寄存器的处理方法,其特征在于,包括:在从反编译指令序列中确定待求解的反编译指令之后,将所述待求解的反编译指令转换为对应的逆波兰表达式,得到待求解的初始逆波兰表达式,其中,所述逆波兰表达式至少包括如下任意一个或多个元素:所述反编译指令的寄存器、运算符号和常量值;以所述待求解的反编译指令为初始指令,采用预定规则反向顺序遍历所述反编译指令序列中的反编译指令;在将遍历结果插入所述初始逆波兰表达式之后,获取逆波兰计算表达式;使用所述逆波兰计算表达式计算得到所述待求解的所述反编译指令中的寄存器的值。2.根据权利要求1所述的方法,其特征在于,所述逆波兰表达式至少为如下任意一种类型的表达式:赋值表达式、四则运算表达式、函数调用表达式和条件判断表达式。3.根据权利要求1所述的方法,其特征在于,采用预定规则反向顺序遍历所述反编译指令序列中的反编译指令,并在将遍历结果插入所述初始逆波兰表达式之后,获取逆波兰计算表达式,包括:步骤A,从所述反编译指令序列中读取第一反编译指令,其中,所述第一反编译指令为所述待求解的反编译指令的前一条指令;步骤B,将所述第一反编译指令转换为对应的第一逆波兰表达式,并获取所述第一逆波兰表达式包含的头元素和尾元素;步骤C,在从所述反编译指令序列中读取第二反编译指令之后,将所述第二反编译指令转换为对应的第二逆波兰表达式,其中,所述第二反编译指令为所述第一反编译指令的前一条指令;步骤D,如果所述第二反编译指令为函数调用指令,则将所述第一逆波兰表达式包含的头元素和尾元素分别插入所述第二逆波兰表达式的头部和尾部,得到新逆波兰表达式,并将所述新逆波兰表达式插入所述初始逆波兰表达式;步骤E,采用所述步骤B至所述步骤D来反向遍历所述反编译指令序列中的下一条指令,直至遍历完所有的指令则获取所述逆波兰计算表达式。4.根据权利要求3所述的方法,其特征在于,在得到待求解的初始逆波兰表达式之后,所述方法还包括:将所述待求解的初始逆波兰表达式转换为二叉树结构,得到所述初始逆波兰表达式的求解二叉树,其中,所述初始逆波兰表达式中包含的运算符号为所述二叉树的根节点,寄存器或常量值为所述二叉树的叶子节点。5.根据权利要求4所述的方法,其特征在于,将所述新逆波兰表达式插入所述初始逆波兰表达式,包括:将所述新逆波兰表达式映射为二叉树结构,并将所述新逆波兰表达式映射得到的二叉树插入所述求解二叉树。6.根据权利要求5所述的方法,其特征在于,如果所述第二反编译指令不是所述函数调用指令,则将所述第一反编译指令对应的所述第一逆波兰表达式插入所述初始逆波兰表达式,其中,将所述第一反编译指令对应的所述第一逆波兰表达式插入所述初始逆波兰表达式,包括:将所述第一逆波兰表达式映射为二叉树结构之后,将所述第一逆波兰表达式映射得到的二叉树插入所述求解二叉树。7.根据权利要求6所述的方法,其特征在于,直至遍历完所有的指令则获取所述逆波兰计算表达式,包括:得到包含了所述求解二叉树的完全二叉树;将所述包含了所述求解二叉树的完全二叉树进行逆波兰转换,得到所述逆波兰计算表达式。8.根据权利要求3至7中任意一项所述的方法,其特征在于,在获取所述第一逆波兰表达式包含的头元素和尾元素之后,所述方法还包括:判断所述第一逆波兰表达式中的尾元素是否为赋值符号;如果所述第一逆波兰表达式中的尾元素为所述赋值符号,则继续执行所述步骤C至所述步骤E;如果所述第一逆波兰表达式中的尾元素不是所述赋值符号,则反向遍历所述反编译指令序列中的下一条指令执行所述步骤B,直至获取尾元素为所述赋值符号的逆波兰表达式。9.根据权利要求1所述的方法,其特征在于,在从反编译指令序列中确定待求解的反编译指令之前,所述方法还包括:在将应用程序反编译为反编译程序之后,获取所述反编译程序中包含的反编译指令序列;计算所述反编译指令序列中包含的反编译指令的数量;初始化所述反编译指令序列所对应的指令指针,得到所述指令指针的数值为所述包含的反编译指令的数量,其中,所述指令指针用于表征所述反编译指令序列中包含的反编译指令之间的调用关系。10.根据权利要求9所述的方法,其特征在于,在采用预定规则反向顺序遍历所述反编译指令序列中的反编译指令,获取逆波兰计算表达式之前,所述方法还包括:判断所述指令指针的数值是否大于等于零;如果所述指令指针的数值大于等于零,则从所述反编译指令序列中读取待插入所述初始逆波兰表达式的反编译指令,每次得到新逆波兰表达式之后,将所述指令指针的数值递减,直至所述指令指针的数值递减为零,其...

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

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

1