汇编代码清除混淆的方法、装置、介质及设备制造方法及图纸

技术编号:23431590 阅读:60 留言:0更新日期:2020-02-25 13:03
本文是关于一种汇编代码混淆清除方法、装置、介质及设备,汇编代码混淆清除方法包括将混淆后的汇编代码按划分方法划分为多个代码块;对所述多个代码块合并优化;对合并优化后的代码块清除混淆。通过本文提供的汇编代码混淆清除方法,可以有效清除混淆代码中的无用代码,花指令等,还原代码本来面目,使代码变得简洁,易于分析。

Methods, devices, media and equipment for eliminating confusion in assembly code

【技术实现步骤摘要】
汇编代码清除混淆的方法、装置、介质及设备
本文涉及反汇编,尤其涉及汇编代码清除混淆的方法、装置、介质及设备。
技术介绍
相关技术中,在逆向分析过程中经常会遇到汇编代码被混淆、膨胀、乱序的情况,如果人工分析,会浪费大量的时间来观察这些无用的代码。通用的花指令去除工具也是利用收集到花指令的特征,对花指令进行正则匹配后将花指令去除。如花指令经过一些变形后,正则匹配就会失效,花指令无法清除。
技术实现思路
为克服相关技术中存在的问题,本文提供一种汇编代码清除混淆的方法、装置、介质及设备。根据本文的第一方面,提供一种汇编代码清除混淆方法,包括:将混淆后的汇编代码划分为多个代码块;对所述多个代码块合并优化;对合并优化后的代码块清除混淆。所述将混淆后的汇编代码划分为多个代码块包括:以混淆后的汇编代码的第一条汇编代码或跳转指令执行的目标代码为代码块的首代码;以跳转指令代码为代码块的结束代码。所述对所述多个代码块合并优化包括:以跳转顺序遍历所述多个代码块,分析每一代码块的跳转关系,如果某一代码块中跳转指令代码只存在一条跳转指令,则将所述代码块与下一代码块合并。所述对合并优化后的代码块进行混淆清除包括:将寄存器设置为32/64位寄存器;对合并优化后的代码块由后向前分析,删除后面没有代码块的比较指令代码;删除用于设置标志寄存器CF标志的指令代码;删除用于扩展寄存器类型的指令代码;清除寄存器在运算后被重新赋值的无用指令代码。根据本文的另一方面,提供一种汇编代码清除混淆装置,包括划分模块,用于将将混淆后的汇编代码按划分方法划分为多个代码块;合并模块,用于对所述多个代码块合并优化;清除模块,用于对合并优化后的代码块清除混淆。所述划分模块对混淆后的汇编代码进行划分包括:以混淆后的汇编代码的第一条汇编代码或跳转指令执行的目标代码为代码块的首代码;以跳转指令代码为代码块的结束代码。所述合并模块顺序遍历所述多个代码块,分析每一代码块的跳转关系,如果某一代码块中跳转指令代码只存在一个跳转指令,则将所述代码块与下一代码块合并。所述清除模块将寄存器设置为32/64位寄存器;对合并优化后的代码块由后向前分析,删除后面没有代码块的比较指令代码;删除用于设置标志寄存器CF标志的指令代码;删除用于扩展寄存器类型的指令代码;清除寄存器在运算后被重新赋值的无用指令代码。根据本文的另一方面,一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时实现如权利要求1-4中任意一项所述方法的步骤。根据本文的另一方面,一种计算机设备,包括处理器、存储器和存储于所述存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-4中任意一项所述方法的步骤。本文通过将混淆的汇编代码划分为多个代码块,对代码块优化合并,可以实现将代码中的调整指令和无用指令剔除后,代码变得简洁,非常易于分析。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本文。附图说明构成本文的一部分的附图用来提供对本文的进一步理解,本文的示意性实施例及其说明用于解释本文,并不构成对本文的不当限定。在附图中:图1是根据一示例性实施例示出的一种汇编代码清除混淆的方法的流程图。图2是根据一示例性实施例示出的代码块跳转关系示意图。图3是根据一示例性实施例示出的代码块跳转关系示意图。图4是根据一示例性实施例示出的一种汇编代码清除混淆装置的框图。具体实施方式为使本文实施例的目的、技术方案和优点更加清楚,下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。需要说明的是,在不冲突的情况下,本文中的实施例及实施例中的特征可以相互任意组合。图1是根据一示例性实施例示出的一种汇编代码清除混淆的方法的流程图。参考图1,汇编代码清除混淆的方法包括:步骤S11,将混淆后的汇编代码划分为多个代码块。步骤S12,对多个代码块合并优化。步骤S13,对合并优化后的代码块清除混淆。在反汇编时,往往由于在代码中被插入混乱指令,例如,代码膨胀,插入无用代码,添加花指令等导致反汇编后代码的混淆。需要对代码进行分析,并去除代码中的混乱指令。本文中的汇编代码清除混淆的方法,通过将混淆后的汇编代码划分为多个代码块,对多个代码块进行合并优化,然后对合并优化后的代码块清除混淆,还原代码的本来面目,使代码变得简洁,易于分析。在一实施例中,将混淆后的汇编代码划分为多个代码块包括:以混淆后的汇编代码的第一条汇编代码或跳转指令执行的目标代码为代码块的首代码;以跳转指令代码为代码块的结束代码。例如有下述一段代码:在这段混淆代码中,有一些无用的代码,不便于分析。以第一条汇编代码006828E1|8B0F|movecx,dwordptrds:[edi]为代码块1的首代码,以跳转指令代码006828F8|E956E80F00|jmphash.vmp.781153为第一个代码块的结束代码。以第一个代码块的跳转指令执行的目标代码00781153|8DAD01000000|leaebp,dwordptrss:[ebp+1]为第二个代码块的首代码,以跳转指令代码007811B1|E9D040FEFF|jmphash.vmp.765286为第二个代码块的结束代码。以此类推,将混淆后的代码划分为多个代码块,如下所示:代码块1:代码块2:代码块3:代码块4:代码块5:代码块6:按上述方法,可将混淆代码划分成6个代码块。可见,6个代码块是顺序引用的,引用关系图如2所示。每个代码块只跳转到一个代码块,也就是说在每一个代码块中的跳转指令代码只存在一条跳转指令,因此可以将上述6个代码块进行合并,将无条件跳转指令代码,或计算后结果永远相等的跳转指令代码去除,将代码块按顺序和跳转结果合并。当然,在图2中,如果其中一个代码块包括多个条件跳转指令,例如以代码块2为例,如果跳转指令代码中存在多个条件跳转指令,假如分别跳转到代码块3和代码块4,如图3所示,此时需将代码块1和代码块2合并。将代码块3,代码块5和代码块6合并。将代码块4,代码块5和代码块6合并。对合并优化后的代码块进行混淆清除包括:将寄存器设置为32/64位寄存器;对合并优化后的代码块由后向前分析,删除后面没有代码块的比较指令代码,如果汇编比较指令后本文档来自技高网...

【技术保护点】
1.一种汇编代码清除混淆的方法,其特征在于,包括:/n将混淆后的汇编代码划分为多个代码块;/n对所述多个代码块合并优化;/n对合并优化后的代码块清除混淆。/n

【技术特征摘要】
1.一种汇编代码清除混淆的方法,其特征在于,包括:
将混淆后的汇编代码划分为多个代码块;
对所述多个代码块合并优化;
对合并优化后的代码块清除混淆。


2.如权利要求1所述的汇编代码清除混淆的方法,其特征在于,所述将混淆后的汇编代码划分为多个代码块包括:
以混淆后的汇编代码的第一条汇编代码或跳转指令执行的目标代码为代码块的首代码;
以跳转指令代码为代码块的结束代码。


3.如权利要求1所述的汇编代码清除混淆的方法,其特征在于,所述对所述多个代码块合并优化包括:
以跳转顺序遍历所述多个代码块,分析每一代码块的跳转关系,如果某一代码块中跳转指令代码只存在一条跳转指令,则将所述代码块与下一代码块合并。


4.如权利要求1所述的汇编代码清除混淆的方法,其特征在于,所述对合并优化后的代码块进行混淆清除包括:
将寄存器设置为32/64位寄存器;
对合并优化后的代码块由后向前分析,删除后面没有代码块的比较指令代码;删除用于设置标志寄存器CF标志的指令代码;删除用于扩展寄存器类型的指令代码;清除寄存器在运算后被重新赋值的无用指令代码。


5.一种汇编代码清楚混淆的装置,其特征在于,包括:
划分模块,用于将将混淆后的汇编代码按划分方法划分为多个代码块;
合并模块,用于对所述...

【专利技术属性】
技术研发人员:周成
申请(专利权)人:贵阳动视云科技有限公司
类型:发明
国别省市:贵州;52

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

1