代码加固方法及装置制造方法及图纸

技术编号:20074538 阅读:19 留言:0更新日期:2019-01-15 00:29
本发明专利技术公开了一种代码加固方法及装置。其中,该方法包括:获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符;确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令;将所述原始代码段中包含的汇编指令替换为所述汇编指令对应的虚拟指令,以得到加固代码段。该方式通过将原始代码段中的汇编指令替换为虚拟指令,使原始代码段中的原始指令得以隐藏。在代码段中完全不包含原始指令的前提下,程序逆向开发人员即使进行多次尝试也不可能完成逆向破解,由此提升了加固的安全性。

Code Reinforcement Method and Device

The invention discloses a code reinforcement method and device. The method includes acquiring assembly instructions contained in the original code segment to be strengthened, determining assembly instruction operators in the assembly instructions, determining a virtual instruction conversion set matching the assembly instruction operators in the assembly instructions, generating virtual instructions corresponding to the assembly instructions according to the virtual instruction conversion set, and determining the assembly instruction operators contained in the original code segment. The assembly instructions are replaced by the virtual instructions corresponding to the assembly instructions to obtain the reinforced code segments. By replacing assembly instructions in the original code segment with virtual instructions, the original instructions in the original code segment can be hidden. On the premise that the original instructions are not included in the code segment at all, it is impossible for reverse developers to complete reverse cracking even if they try many times, thus enhancing the security of reinforcement.

【技术实现步骤摘要】
代码加固方法及装置
本专利技术涉及计算机
,具体涉及一种代码加固方法及装置。
技术介绍
随着科学技术与社会的不断发展,各种应用程序的数量也飞速增长。然而,程序逆向开发人员或程序逆向产品可以通过对应用程序的反编译,轻易获得应用程序中的源代码,从而使得对于应用程序盗版及重打包等现象也层出不穷。目前,为了提高应用程序反编译难度,反逆向编译技术人员往往会对应用程序进行加固处理,以提升安全性。例如,可以通过在程序中添加花指令、和/或伪造流程分支等方法进行加固处理。但是,专利技术人在实现本专利技术的过程中发现,传统的应用程序加固方式至少存在下述缺陷:在程序中添加花指令或伪造流程分支等方式无法隐藏真实的程序代码,程序逆向开发人员仍然可能在多次尝试之后依据真实的程序代码完成逆向破解。由此可见,现有的加固方式安全性较低。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的代码加固方法及装置。根据本专利技术的一个方面,提供了代码加固方法,包括:获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符;确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令;将所述原始代码段中包含的汇编指令替换为所述汇编指令对应的虚拟指令,以得到加固代码段。根据本专利技术的另一个方面,提供了代码加固装置,包括:获取模块,适于获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符;生成模块,适于确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令;替换模块,适于将所述原始代码段中包含的汇编指令替换为所述汇编指令对应的虚拟指令,以得到加固代码段。根据本专利技术的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;存储器用于存放至少一可执行指令,可执行指令使处理器执行上述代码加固方法对应的操作。根据本专利技术的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述代码加固方法对应的操作。根据本专利技术公开的代码加固方法及装置,能够获取待加固的原始代码段中包含的汇编指令及其中的汇编指令操作符,根据与汇编指令操作符相匹配的虚拟指令转换集生成汇编指令对应的虚拟指令;进而将原始代码段中包含的汇编指令替换为汇编指令对应的虚拟指令,以得到加固代码段。由此可见,该方式通过将原始代码段中的汇编指令替换为虚拟指令,使原始代码段中的原始指令得以隐藏。在代码段中完全不包含原始指令的前提下,程序逆向开发人员即使进行多次尝试也不可能完成逆向破解,由此提升了加固的安全性。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了本专利技术一个实施例的代码加固方法的流程示意图;图2示出了本专利技术另一个实施例的代码加固方法的流程示意图;图3示出了本专利技术又一实施例提供的一种代码加固装置的装置结构图;图4示出了根据本专利技术实施例的一种电子设备的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示出了本专利技术一个实施例的代码加固方法的流程示意图。如图1所示,该方法包括:步骤S110:获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符。其中,待加固的原始代码段可基于各类语言编写,本专利技术对原始代码段的类型及形式不做限定。原始代码段中包含的汇编指令(即ARM指令)包括汇编语言中使用的一些操作符和助记符,还包括一些伪指令,汇编指令能够为汇编程序所识别并指导汇编如何进行。汇编指令还能够用于在存储器和寄存器、寄存器和输入输出端口之间传送数据。本专利技术对汇编指令的具体指令形式不做限定,各类汇编指令均涵盖在本专利技术的保护范围之内。在获取待加固的原始代码段中包含的汇编指令之后,进一步确定该汇编指令中的汇编指令操作符。其中,汇编指令操作符用于标识该条汇编指令的类型,包括:加和类型、相减类型等各种类型的操作符,本专利技术对操作符的具体类型和数量不做限定。步骤S120:确定与汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据虚拟指令转换集生成汇编指令对应的虚拟指令。在本专利技术中,分别针对各种类型的汇编指令操作符设置匹配的虚拟指令转换集,该虚拟指令转换集用于将与其匹配的汇编指令操作符所对应的汇编指令转换为相应的虚拟指令,以实现原始汇编指令的隐藏。例如,针对加和类型(ADD类型)的汇编指令操作符,其对应的虚拟指令转换集中可包括PUSH、ADD、POP等虚拟指令操作符,以便通过各个虚拟指令操作符实现与汇编指令操作符等同的操作。具体实施时,各个虚拟指令转换集的具体形式可由本领域技术人员灵活设定,只要能够实现与其匹配的汇编指令操作符等同的效果即可。步骤S130:将原始代码段中包含的汇编指令替换为汇编指令对应的虚拟指令,以得到加固代码段。通过上一步骤已经生成汇编指令对应的虚拟指令,在本步骤中,进一步将原始代码段中包含的汇编指令替换为上一步骤中生成的虚拟指令,从而得到加固代码段。当然,在本步骤中,还可以进一步执行编译、链接等辅助处理。由此可见,根据本专利技术公开的代码加固方法,能够获取待加固的原始代码段中包含的汇编指令及其中的汇编指令操作符,根据与汇编指令操作符相匹配的虚拟指令转换集生成汇编指令对应的虚拟指令;进而将原始代码段中包含的汇编指令替换为汇编指令对应的虚拟指令,以得到加固代码段。由此可见,该方式通过将原始代码段中的汇编指令替换为虚拟指令,使原始代码段中的原始指令得以隐藏。在代码段中完全不包含原始指令的前提下,程序逆向开发人员即使进行多次尝试也不可能完成逆向破解,由此提升了加固的安全性。图2示出了本专利技术另一个实施例的代码加固方法的流程示意图。如图2所示,该方法包括:步骤S200:预先设置多个分别与多种类型的汇编指令操作符相对应的虚拟指令转换集,通过预设的虚拟指令查询表存储各个虚拟指令转换集以及各种类型的汇编指令操作符之间的对应关系。实际情况中,汇编指令中的汇编指令操作符的类型包括多种,例如,包括:加和类型(ADD类型)、相减类型(SUB类型)等等。其中,每种类型的汇编指令操作符都能够通过一系列虚拟指令实现,相应地,在本实施例中,分别针对每种类型的汇编指令操作符,设置对应的虚拟指令转换集,该虚拟指令转换集用于将该类型的汇编指令操作符转换为对应的虚拟指令。由于汇编指令中的汇编指令操作符的类型很多,因此,为了便于查询,在本实施例中本文档来自技高网...

【技术保护点】
1.一种代码加固方法,包括:获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符;确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令;将所述原始代码段中包含的汇编指令替换为所述汇编指令对应的虚拟指令,以得到加固代码段。

【技术特征摘要】
1.一种代码加固方法,包括:获取待加固的原始代码段中包含的汇编指令,确定所述汇编指令中的汇编指令操作符;确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集,根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令;将所述原始代码段中包含的汇编指令替换为所述汇编指令对应的虚拟指令,以得到加固代码段。2.根据权利要求1所述的方法,其中,所述汇编指令中的汇编指令操作符的类型包括多种,则所述方法进一步包括:预先设置多个分别与多种类型的汇编指令操作符相对应的虚拟指令转换集,通过预设的虚拟指令查询表存储各个虚拟指令转换集以及各种类型的汇编指令操作符之间的对应关系;则所述确定与所述汇编指令中的汇编指令操作符相匹配的虚拟指令转换集的步骤具体包括:查询所述虚拟指令查询表,确定与所述汇编指令操作符的类型相匹配的虚拟指令转换集。3.根据权利要求1或2所述的方法,其中,所述汇编指令对应的虚拟指令是由多个虚拟指令组成的虚拟指令组,则所述根据所述虚拟指令转换集生成所述汇编指令对应的虚拟指令具体包括:确定所述虚拟指令转换集中包含的各个虚拟指令操作符;根据所述汇编指令中的汇编指令操作数,确定与各个虚拟指令操作符相对应的虚拟指令操作数;根据各个虚拟指令操作符及其对应的虚拟指令操作数生成所述汇编指令对应的虚拟指令组。4.根据权利要求3所述的方法,其中,用于执行所述汇编指令的汇编指令寄存器的个数为N,则所述方法进一步包括:预先设置S个用于执行所述虚拟指令的虚拟指令寄存器;其中,S=N+M,N、M均为自然数。5.根据权利要求4所述的方法,其中,所述S个用于执行所述虚拟指令的虚拟指令寄存器包括:非...

【专利技术属性】
技术研发人员:何潇潇潘剑锋
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

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

1