CN105930694B - 用于模糊虚拟机的灵活指令集 - Google Patents
用于模糊虚拟机的灵活指令集 Download PDFInfo
- Publication number
- CN105930694B CN105930694B CN201610105133.4A CN201610105133A CN105930694B CN 105930694 B CN105930694 B CN 105930694B CN 201610105133 A CN201610105133 A CN 201610105133A CN 105930694 B CN105930694 B CN 105930694B
- Authority
- CN
- China
- Prior art keywords
- virtual
- instruction portion
- instructions
- processor
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 34
- 230000006870 function Effects 0.000 claims description 36
- 230000000875 corresponding effect Effects 0.000 description 29
- 230000008901 benefit Effects 0.000 description 9
- 238000013507 mapping Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开了一种用于保护计算机软件代码的方法。在实施例中,该方法涉及:接收与应用的计算机软件代码相对应的指令,该指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;将第一指令部分重写为第一虚拟指令部分;以及将第二指令部分重写为第二虚拟指令部分,其中,第一指令部分包括与第一处理机相对应的第一虚拟指令,并且第二虚拟指令部分包括与第二处理机相对应的第二虚拟指令,第一处理机与第二处理机具有不同的属性。
Description
技术领域
背景技术
计算机软件经常遭受篡改计算机软件逆向工程尝试或其它尝试。例如,对计算机软件进行逆向工程或篡改的成功尝试可导致对计算机软件的未授权使用或对用户信息(例如用户身份、密码、财务信息等)的未许可访问。为了防止逆向工程或其它篡改尝试,实现了代码保护技术,代码保护技术具有将逆向工程或其它篡改尝试的复杂度提高到不能解决的水平的趋势。
一种代码保护技术是模糊处理。模糊处理是用于使计算机代码(源或机器)变得更难读取并因此更难以进行逆向工程或篡改的有意尝试。可以通过多种方式来使计算机代码模糊。具体地,可以使用虚拟机来在虚构处理器上实现精心设计的指令集,以使计算机代码模糊。由于针对虚构处理器精心设计的指令集,指令集中指令的功能通常是未知的,并且因此对于试图对计算机软件进行逆向工程或其它篡改的各方而言是难以理解的。虽然使用精心设计的指令集的模糊虚拟机在提高逆向工程或其它篡改尝试的复杂度的方面已经非常有效,但是该技术对计算机软件的执行速度有负面影响。
发明内容
在实施例中,公开了一种用于保护计算机软件代码的方法。在实施例中,该方法涉及:接收与应用的计算机软件代码相对应的指令,该指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;将第一指令部分重写为第一虚拟指令部分;以及将第二指令部分重写为第二虚拟指令部分,其中,第一指令部分包括与第一处理机相对应的第一虚拟指令,并且第二虚拟指令部分包括与第二处理机相对应的第二虚拟指令,第一处理机与第二处理机具有不同的属性。
在第二实施例中,公开了一种非暂时性计算机可读存储介质。在实施例中,该非暂时性计算机可读存储介质存储指令,当由计算机执行该指令时,该指令执行用于保护计算机软件代码的步骤,步骤涉及:接收与应用的计算机软件代码相对应的指令,该指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;将第一指令部分重写为第一虚拟指令部分;以及将第二指令部分重写为第二虚拟指令部分,其中,第一指令部分包括与第一处理机相对应的第一虚拟指令,并且第二虚拟指令集合包括与第二处理机相对应的第二虚拟指令,第一处理机与第二处理机具有不同的属性。
在第三实施例中,公开了一种用于保护计算机软件代码的计算机实现的系统。在实施例中,计算机实现的系统包括一个或多个处理器以及存储指令的存储器,当由一个或多个处理器执行该指令时,该指令执行涉及以下操作的步骤:接收与应用的计算机软件代码相对应的指令,该指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;将第一指令部分重写为第一虚拟指令部分;以及将第二指令部分重写为第二虚拟指令部分,其中,第一指令部分包括与第一处理机相对应的第一虚拟指令,并且第二虚拟指令集合包括与第二处理机相对应的第二虚拟指令,第一处理机与第二处理机具有不同的属性。
通过结合附图的方式示出的以下详细描述,本发明的实施例的其它方面和优势将变得显而易见。
附图说明
图1示出了将源代码的一部分编译为汇编代码。
图2A示出了将源代码的一部分编译为字节码。
图2B示出了用于执行程序的字节码的解译。
图3A示出了使用指示符来将部分源代码编译为模糊字节码。
图3B示出了用于执行程序的、由指示符指示的部分模糊字节码的解译。
图4示出了接收模糊字节码并执行由两个不同的处理机调用的功能的虚拟机引擎。
图5示出了接收模糊字节码并执行由两个处理机调用的功能的虚拟机引擎,该两个处理机是从处理机的集合中选择的与模糊程度和执行速度相对应的两个处理机。
图6示出了接收模糊字节码并基于虚拟机引擎的运行模式执行由两个不同处理机调用的功能的虚拟机引擎,该两个处理机来自两个不同的处理机集合。
图7示出了接收模糊字节码并基于虚拟机引擎的运行模式执行由两个不同处理机调用的功能的虚拟机引擎,该两个处理机来自两个不同的处理机集合。
图8A是指示根据虚拟机模式的、从字节码到虚拟机指令的映射的表格。
图8B示出了接收模糊字节码并执行由与模糊字节码相对应的处理机调用的功能的虚拟机引擎,该模糊字节码具有来自与单个字节码相关联的两个不同指令集的指令。
图9是根据本发明的实施例的用于保护计算机软件代码的方法的流程图。
图10是可以运行虚拟机引擎的计算机的框图。
贯穿本描述,相似参考标记可以用于标识相似元件。
具体实施方式
应容易理解,可以按照多种不同配置对本文概括描述且在附图中示出的实施例的组成进行排列和设计。因此,以下对附图中表示的各种实施例的更详细描述并非旨在限制本公开的范围,而只是表示各种实施例。虽然附图中呈现了实施例的各个方面,除非具体指出,但附图不一定按比例绘制。
本发明可以表现为其它具体形式,而不脱离其精神或其本质特征。所描述的实施例应该看作在所有方面都只是说明性的而非限制性的。因此,本发明的范围由所附权利要求而非该详细描述指示。在权利要求的等同替代的含义和范围内的所有改变都应包含在本发明的范围内。
本说明书通篇对特征、优点或类似语言的提及并不意味着本发明可以实现的所有特征和优点应在或在本发明的任何单个实施例中。相反,将关于这些特征和优点的语言理解为指的是结合实施例描述的特定特征、优点或者特性包括在本发明的至少一个实施例中。因此,贯穿该说明书对特征和优点的讨论以及相似语言可以但不是必然指同一实施例。
另外,所描述的本发明的特征、优点和特性在一个或多个实施例中可能以任何合适的方式被组合。本领域技术人员将认识到,根据本文的描述,可以在没有本实施例的一个或多个特定特征或优点的情况下实践本发明。在其他情况下,可以在某些实施例中认识到本发明所有实施例中未呈现的附加特征和优点。
贯穿本说明书,对“一个实施例”、“实施例”的引用或类似语言表示结合所指示的实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书中的短语“在一个实施例中”、“在实施例中”和类似的语言可以,但不是必然的,涉及相同的实施例。
图1示出了将源代码102的部分编译为汇编代码104。在该示出中,向编译器110传递源代码的该部分,并且编译器生成用于计算机处理单元(CPU)执行的汇编代码。
使用虚拟机的代码汇编包括附加的步骤,该步骤通过首先将源代码编译为字节码并然后解译字节码以执行对应的处理机,来允许编译的源代码在任何架构(例如x86或8086)上执行。例如,图2A示出了将源代码202的一部分编译为字节码206。在该示出中,向编译器210传递源代码的该部分。然而,并不像图1那样,编译器生成专用字节码。然后,当执行程序时,向特定于执行环境的结构的专用解译器传递字节码,并且解译器执行处理机来执行程序的各种功能。图2B示出了用于执行程序的字节码206的解译。在该示出中,向虚拟机解译器212传递图2A的字节码,并且虚拟机解译器配备有处理机,用于解译字节码并用于执行运行程序所需要的功能208。
当攻击者试图对程序进行逆向工程或篡改时,攻击者通常记录由计算机处理器执行的功能,并试图将所执行的功能与字节码的各种部分相互关联。一旦推理得到关联,攻击者可在然后修改字节码并向解译器传递修改后的字节码,以通过潜在的恶意或其它非故意的方式来执行程序。为了提高将字节码与所执行的功能相互关联的难度,可以使用代码模糊处理,通过提高复杂度、改编代码词、或者通过其他方式模糊字节码以使得需要将专用解译器用于执行,来提高逆向工程或其它篡改尝试的复杂度。因此,更好保护了代码。然而,需要更多的处理来理解模糊字节码,并因此程序的执行时间将可能变长。虽然增加执行时间对于更好保护一些代码来说是可以接受的代价,但不是所有的代码都需要保护,并且保护不需要要保护的代码可以导致程序的执行时间不必要地变长。
根据本发明的实施例,公开了一种用于保护计算机软件代码的方法。在实施例中,该方法涉及:接收与应用的计算机软件代码相对应的指令,该指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;将第一指令部分重写为第一虚拟指令部分;以及将第二指令部分重写为第二虚拟指令部分,其中,第一指令部分包括与第一处理机相对应的第一指示符,并且第二虚拟指令部分包括与第二处理机相对应的第二指示符,第一处理机具有与第二处理机不同的属性。因此,通过将指令的不同部分重写为被配置与不同处理机相对应的虚拟指令的部分,可以按不同的速度来执行指令的不同部分。在实施例中,每个处理机由一个或多个属性定义,这些属性包括,例如,执行给定功能所需要的指令数量、指令集架构(包括数据类型、指令、寄存器、寻址模式等)、使用的寄存器的数量、或指令集中假指令或伪指令的数量。因此,不需要将模糊处理的一个级别用于计算机程序中的所有指令,而是可以逐部分地选择模糊处理的级别。由于指令的一些部分可以具有快速执行的较低模糊处理,并且一些部分可以具有缓慢执行的较高模糊处理,当需要时,可以增加执行时间而同时仍然保持较高的模糊级别。
图3A示出了使用指示符320来将部分源代码302编译为模糊字节码306。在实施例中,可以根据虚拟指令的集合来形成模糊字节码,虚拟指令例如用于与基于JAVA、Python或PHP的虚拟机一起使用的可移植代码(p-code)。如图所示,源代码包括第一指示符(“#pragma OBFUSC fast”)和第二指示符(“#pragma OBFUSC slow”)。在该示出中,指示符是Cpragma,但是也可以使用可被嵌入到源代码的其它运算符来作为指示符。当向编译器310传递源代码时,编译器产生针对源代码的每一部分具有不同属性的字节码。例如,如图所示,对由第一指示符指示的源代码的一部分进行编译以包括指令“VM_ADD_FAST”,而对由第二指示符指示的源代码的一部分进行编译以包括指令“VM_ADD_SLOW”。然后,当执行程序时,将不同地解译该两个ADD指令。
图3B示出了用于执行程序的、由指示符322指示的模糊字节码306的解译。如图3B所示,向虚拟机解译器312传递图3A的字节码,并且与指示符(例如VM_ADD_FAST或VM_ADD_SLOW指令)相对应的处理机(未示出)执行运行程序所需要的功能308。因为不同的处理机对应于VM_ADD_FAST而不是对应于VM_ADD_SLOW,具有不同复杂度的功能可被每个处理机调用。因此,不像上文参照图2B描述的执行,程序执行时间的增加基于被每个处理机调用的功能的复杂度而变化。例如,如果ADD_FAST()具有较低的负载度,导致比ADD_SLOW()更快的执行时间,则执行ADD_FAST()和ADD_SLOW()将导致比执行ADD_SLOW()两次更快的总执行速度。
在实施例中,处理机对应于字节码中的指令,并且每个处理机可以被配置为当执行程序时调用不同的功能。图4示出了接收模糊字节码406并执行由两个不同的处理机414调用的功能408的虚拟机引擎412。在实施例中,虚拟机引擎包括解译器(例如参照图3B描述的虚拟机解译器)。在图4的示出中,第一处理机对应于用于执行添加功能的字节码,该添加功能更偏好执行速度而不是模糊处理。第二处理机对应于用于执行添加功能的字节码,该添加功能更偏好模糊处理而不是执行速度。当处理机调用对应的功能时,生成并执行汇编代码的序列。在实施例中,由第二处理机(例如调用更偏好模糊处理而不是执行速度的功能的处理机)生成的汇编代码的序列包含多余的汇编指令。因此,读取由虚拟机引擎生成的汇编代码的攻击者将接收具有若干不必要并且/或者费解的步骤的汇编代码,并且因此,确定哪一部分汇编代码是多余的或确定汇编代码的功能是什么将会是困难且费时的。这个困难可以阻碍攻击者例如对与第二处理机相对应的字节码部分的逆向工程,并因此防止该字节码部分遭受攻击。因此,当需要提高保护时,可以使用与第二处理机相对应的字节码,而当不需要提高保护时,可以使用与第一处理机相对应的字节码,因此,允许开发者限制模糊处理对执行速度的影响。
在实施例中,可以使用若干个处理机,并且每个处理机可以对应于模糊处理的程度或执行速度。例如,可以使用与非常慢的执行、慢速执行、正常执行、快速执行和非常快的执行相对应的处理机。在实施例中,执行速度通过相对彼此来确定,但是也可以基于固定的标准来确定,例如处理机执行的功能的数量或执行由处理机调用的功能所需要的时钟周期的平均数量。图5示出了接收模糊字节码506并执行由两个处理机514调用的功能508的虚拟机引擎512,该两个处理机是从处理机的集合中选择的与模糊程度和执行速度相对应的两个处理机。处理机1生成“快速”编译代码。在实施例中,快速编泽代码是包括单个操作码的编译代码。因此,处理编译代码的CPU可以非常快地处理编译代码,但是代码的功能即使的确被模糊,也仅仅是勉强被模糊。处理机2生成“非常慢”的编译代码。在实施例中,非常慢的编译代码是包括若干个操作码并使用若干个寄存器来实现通过更少的操作码和/或寄存器能够实现的结果的编译代码。因此,处理编译代码的CPU将需要比处理快速编译代码更大量的时间来处理非常慢的编译代码,但是相比较而言非常慢的编译代码更加模糊。
在实施例中,根据虚拟机引擎的运行模式或运行状态,可以使用不同的处理机。图6示出了接收模糊字节码606并基于虚拟机引擎的运行模式616-1、616-2执行由两个不同处理机614调用的功能608的虚拟机引擎612,该两个处理机来自两个不同的处理机集合618。在实施例中,虚拟机的运行模式最初可以设置在全局级别(例如通过字节码中的全局变量)或设置在默认运行模式(例如通过虚拟机引擎的配置设置)。然后可以通过后续指令来修改运行模式。如图所示,模糊字节码包含修改虚拟机引擎的运行模式的指令(例如VM_RUN_FAST和VM_RUN_SLOW)。在实施例中,当由虚拟机引擎来处理修改虚拟机引擎的运行模式的指令时,虚拟机引擎进入指令所指示的模式,并且将后续指令仅与该模式的处理机相匹配,直到处理到修改虚拟机引擎的运行模式的后续指令。在图6的示出中,处理使虚拟机引擎进入“快速”运行模式616-1的指令。然后,当处理“VM_ADD”指令时,该指令将对应于处理机1,并且将生成对应的编译代码。当处理使虚拟机引擎的模式进入“缓慢”运行模式616-2的指令时,虚拟机引擎进入缓慢运行模式。然后,当再次处理“VM_ADD”指令时,该指令将对应于处理机2,并且将生成对应的编译代码。因此,与使用若干不同的字节码指令来控制模糊处理的级别和执行速度不同,可以改变虚拟机引擎的运行模式来控制模糊处理的级别和执行速度,但可使用相同的字节码指令。
类似于与参照图5描述的模糊程度和执行速度相对应的处理机的设置,也可以使用多个运行状态。图7示出了接收模糊字节码706并基于虚拟机引擎的运行模式716-1-716-N执行由两个不同处理机714调用的功能708的虚拟机引擎712,该两个处理机来自处理机集合718。在实施例中,虚拟机引擎可以具有五个运行模式,该五个运行模式从具有缓慢执行速度的最高模糊到具有最快执行速度的最低模糊流转。例如,运行模式2716-2对应于处理机调用功能来生成更偏好模糊而不是执行速度的运行模式,而运行模式4716-1对应于处理机调用功能来生成更偏好执行速度而不是模糊的运行模式。在图7的示出中,处理使虚拟机引擎进入“运行模式4”的指令。因此,当之后处理“VM_ADD”时,从运行模式4的处理机中选择处理机1,并且生成对应的编译代码。然后,当后续指令将运行模式变为“运行模式2”时,使用从运行模式2的处理机中选择的处理机2来处理“VM_ADD”指令,并生成对应的编译代码。因此,可以改变虚拟机引擎的运行模式来以变化的量控制模糊级别和执行速度,同时使用相同的字节码指令。
在实施例中,不同于向生成的编译代码中添加不必要或费解的步骤以使代码模糊,可以通过将若干个处理机配置为对应于单个字节码来使代码模糊。因此,当执行字节码时,攻击者将不确定如何解译字节码,因为由于相同的字节码而执行两个不同的功能。图8A示出了表示基于虚拟机的模式的从字节码到虚拟机指令的映射的表格802。在实施例中,虚拟机可以处于两个模式中的一个,并且通过特殊指令来从第一模式转换到第二模式。在图8A示出的表格中,针对字节码“12 03”、“12 09”、“23”、“ff02”和“45fe”指示针对每个模式的字节码的正确映射。在实施例中,字节码“ff02”对应于将虚拟机转换到VMX_MODE 2并在两个模式下具有相同映射的特殊指令,而其它字节码具有两个不同的映射。图8B示出了接收模糊字节码806并执行由与模糊字节码相对应的处理机814调用的功能808的虚拟机引擎812,该模糊字节码具有与单个字节码相关联的两个不同指令。在实施例中,类似于参照图6和图7描述的运行模式或运行状态,可以对指令集进行指示。如图8所示,虚拟机引擎开始于默认模式816-1,并且,当处理字节码“23”时,使用来自第一处理机集合818的处理机1调用功能来生成针对“VM1_ADD”的适当的编译代码。当虚拟机引擎处理字节码“ff02”时,执行特殊指令“VMX_MODE 2”,并且虚拟机引擎进入VMX Mode 2 816-2。由此,后续的字节码将映射到不同的指令,并被使用第二处理机集合818来处理。例如,在模式2中,字节码“23”映射到指令“VM2_SUB”,并且当处理“VM2_SUB”时,使用处理机2。因此,当攻击者尝试将字节码的部分与生成的编译代码相联系时可能非常混乱,因为如果攻击者不知道两个部分之间的模式转换,那么两个看上去完全相同的字节码部分产生不同的编译代码。此外,由于没有向编译代码中插入多余代码,编译代码的执行速度通常比编译代码中包括多余代码的技术更快。
图9是根据本发明的实施例的用于保护计算机软件代码的方法的流程图。在方框902处,接收到与计算机软件代码相对应的指令。在实施例中,指令是由编译器接收的源代码,并且至少包括第一指示符和第二指示符,该第一指示符和第二指示符用于指示要应用到源代码的部分的模糊处理级别。在方框904处,将由第一指示符指示的指令的部分重写为第一虚拟指令集合,并且在方框906处,将由第二指示符指示的指令的部分重写为第二虚拟指令集合。在实施例中,第一指示符和第二指示符是Cpragma,但是可以使用其它指示符。在实施例中,将第一指令部分重写为包括指示符的虚拟指令,该指示符在被解译时导致更偏好执行速度而不是模糊处理的编译代码,而将第二指令部分重写为包括指示符的虚拟指令,该指示符在被解译时导致编译代码更偏好模糊处理而不是执行速度的编译代码。由此,与将第一指令部分和第二指令部分二者整体重写为导致更偏好模糊处理而不是执行速度的编译代码的虚拟指令相比,程序的整体执行速度可以更快。此外,与使用更偏好执行速度而不是模糊处理的虚拟指令对第一指令部分和第二指令部分二者整体进行重写相比,可以针对第二指令部分实现更高级别的模糊处理。因此,在不存在不必要的性能下降的情况下,在需要时可以实现更好的模糊处理和保护。
图10是可以运行虚拟机引擎的计算机1000的框图。在实施例中,计算机包括处理器1002、存储器1004、用户接口1006和通信接口1008。在实施例中,处理器执行存储在存储器中的指令,并且,当执行该指令时,可以执行上述技术。在实施例中,用户接口促进用户与计算机之间的交互。在实施例中,用户接口是用户可以经由具有浏览器功能的接口设备来访问的基于浏览器的接口。在实施例中,通信接口可以是用于与键盘和鼠标的通信的标准I/O总线,或者通信接口可以是被配置为基于标准TCP/IP来接收输入的网络接口卡(NIC)。
虽然以具体顺序示出并描述了本文的方法的操作,每个方法的操作顺序可以发生变化,使得可以按照相反的顺序来执行某些操作,或使得某些操作至少可部分与其它操作同时执行。在另一实施例中,可通过间歇和/或交替的方式来实现不同操作的指令或子操作。
应该注意,可以使用存储在计算机可用存储介质上以由计算机执行的软件指令来实现方法操作中的至少一些。例如,计算机程序产品的实施例包括用来存储计算机可读程序的非暂时性计算机可用存储介质,当计算机可读程序在计算机上执行时使计算机执行本文中所述的操作。
此外,本发明至少一部分的实施例可采用计算机程序产品的形式,可从非暂时性计算机可用或计算机可读介质访问该计算机程序产品,该计算机程序产品提供计算机或任意指令执行系统使用或与其相关联的程序代码。为描述目的,计算机可用或计算机可读介质可以是包含、存储、传送、传播或传输程序的任何装置,程序由指令执行系统、装置或设备使用或与之结合使用。
计算机可用或计算机可读介质可以是电子的、磁性的、光学的、电磁的、红外的或半导体的系统(或装置或设备),或者是传播介质。非暂时性计算机可读介质的示例包括半导体或固态存储器、磁带、可拆卸式计算机磁盘、随机存取存储器(RAM)、只读存储器(ROM)、刚性磁盘和光盘。光盘的当前示例包括具有只读存储器(CD-ROM)的高密度盘、具有读/写的高密度盘(CD-R/W)、数字视频盘(DVD)、以及蓝光盘。
在以上描述中提供了各实施例的具体细节。然而,可以利用少于全部这些具体细节来实践一些实施例。在其他情况下,为了简洁和清楚起见,没有详细描述除了实现本发明实施例之外的某些方法、程序、部件、结构和/或功能。
此外,尽管已经描述或描写了本发明的特定实施例,但是本发明不仅限于所描述和描写的部件的特定形式或排列。本发明的保护范围由附带的权利要求以及其等同替代来定义。
Claims (20)
1.一种用于保护计算机软件代码的方法,所述方法包括:
接收与应用的计算机软件代码相对应的指令,所述指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;
将所述第一指令部分重写为第一虚拟指令部分;以及
将所述第二指令部分重写为第二虚拟指令部分;
其中,所述第一虚拟指令部分包括与第一处理机相对应的第一虚拟指令,并且所述第二虚拟指令部分包括与第二处理机相对应的第二虚拟指令,所述第一处理机与所述第二处理机具有不同的属性,
其中,所述属性包括以下至少一个:执行给定功能所需要的指令数量、指令集架构、使用的寄存器的数量、或指令集中假指令或伪指令的数量。
2.根据权利要求1所述的方法,其中,所述第一处理机的属性对应于比所述第二处理机更高的模糊处理和更慢的执行速度。
3.根据权利要求1所述的方法,还包括:将由第三指示符指示的第三指令部分重写为第三虚拟指令部分,其中,所述第三虚拟指令部分包括与第三处理机相对应的虚拟指令,所述第三处理机具有在所述第一处理机和所述第二处理机定义的范围中的模糊处理程度和执行速度。
4.根据权利要求1所述的方法,其中,所述第一虚拟指令部分的虚拟指令来自于第一虚拟指令集合,以及所述第二虚拟指令部分的虚拟指令来自于第二虚拟指令集合。
5.根据权利要求1所述的方法,其中,用于形成所述第一虚拟指令部分的虚拟指令集合是默认虚拟指令集合,以及用于形成所述第二虚拟指令部分的虚拟指令集合是由所述第二指令部分指示的虚拟指令集合。
6.根据权利要求1所述的方法,其中,所述第一指示符和所述第二指示符是嵌入到所述计算机软件代码中的操作符。
7.根据权利要求1所述的方法,其中,对所述第一虚拟指令部分进行配置,使得将使用与用于所述第二虚拟指令部分的处理机不同的处理机来解译所述第一虚拟指令部分,以及对所述第二虚拟指令部分进行配置,使得将使用与用于所述第一虚拟指令部分的处理机不同的处理机来解译所述第二虚拟指令部分。
8.根据权利要求1所述的方法,其中,所述第一处理机和所述第二处理机生成相同的编译代码。
9.一种计算机系统,包括一个或多个处理器和存储器,所述存储器包括计算机代码,当由所述一个或多个处理器执行所述计算机代码时,所述计算机代码实现根据权利要求1所述的方法。
10.一种存储指令的非暂时性计算机可读存储介质,当由计算机执行所述指令时,所述指令执行用于保护计算机软件代码的步骤,所述步骤包括:
接收与应用的计算机软件代码相对应的指令,所述指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;
将所述第一指令部分重写为第一虚拟指令部分;以及
将所述第二指令部分重写为第二虚拟指令部分;
其中,所述第一虚拟指令部分包括与第一处理机相对应的第一虚拟指令,并且所述第二虚拟指令集合包括与第二处理机相对应的第二虚拟指令,所述第一处理机具有与所述第二处理机不同的属性,
其中,所述属性包括以下至少一个:执行给定功能所需要的指令数量、指令集架构、使用的寄存器的数量、或指令集中假指令或伪指令的数量。
11.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述第一处理机的属性对应于比所述第二处理机更高的模糊处理和更慢的执行速度。
12.根据权利要求10所述的非暂时性计算机可读存储介质,还包括当由计算机执行时执行以下步骤的指令:将由第三指示符指示的第三指令部分重写为第三虚拟指令部分,其中,所述第三虚拟指令部分包括与第三处理机相对应的虚拟指令,所述第三处理机具有在所述第一处理机和所述第二处理机定义的范围中的模糊处理程度和执行速度。
13.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述第一虚拟指令部分的虚拟指令来自于第一虚拟指令集合,以及所述第二虚拟指令部分的虚拟指令来自于第二虚拟指令集合。
14.根据权利要求10所述的非暂时性计算机可读存储介质,其中,用于形成所述第一虚拟指令部分的虚拟指令集合是默认虚拟指令集合,以及用于形成所述第二虚拟指令部分的虚拟指令集合是由所述第二指令部分指示的虚拟指令集合。
15.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述第一指示符和所述第二指示符是嵌入到计算机软件代码中的操作符。
16.根据权利要求10所述的非暂时性计算机可读存储介质,其中,对所述第一虚拟指令部分进行配置,使得将使用与用于所述第二虚拟指令部分的处理机不同的处理机来解译所述第一虚拟指令部分,以及对所述第二虚拟指令部分进行配置,使得将使用与用于所述第一虚拟指令部分的处理机不同的处理机来解译所述第二虚拟指令部分。
17.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述第一处理机和所述第二处理机生成相同的编译代码。
18.一种计算机系统,包括一个或多个处理器和存储器,所述存储器存储计算机代码,当由所述一个或多个处理器执行所述计算机代码时,所述计算机代码实现根据权利要求1所述的方法。
19.一种用于保护计算机软件代码的计算机实现的系统,所述系统包括:
一个或多个处理器;以及
存储指令的存储器,当由所述一个或多个处理器执行所述指令时,所述指令执行以下步骤,包括:
接收与应用的计算机软件代码相对应的指令,所述指令包括由第一指示符指示的要保护的第一指令部分和由第二指示符指示的要保护的第二指令部分;
将所述第一指令部分重写为第一虚拟指令部分;以及
将所述第二指令部分重写为第二虚拟指令部分;
其中,所述第一虚拟指令部分包括与第一处理机相对应的第一虚拟指令,并且所述第二虚拟指令集合包括与第二处理机相对应的第二虚拟指令,所述第一处理机具有与所述第二处理机不同的属性,
其中,所述属性包括以下至少一个:执行给定功能所需要的指令数量、指令集架构、使用的寄存器的数量、或指令集中假指令或伪指令的数量。
20.根据权利要求19所述的计算机实现的系统,还包括当执行时执行以下步骤的指令:将由第三指示符指示的第三指令部分重写为第三虚拟指令部分,其中,所述第三虚拟指令部分包括与第三处理机相对应的虚拟指令,所述第三处理机具有在所述第一处理机和所述第二处理机定义的范围中的模糊处理程度和执行速度。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/632,879 US9501301B2 (en) | 2015-02-26 | 2015-02-26 | Flexible instruction sets for obfuscated virtual machines |
US14/632,879 | 2015-02-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105930694A CN105930694A (zh) | 2016-09-07 |
CN105930694B true CN105930694B (zh) | 2020-12-04 |
Family
ID=55068901
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610105133.4A Active CN105930694B (zh) | 2015-02-26 | 2016-02-25 | 用于模糊虚拟机的灵活指令集 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9501301B2 (zh) |
EP (1) | EP3062256B1 (zh) |
CN (1) | CN105930694B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160379131A1 (en) * | 2015-06-26 | 2016-12-29 | Nxp B.V. | Fuzzy opaque predicates |
US9760736B2 (en) | 2015-09-29 | 2017-09-12 | International Business Machines Corporation | CPU obfuscation for cloud applications |
JP6919570B2 (ja) * | 2015-11-30 | 2021-08-18 | 日本電気株式会社 | ソフトウェア解析装置、ソフトウェア解析方法、及び、ソフトウェア解析プログラム |
US10394554B1 (en) * | 2016-09-09 | 2019-08-27 | Stripe, Inc. | Source code extraction via monitoring processing of obfuscated byte code |
FR3056787B1 (fr) * | 2016-09-27 | 2018-11-23 | Tages | Methode de protection d’un programme logiciel par offuscation par virtualisation |
US11741197B1 (en) | 2019-10-15 | 2023-08-29 | Shape Security, Inc. | Obfuscating programs using different instruction set architectures |
CN111680271A (zh) * | 2020-06-02 | 2020-09-18 | 浙江大学 | 基于智能合约字节码特征的合约代码混淆平台和混淆方法 |
US20230236907A1 (en) * | 2022-01-26 | 2023-07-27 | Nvidia Corporation | Application programming interface to cause operator to be used by compiler |
CN117992173A (zh) * | 2022-10-31 | 2024-05-07 | 华为技术有限公司 | 一种函数保护方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
CN103443765A (zh) * | 2011-02-01 | 2013-12-11 | 耶德托公司 | 自适应混淆的虚拟机 |
CN104321774A (zh) * | 2012-05-25 | 2015-01-28 | 皇家飞利浦有限公司 | 用于防逆向工程和/或篡改程序的方法、系统以及设备 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5596755A (en) * | 1992-11-03 | 1997-01-21 | Microsoft Corporation | Mechanism for using common code to handle hardware interrupts in multiple processor modes |
US6272636B1 (en) * | 1997-04-11 | 2001-08-07 | Preview Systems, Inc | Digital product execution control and security |
US6848111B1 (en) * | 1999-02-02 | 2005-01-25 | Sun Microsystems, Inc. | Zero overhead exception handling |
US7243340B2 (en) * | 2001-11-15 | 2007-07-10 | Pace Anti-Piracy | Method and system for obfuscation of computer program execution flow to increase computer program security |
US7624383B2 (en) * | 2004-04-30 | 2009-11-24 | Cornell University | System for and method of improving discrete event simulation using virtual machines |
JP5133973B2 (ja) | 2007-01-18 | 2013-01-30 | パナソニック株式会社 | 難読化支援装置、難読化支援方法、プログラムおよび集積回路 |
US20100153776A1 (en) * | 2008-12-12 | 2010-06-17 | Sun Microsystems, Inc. | Using safepoints to provide precise exception semantics for a virtual machine |
CN101853363B (zh) * | 2010-05-07 | 2012-08-08 | 飞天诚信科技股份有限公司 | 一种文件保护方法及系统 |
US9116712B2 (en) * | 2013-02-28 | 2015-08-25 | Microsoft Technology Licensing, Llc | Compile based obfuscation |
US9411597B2 (en) | 2014-05-06 | 2016-08-09 | Nxp B.V. | Return-oriented programming as an obfuscation technique |
US9251090B1 (en) * | 2014-06-03 | 2016-02-02 | Amazon Technologies, Inc. | Hypervisor assisted virtual memory obfuscation |
-
2015
- 2015-02-26 US US14/632,879 patent/US9501301B2/en active Active
- 2015-12-30 EP EP15203095.3A patent/EP3062256B1/en active Active
-
2016
- 2016-02-25 CN CN201610105133.4A patent/CN105930694B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
CN103443765A (zh) * | 2011-02-01 | 2013-12-11 | 耶德托公司 | 自适应混淆的虚拟机 |
CN104321774A (zh) * | 2012-05-25 | 2015-01-28 | 皇家飞利浦有限公司 | 用于防逆向工程和/或篡改程序的方法、系统以及设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3062256A1 (en) | 2016-08-31 |
CN105930694A (zh) | 2016-09-07 |
US20160253189A1 (en) | 2016-09-01 |
EP3062256B1 (en) | 2019-04-03 |
US9501301B2 (en) | 2016-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105930694B (zh) | 用于模糊虚拟机的灵活指令集 | |
US11507671B1 (en) | Detection and healing of vulnerabilities in computer code | |
Liljestrand et al. | {PAC} it up: Towards pointer integrity using {ARM} pointer authentication | |
Simon et al. | What you get is what you C: Controlling side effects in mainstream C compilers | |
Patrignani et al. | Secure compilation to protected module architectures | |
JP4777903B2 (ja) | 実行トレースプリントを検証することによるプログラム実行整合性の制御方法 | |
CN107077562B (zh) | 用于动态控制代码执行的计算机实现的方法和系统 | |
EP3688648B1 (en) | Dynamically generated code process sandboxing using authenticated pointers | |
US20170024230A1 (en) | Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine | |
US20160210216A1 (en) | Application Control Flow Models | |
AU2020220465A1 (en) | Securing virtual-machine software applications | |
EP2942727B1 (en) | Return-oriented programming as an obfuscation technique | |
US20160171213A1 (en) | Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer | |
CN110717181B (zh) | 基于新型程序依赖图的非控制数据攻击检测方法及装置 | |
Patrignani et al. | Fully abstract trace semantics for low-level isolation mechanisms | |
Giner et al. | Repurposing Segmentation as a Practical {LVI-NULL} Mitigation in {SGX} | |
Vanoverberghe et al. | A caller-side inline reference monitor for an object-oriented intermediate language | |
EP3574425B1 (en) | Method to secure a software code | |
Zhang et al. | Cape: compiler-aided program transformation for htm-based cache side-channel defense | |
Lackner et al. | Countering type confusion and buffer overflow attacks on Java smart cards by data type sensitive obfuscation | |
Bouffard et al. | Hardening a Java Card Virtual Machine Implementation with the MPU | |
Mori | Detecting unknown computer viruses–a new approach– | |
de Clercq | Hardware-supported software and control flow integrity | |
Resell | Forward-edge and backward-edge control-flow integrity performance in the linux kernel | |
Vanoverberghe et al. | Policy ignorant caller-side inline reference monitoring |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |