CN101529436B - 用于增强软件安全性的方法 - Google Patents

用于增强软件安全性的方法 Download PDF

Info

Publication number
CN101529436B
CN101529436B CN2007800396079A CN200780039607A CN101529436B CN 101529436 B CN101529436 B CN 101529436B CN 2007800396079 A CN2007800396079 A CN 2007800396079A CN 200780039607 A CN200780039607 A CN 200780039607A CN 101529436 B CN101529436 B CN 101529436B
Authority
CN
China
Prior art keywords
code
program
instruction
self
order
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
Application number
CN2007800396079A
Other languages
English (en)
Other versions
CN101529436A (zh
Inventor
B·安卡尔特
M·H·加库伯斯基
R·文卡塔萨尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101529436A publication Critical patent/CN101529436A/zh
Application granted granted Critical
Publication of CN101529436B publication Critical patent/CN101529436B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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/53Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Abstract

一种计算机可实现方法包括:提供包括用以生成程序的不同副本的特征的指令集体系结构,使用该指令集体系结构来生成程序的不同副本,并且提供虚拟机以执行该程序的不同副本之一。各种示例性方法、设备、系统等使用虚拟化来多样化代码和/或虚拟机从而增强软件安全性。

Description

用于增强软件安全性的方法
技术领域[0001] 本发明涉及用于增强软件安全性的方法,尤其涉及多样化的防篡改的虚拟化技术。 
背景技术
尽管软件供应商做出了巨大的努力,但是软件保护机制仍被定期破坏。此外,对一个副本的成功攻击通常可被自动复制到其它副本上。例如,如果软件供应商分发一个软件的评估版本,则从一个副本上去除时间限制的破解也可被应用于所有其它分发的副本。此外,常规分发模型可允许快速影响数千用户的连续攻击。 
多样化是可用于增强软件安全性且挫败攻击的概念。然而,为软件安全性开发的多样化技术由于可应用不同的规则而不总是可转移到软件保护。例如,当攻击者可以对程序和执行环境进行物理访问时,为安全性而引入的大多数运行时多样化可被容易地关闭。 
如本文所述,用于软件保护的各种多样性技术例如通过给予每个用户不同的副本并利用定制的更新来延续防御从而提供了在空间和时间上的可延续防御。 
发明概要
各种示例性技术将虚拟化用于使代码和/或虚拟机(VM)多样化从而增强软件安全性。例如,一种计算机可实现方法包括提供包括生成程序的不同副本的特征的指令集体系结构(ISA),使用该指令集体系结构来生成程序的不同副本,以及提供用于执行该程序的不同副本之一的VM。还公开了各种其它示例性技术。 
附图说明
参考以下附图描述了非限制性且非穷尽示例: 
图1是包括虚拟化层作为自定义/经修改的指令集体系结构(ISA)和/或虚拟机(VM)的系统和整体体系结构的示图; 
图2是包括用以生成自定义代码和/或自定义VM的安全模块的示例性方法的框图; 
图3是用于生成自定义VM的示例性方法的框图; 
图4是用于使代码中的函数多样化以生成自定义代码的示例性方法的框图; 
图5是涉及图4的方法的示例的示图; 
图6是用于使数据和/或数据结构多样化的示例性方法的框图; 
图7是可用于多样化和防篡改的各种框架特性的框图; 
图8是具有可用于多样化和防篡改的特性的执行模型的示图; 
图9是可出于多样化和防篡改的目的应用于指令语义的各种方法的框图; 
图10是可出于多样化和防篡改的目的应用于指令编码的各种方法的框图; 
图11是可出于多样化和防篡改的目的应用于取周期的各种方法的框图; 
图12是可出于多样化的目的应用于程序计数器(PC)和/或程序表示的各种方法的框图; 
图13是出于多样化的防篡改的目的的分裂树中的代码片段的示例的示图; 
图14是可出于多样化的目的应用于虚拟机(VM)实现的各种方法的框图; 
图15是示例性计算设备的框图。 
详细描述 
概览 
示例性技术将基于软件的安全性用于在虚拟机或可被控制(例如,以特定方式操作)的其它机器上执行的代码。各种示例以协作方式修改代码、修改数据和/或修改虚拟机操作以增强安全性。例如,与代码相关联的特征可被标识且用于使代码的实例多样化。各种示例包括对在现有体系结构或经修改的体系结构之上仿真的自定义或经修改的指令集体系结构(ISA)的使用。在现有体系结构包括虚拟化层(例如,虚拟机或运行时引擎或简称“运行环境”)的情况下,一种示例性方法可将另一虚拟化层添加到现有虚拟化层之上。各种技术的实现可通过使用在底层虚拟机之上操作的自定义虚拟机或通过使用经修改的虚拟机(例如,底层虚拟机的修改)来发生。为了以性能为代价来增加安全性,这种过程可被迭代以生成虚拟机的栈,这些虚拟机中的每一个使直接在其下面的机器的指令集虚拟化。 
关于多样化,可做出对遗传多样性的类推,在遗传多样性中,常规组分(例如,DNA构件块)以各种方式装配从而增强物种的多样性。进而,恶意因子(例如,病毒)不太可能影响遗传上不同的物种的所有成员。对于一些寄生虫也存在类推,其中数百基因可制造被混合和匹配的蛋白质。这种蛋白质多样性帮助这种寄生虫逃 避免疫系统检测。然而,尽管物种中的遗传多样性通常与表型多样性(即,表达或表现的多样性)相关联,但如本文所述,代码多样化不应当改变用户的体验。换言之,如果给定相同的输入,则多样化代码的所有实例应当执行产生相同的结果。 
考虑以下广义方程: 
基因型+环境=表型(1) 
代码/数据+机器=结果(2) 
在方程2中,采用多样化的代码和/或数据,机器可以是确保结果基本相同的自定义机器或者经修改的或受控的机器。在使用一个或多个虚拟机的情况下,底层硬件和/或操作系统通常不被本文所述的示例性安全方法所影响;然而,注意,此类方法可增大计算需求。 
如本文所述,代码多样化通过挫败攻击而增强安全性。另外,代码多样性可挫败连续攻击,因为对代码的一个实例的成功攻击的复制不太可能在该代码的“遗传上”不同的实例上成功。此外,数据(或数据结构)可被多样化以增强安全性。此外,用于使自定义或经修改的虚拟机多样化的示例性技术可以在有或没有代码和/或数据多样性的情况下用于增强安全性。 
尽管各种示例集中于从MSIL二进制代码生成个性化的字节代码,但是各种示例性技术可用于以任何编程语言、中间语言、字节代码或方式表达的程序。 
如本文所述,虚拟化过程(例如,在虚拟机或虚拟环境上执行代码)便于(i)制作程序的许多不同版本的能力以及(ii)使程序的每个实例抗攻击的能力。各种示例性技术使用虚拟化在可移植的、可验证的托管CLR环境之上仿真自定义指令集体系结构(ISA)。自定义运行环境或经修改的运行环境可用于仿真自定义ISA,即以某种方式,底层运行环境必须能够管理经由自定义ISA引入的多样性。 
虚拟化提供可用于多样化的自由度。例如,指令集体系结构(ISA)(例如,和/或微体系结构)通常包括:(1)指令语义,(2)指令编码,(3)操作码编码,(4)代码表示和程序计数器,以及(5)虚拟机的相应内部实现。如果给定这些自由度,则各种示例性方法可利用各种保护机制中的任何一种来生成程序的许多不同副本。 
与ISA相关联的自由度提供对防篡改程序的设计和选择。例如,防篡改可以是以下过程的结果:(1)通过(a)可变指令长度、(b)有限指令集以及鼓励(c) 物理和(d)语义重叠使局部修改更加困难;(2)通过上述全部方式以及模糊代码、数据和地址之间的边界使全局修改更加困难;(3)使指令语义可变;以及(4)不断地重定位代码。 
更多具体示例包括:(i)通过以更小的指令的组合构建指令来随机化指令语义;(ii)选择指令语义来实现增多的语义重叠;(iii)背离传统线性代码表示而将代码表示为诸如自适应(分裂)二叉树之类的数据结构;(iv)将可变长度分配给操作码和操作数以使反汇编变得复杂并且使局部修改更加困难;(v)限制指令集以给予攻击者更少的分析与修改代码的选择;以及(vi)使位模式、操作码和操作数之间的映射可变。这些示例中的某一些将在下文中更详细描述。该详细描述包括当前构想的最佳模式。 
在描述各种细节之前,出于上下文的目的,图1示出通用系统100和包括虚拟化的体系结构105。体系结构105还示出与被称为公共语言运行环境(CLR)的虚拟机有关的自定义和/或经修改的ISA和/或虚拟机。例如,图1中的CLR是能够处理从各种面向对象的编程语言(OOPL)中的任何一种得到的中间语言代码的CLR,因此使用术语“公共”。尽管图1是关于.NETTM框架(华盛顿州雷蒙德市的微软公司)来讨论的,但是示例性技术也可与其它体系结构一起使用。 
系统100包括经由网络103通信的各个计算设备101、101’、102、102’。设备101、101’可以是客户机(例如,PC、工作站、轻量设备、智能设备等),而设备102、102’是服务器。体系结构105被示为具有到设备101、服务器102’和网络103的某些链路。 
.NETTM框架有两个主要组件:公共语言运行环境(CLR)和.NETTM框架类库。它们被示为与托管应用程序相关联。CLR是在.NETTM框架基础上的虚拟机(VM)。CLR用作在执行时管理代码的代理,从而提供诸如存储器管理、线程管理以及远程处理之类的核心服务,同时还实施严格的类型安全以及提升安全性和稳健性的其它形式的代码准确性。代码管理的概念是CLR的基本原理。以CLR为目标的代码被称为托管代码,而不以运行环境为目标的代码被称为非托管代码(体系结构的右半边)。 
在.NETTM框架中程序是在由CLR提供的托管执行环境内执行的。CLR大大改善了程序之间的运行时交互性、可移植性、安全性、开发简单性、跨语言集成,并且为一组丰富的类库提供了极好的基础。以.NETTM框架CLR为目标的每种语言编译源代码并且产生元数据和 
Figure G2007800396079D00041
中间语言(MSIL)代码。尽管各种示例提 到MSIL,但各种示例性安全性技术可与其它语言代码一起使用。例如,各种技术可与几乎任何低级汇编器样式的语言(例如,任何中间语言(IL)代码)一起使用。各种技术可与诸如JAVATM框架(美国加利福尼亚州的桑尼维尔市的Sun微系统公司)的那些字节代码之类的字节代码一起使用。 
在.NETTM框架中,程序代码通常包括被称为“元数据”,或关于数据的数据的信息。元数据通常包括对于程序的完整说明,其中除每个函数的实际实现之外还包括其所有类型。这些实现被存储为MSIL,其是描述程序指令的机器无关代码。CLR可使用该“蓝图”使.NETTM程序在运行时苏醒,从而提供远远超过依赖于将代码直接编译成汇编语言的传统方法所可能提供的服务。 
.NETTM框架的另一主要组件——类库是综合性的、面向对象的可重复使用类型集合,用以开发从传统命令行或图形用户界面(GUI)应用程序到诸如Web视窗和XML Web服务之类的基于由ASP.NET提供的最新革新的应用程序的应用程序。 
尽管CLR被示为在体系结构105的托管应用程序侧,但是.NETTM框架可由将CLR加载到其进程中且启动托管代码的执行的非托管组件来主存,从而创建可充分利用托管和非受托管征两者的软件环境。.NETTM框架不仅提供若干运行环境宿主,而且还支持第三方运行环境宿主的开发。 
例如,ASP.NET主存运行环境(RT)以便为托管代码提供可伸缩的、服务器侧环境。ASP.NET对运行环境直接起作用以启用ASP.NET应用程序和XML Web服务。 
Internet 
Figure G2007800396079D00051
浏览器应用程序(微软公司)是主存运行环境(例如,以MIME类型扩展的形式)的非托管应用程序的示例。使用Internet 
Figure G2007800396079D00052
软件来主存运行环境使得用户能够将托管组件或Windows视窗控件嵌入到HTML文档中。以这种方式主存运行环境使托管移动代码(与 
Figure G2007800396079D00053
控件类似)成为可能,但是具有只有托管代码才能提供的显著进步,诸如半可信执行和隔离文件存储。 
如本文所述,托管代码可以是以运行环境为目标的任何代码(例如,虚拟机、运行时引擎等,其中运行环境与通常与硬件(HW)的控制直接相关联的底层操作系统(OS)接口)。在.NETTM框架中,托管代码以CLR为目标并且通常包括被称为“描述其自身”的元数据的额外信息。当托管和非托管代码两者均可在CLR中运行时,托管代码包括允许CLR保证例如安全执行和互操作性的信息。 
除托管代码之外,托管数据存在于.NETTM框架的体系结构中。一些.NETTM语言默认使用托管数据(例如,C#、Visual Basic.NET、JScript.NET),而其它的(例如,C++)则不。如同托管和非托管代码一样,在.NETTM应用程序中使用托管和非托管数据两者是可能的(例如,不收集无用信息而由非托管代码照管的数据)。 
程序或代码通常作为可移植可执行文件(例如,“PE”)来分发。在.NETTM PE中,PE包装内的第一数据块是MSIL,如已经提到的,MSIL看起来大致像是低级汇编器语言代码。MSIL常规上是在.NETTM框架中编译和执行的对象。PE的第二数据块常规上是元数据并且描述PE的内容(例如,它所提供的方法、它们所采用的参数以及它们所返回的是什么)。第三数据块被称为清单,其常规上描述该可执行文件为了运行所需的其它组件。清单还可包含外部组件的公钥,从而CLR可确保外部组件被正确地标识(即,可执行文件所需的组件)。 
当运行可执行文件时,.NETTM CLR可使用即时(JIT)编译。JIT编译使得所有托管代码能够在其上它被执行的系统(OS/HW)的本机机器语言中运行。根据JIT,因为可执行文件内的每个方法被调用,所以它被编译成本机代码,并且取决于配置,对同一方法的后续调用并不一定经历同一编译,从而可减少开销(即,每个方法调用仅仅招致一次开销)。尽管CLR提供许多标准运行时服务,但是托管代码从不被解释。同时,存储器管理器排除分段的存储器的可能性并且增强存储器访问局部性以进一步增强性能。 
再次参考体系结构105,CLR和类库的关系相对于应用程序以及整个系统(例如,系统100)示出,并且其示出托管代码如何在较大的体系结构内操作。 
CLR管理存储器、线程执行、代码执行、代码安全验证、编译以及其它系统服务。这些特征是在CLR上运行的托管代码所固有的。 
关于安全性,取决于包括它们的起源(诸如因特网、企业网或本地计算机)的许多因素,托管组件可被授予变化的信任度。这意味着托管组件能或不能执行文件访问操作、注册表访问操作或其它敏感功能,即时它正用于同一活动应用程序。 
CLR可实施代码访问安全性。例如,用户可以信任嵌入在网页中的可执行代码可在屏幕上播放动画或唱歌,但是不能访问他们的个人数据、文件系统或网络。CLR的安全性特征因而可使合法的因特网部署软件能够特别地富有特征。 
CLR还可通过实现被称为公共类型系统(CTS)的严格的类型与代码验证基础结构来实施代码稳健性。CTS确保所有托管代码是自描述的。托管代码可消耗其它托管类型和实例,同时严格地实施类型保真和类型安全。 
CLR的托管环境旨在消除许多常见的软件问题。例如,CLR可自动地处理对象布局并且管理对对象的引用,从而在它们不再被使用时释放它们。这种自动存储器管理解决两个最常见的应用程序错误,即存储器泄漏和无效存储器引用。托管代码和非托管代码之间的互操作性可使得开发者能够继续使用必要的COM组件(组件对象模型)和dll(动态连接库)。 
.NETTM框架CLR可由诸如 
Figure G2007800396079D00071
SQL ServerTM和因特网信息服务(IIS)之类的高性能、服务器侧应用程序主存。该基础结构使得托管代码能够用于编写业务逻辑,但仍使用支持运行环境主存的企业服务器。 
托管域中的服务器侧应用程序通过运行环境宿主来实现。非托管应用程序主存CLR,其允许自定义托管代码控制服务器行为。这种模型提供CLR和类库的特征,同时获得主机服务器的性能和可伸缩性。 
如上已经提到的,各种示例性技术使用虚拟化在可移植的、可验证的托管CLR环境之上仿真自定义或经修改的ISA。这在体系结构105中通过位于CLR和托管应用程序空间的边界之上的示例性自定义/经修改的ISA和/或VM 107(虚线的弧)示出(注意,各个示例也讨论非托管应用程序)。这推断自定义/经修改的ISA不干扰CLR和底层环境或“宿主”环境(例如,OS/HW)的操作。尽管自定义ISA可在实现自定义ISA的各种特征所必要的程度上提供对CLR或“VM”的控制,但是各个示例依赖于自定义VM,其可以是底层VM的修经改版本(即,经修改的CLR)。因此,示例性体系结构可包括单个经修改的VM或多个VM(例如,目标VM之上的自定义VM)。为增强安全性,以一些性能为代价,可以按使得除最低层VM之外的全部VM虚拟化直接在其下面的VM的指令集的方式来堆叠多个VM。 
在图1中,箭头指向其中常规CLR具有虚拟化层的一示例,该虚拟化层之上具有两类虚拟化VM1和VM2;以及其中常规CLR之上具有两个堆叠的虚拟化层VM1和VM3的另一示例。在此类示例中,底层CLR可以是具有安全性特征的自定义或专有CLR,其中附加的一个或多个虚拟化层进一步增强安全性。示例性方法包括多个堆叠的VM,其中每个VM虚拟化直接在其下面的机器的指令集。注意,最低层的VM通常虚拟化控制硬件的操作系统,而其它较高层的VM虚拟化另一VM。如图1所示,各种安排是可能的(例如,VM之上两个VM、堆叠的VM等)。多个“自定义”VM方法可被视为以一些性能为代价利用虚拟化来获得更多的安全性。 
再次参考对遗传和环境的类推,遗传可被认为是静态的而环境可被认为是动态的。类似地,各种基于多样性的防篡改方法可以是静态和/或动态的。通常,静态方法使程序代码的副本多样化,而动态方法运行时的一个或多个VM的操作或者程序操作多样化。因而,如本文所述,各种示例性技术包括静态地、动态地和/或静态(例如,为生成个性化程序代码)与动态(例如,为改变运行时的程序操作)两者兼有地工作的虚拟化。 
一种示例性方法可包括提供包括第一虚拟化层的体系结构以及在第一虚拟化层之上提供第二虚拟化层,其中第二虚拟化被配置为接收程序的多样化副本且允许使用第一虚拟化层执行该程序。这种方法可通过使用本文所述的多样化技术来增强软件安全性。 
一种示例性方法可包括生成程序代码的个性化副本以及提供用于执行该程序代码的个性化副本的虚拟机,其中虚拟机可改变运行时的程序操作。这种方法可通过使用本文所述的多样化技术来增强软件安全性。 
为方便起见,自定义和经修改的ISA在本文中被称为自定义ISA。自定义ISA可用于创建具有以下性质的程序的一组不同副本(或“版本”):(i)该组中的每个副本具有针对篡改的合理防御级别以及(ii)调整针对一个副本的现有攻击的目标使其针对另一副本起作用是困难的。众多选择导致可生成的在语义上等效的程序的较大空间。一方法可考虑该整个空间以允许更多的多样性,或者一方法可仅仅考虑该空间的被认为或被证明比其它部分更防篡改的部分。 
防篡改性质包括:(i)防止对程序的静态分析;(ii)防止对程序的动态分析;(iii)防止局部修改;以及(iv)防止全局修改。前两者与模糊问题密切相关,而后两者更加面向防篡改。然而,智能篡改需要至少一定程度的程序理解,而这通常从观察静态二进制代码、观察正在运行的可执行代码或者前两种技术的组合和/或重复来获得。 
存在各种ISA,例如,CISC、RISC以及最近的JavaTM字节代码和托管MSIL。然而,后两者处于许多原因往往更容易被分析。首先,二进制代码通常并不是在硬件上直接执行,而需要在执行之前被仿真或转换成本机代码。为实现这一点,需要知道代码与数据之间的边界并且恒定数据与可重定位地址之间可以没有混淆。当然,这带来了可移植性的优点。除可移植性之外,设计原理包括对类型化的存储器管理和可验证性的支持。为保证可验证性,指针运算不被允许,控制流被限制,等等。为启用类型化的存储器管理,需要将关于对象类型的大量信息传送到执行环境。 
所有这些设计原理导致了容易被执行环境分析,但是同样容易被攻击者分析的二进制代码。这导致了针对JavaTM和托管MSIL二进制代码两者的反编译器的创建。 
通常,存在ISA的设计原理变得越来越多地与可促进软件保护的设计原理相冲突的趋势。 
如本文所述,对抗该趋势的一种示例性技术增加了附加的虚拟化层(或任选地多个附加的虚拟化层)。更具体地,虚拟化可用于在可移植的、可验证的托管运行时环境之上仿真自定义ISA。考虑以下构造:(i)编写用于在CLR之上运行的环境的仿真程序(例如,自定义虚拟机);(ii)取二进制代码的二进制表示并且将其作为数据添加到仿真程序;以及(iii)使主过程在原始可执行代码的入口点开始仿真。如果给定该构造,则结果是托管的、可移植的且可验证的二进制代码。此外,它被作为本机二进制代码保护,因为本机二进制代码的攻击者可容易地获取该本机二进制代码并且跟随上述构造。 
通常,对于二进制代码,经验和直觉指示一般的IA32二进制代码在理解和操纵上远比一般的托管二进制代码更为复杂。一些根本原因包括(i)可变指令长度;(ii)代码与数据之间没有清晰区别;以及(iii)恒定数据与可重定位地址之间没有清晰区别。因为指令(操作码+操作数)可具有可变长度(例如,1-17个字节),所以指令仅仅需要字节对齐,并且可在IA32上与填充数据或常规数据相混合,所以反汇编程序可容易地脱离同步。因为代码与数据之间没有明确的分离,所以两者可被透明地读和写以及可互换地使用。这允许自修改代码,这是以难以分析且使攻击者混淆而著名的特征。 
代码的二进制表示可被容易地读取的特征已被用于实现自检机制,而对控制流的限制的不存在已实现了诸如控制流展平和指令重叠之类的技术。 
地址可被计算和它们不能被容易地与常规数据区别的事实使对二进制代码的篡改变复杂。例如,攻击者可仅仅做出局部修改,因为他没有足够的信息来重定位整个二进制代码。这种观察可用于生成被证实难以分析ISA的示例性自定义ISA。这种ISA可增加安全性。 
尽管示例性技术可包括ISA中的自修改代码和/或控制流展平和/或指令重叠,但是本文所讨论的具体示例包括对可变指令长度的规定以及对程序诸部分的二进制表示的使用以增强防篡改,这可被认为是与一些自检机制相关。 
软件通常知道它不希望以不受控方式共享的事物。例如,试用版可包含执行给定任务的功能,但是时间限制可防止对其过长使用。在数字容器中,软件通常用于提供对内容的受控访问。移动代理可包含需要保持秘密的密钥。 
为挫败攻击,示例性方法包括(i)使程序对于不同的安装不同;(ii)通过定制的更新使程序随时间而不同;以及(iii)通过运行时随机化使程序对于每次执行不同。 
图2示出结合在虚拟机上运行可移植可执行文件的框架实现的示例性安全模块200。安全模块200包括前端进程模块210和后端进程模块250。前端进程模块210读取以VM为目标的可执行二进制文件110并且产生以原始目标VM的经修改的版本或自定义VM为目标的自定义可执行二进制文件150。在任一种情况下,前端进程模块210可使用文件110来确定关于原始目标VM的信息,诸如VM描述115。后端进程模块250可使用VM描述215来生成用于自定义VM 170的代码、dll等。例如,常规VM可被作为共享库或dll(例如,“本机”库)来发货并且此类技术可用于自定义VM,注意,在VM在VM之上操作的情况下,底层VM的细节可采用自定义VM的形式和/或特性来解释。为方便起见,应用于VM的术语“自定义”可包括经修改的VM(例如,代码的原始目标VM的经修改版本)。 
在针对.NETTM框架的示例中,前端进程模块210读取托管MSIL二进制代码110,在代码上运行数次以确定其ISA,并且产生其目标VM的XML描述215。一旦确定了ISA,模块210就可将原始二进制代码重写成自定义字节代码语言150。 
图3示出示例性方法300,其中后端进程模块250读取XML描述215并创建用于自定义VM 172的托管dll。后端和前端的分离在一定程度上是人工的,但是它确实允许更加模块化的设计并且可便于调试。例如,后端进程模块250可被指示输出C#代码174而不是直接编译dll(例如,参见172)。代码174随后可被单独检查和调试。 
图4示出其中保留原始二进制代码的各个部分的示例性方法400。更具体地,原始VM可执行二进制代码110包括函数115(1)-(N)周围的包装111,并且前端进程模块210将每个函数115(1)-(N)重写到调用VM的包装113中,同时传递必要的自变量。在这一示例中,所有自变量可按对象数组来传递。对于“实例”函数,方法400也包括“this”指针。因为方法400在所有函数上操作以将每一个置为单个结构,所以前端进程模块210也可传递每个函数的入口点的标识。另外,在适当时, 前端进程模块210可提供特征以确保所返回的对象在适当时被强制转换为原始函数的返回类型。 
图5更详细地示出方法400的特定实现。在该示例中,前端进程模块210已使用调用VM的包装将函数转换成占位程序。更具体地,函数“foo”用调用“InvokeVM”来包装。 
如上已提到的,数据或数据结构可提供多样化的手段。图6示出示例性方法450,其中示例性前端进程模块210接收带有原始数据结构的数据117(1)-(N)的二进制代码110并且输出带有经修改的或自定义数据结构156的数据117(1)-(N)的自定义二进制代码150。尽管方法450还示出函数115(1)-(N)的包装,但是示例性方法可通过多样化代码、多样化数据和/或多样化代码与数据来生成自定义二进制代码。短语“数据的多样化”可包括数据的多样化以及基于数据结构的多样化。 
包括在每个功能的基础上重写原始程序的示例性方法的优点仅仅在于像无用信息收集这样的事情不成问题,因为数据结构仍像在原始程序中一样被处理。在技术被应用于模糊、多样化数据以及使数据更加防篡改的情况下,修改可提供像无用信息收集这样的任务。 
上述的图1-6示出虚拟化如何被用于增强安全性。更具体地,前端进程模块可用于生成自定义二进制代码,并且后端进程可用于生成自定义VM以执行该自定义二进制代码。以下所述的图7-14示出ISA和/或VM的具体特征如何通过多样化用于增强安全性。 
关于托管代码和本文给出的各种示例性技术,在用于CLR的托管MSIL与用于Java运行时环境(JRE)的JavaTM字节代码之间的选择在某种程度上是任意的,因为各种示例性技术可从.NETTM转移到JavaTM域。此外,用于模糊JavaTM字节代码的技术可应用于托管MSIL二进制代码。以下的讨论主要集中于源自“增加的”或自定义的虚拟层的示例性技术。例如,经由因特网分发对所分发副本的自动多样化正不断获得接受。因此,任何示例性技术的开销引入在经济上越来越可行。 
各种示例性技术可在不再需要人类交互的点上自动引入保护。生成不可管理的数量的、不同的、在语义上等效的程序在理论上是可能的:考虑具有300个指令的程序并且针对每个指令选择是否用空操作(no-op)将其预先挂起。这产生2300个不同的、在语义上等效的程序并且2300比宇宙中微粒的估计数量——1087还大。 
然而,唯一性并不一定是足够的,因为所得的程序应当足够不同以使从一个实例获得的信息映射到另一个实例上变得复杂。此外,所得的程序应当优选地是不同 寻常的以免被破坏。尽管期望各种示例性多样化技术的上域将包括每个在语义上等效的程序是不合理的,但是可设定目标使多样化的上域最大化,因为空间越大就越容易获得内部不同的程序。 
一种示例性方法从语义的现有实现开始,而不是从语义自身开始。通过多个可参数化变换可获得不同的版本。在以下各个示例中,标识ISA的可被独立地个性化的多个组件。 
图7示出被分组为二进制组件505和VM实现组件560的示例性框架特性500。二进制组件505包括指令语义510、指令编码520、操作数编码530、取周期540以及程序计数器(PC)与程序表示550。这些组件可按正交方式被个性化,只要接口被考虑到。组件505足以用自定义字节代码语言生成二进制代码;即,用以确定示例性自定义ISA。另外,多样化可通过多样化目标VM或自定义VM(例如,参见VM实现组件560)来发生。 
图8示出执行模型和接口800。模型800包括代码802、数据结构804、方法框架810和自定义二进制代码150。在图8中,箭头表示接口相关性并且星号表示一些可多样化的部分。使用这种模型的示例性方法允许模型化设计和独立开发。 
根据模型800和框架500,多样化可包括(i)通过以更小的指令的组合构建指令来随机化指令语义,(ii)选择指令语义来实现增多的语义重叠,(iii)背离传统线性代码表示而将代码表示为诸如自适应(分裂)二叉树之类的数据结构,(iv)将可变长度分配给操作码和操作数使反汇编变得复杂并且使局部修改更加困难,(v)限制指令集以给予攻击者更少的分析与修改代码的选择,(vi)使位模式、操作码和操作数之间的映射可变。 
图8中的代码802基于取执行周期给出对执行引擎的高层概览。VM的主要内部数据结构被示为方法框架810。如上已经提到的,箭头指示接口相关性。例如,DecodeOpcode预期能够取得多个比特。 
图9示出图5的指令语义510以及可用于多样化的一些特征。微操作的概念可允许指令语义的多样化。例如,自定义字节代码语言中的指令(例如,每一自定义ISA)可以是预定的微操作集的任何序列。对于MSIL,微操作集当前包括可验证的MSIL指令和多个附加的指令,以便:(i)传送正确执行所需的元信息,并且(ii)实现诸如改变语义之类的附加特征(以下将进一步更详细地描述)。 
这可与P6微体系结构中的微操作(μops)的概念相比较。每个IA32指令被转换成随后由流水线执行的一系列操作。这还可与超操作符相比较。超操作符是从 较小的操作的组合自动合成的虚拟机操作以避免昂贵的每操作开销且减小可执行文件的大小。 
示例性方法可包括提供占位程序来仿真每个微操作并且这些可被串接在一起以在自定义字节代码语言(例如,自定义ISA)中仿真更多的表达性指令,注意许多仿真功能可能严重依赖于反射。 
考虑使用以下MSIL指令(加法(add)、装入自变量(ldarg)以及装入常数(ldc))以及它们的仿真占位程序(其已被简化)的示例: 
ldarg Int32: 
   EvaluationStack.Push( 
       ArgsIn.Peek(getArgSpec(insNr)); 
ldc Int32: 
   EvaluationStack.Push( 
       getInt32Spec(insNr)); 
add: 
   EvaluationStack.Push( 
      (Int32)EvaluationStack.Pop()+ 
      (Int32)EvaluationStack.Pop()); 
假如在指令选择阶段期间,希望创建具有以下语义的自定义字节代码指令: 
CustomIns n i:装入第n个自变量,装入常数i并且将这两个值相加。 
该指令随后被分配到大的“switch”语句中的“case”语句(例如,1)。case语句是微操作的不同仿真占位程序的串接: 
switch(insNr){ 
case 1: 
   //占位程序的串接 
    break; 
关于防篡改,缺乏对指令语义的了解将使程序理解变得复杂,这与具有其中语义被指定的指南形成对比。为更进一层,自定义防篡改ISA可选择遵守某些设计原理的指令语义。 
再次参考图9,可使用条件执行512,其可任选地与谓词寄存器513结合使用以增强防篡改。条件执行还可促进略微不同的代码片段的合并。在存在条件执行的情况下,指令可由谓词寄存器判定。如果谓词寄存器被设定为假,则指令被解释为空操作(no-op)(没有操作),否则指令被仿真。通过利用该方法,在不同执行路径上或沿其设置寄存器以便能够执行略微不同的代码片段。 
一种示例性方法可包括提供原始程序的两个不同上下文中的代码序列a、b、c和a、d、c,并且随后将代码“合并”成a、[p1]b、[p2]d、c,其中p1被设定为“真”且p2被设定为“假”,以便执行第一上下文中的代码,并且进行相反的设置以便执行第二上下文中的代码。作为不同地设定一个或多个谓词寄存器的结果,可执行不同的代码片段(例如,a、b、空操作、c和a、空操作、d、c)。 
有限指令集514可用于增强防篡改。例如,自定义ISA可缺少空操作515、限制可表示操作数516和/或消除至少一些条件分支517。另一方法可为特定程序定制自定义VM;因而,示例性方法可确保VM仅可仿真该程序所需的操作。 
再次参考不带空操作515的自定义ISA,该方法考虑通过用空操作盖写“不合需要的”功能(例如,许可证检查或降低受伤游戏人物的健康)而将这种功能去除的常见攻击技术。在许多实例中,没有理由在自定义ISA中包括空操作指令,并且没有该指令将使攻击者填充不需要的代码的企图变得复杂。 
关于限制可表示操作数516,统计数据显示例如,来自某600个JavaTM程序(总共140万行)的整数文字中的80%是在0-99之间,95%是在0与999之间,并且92%是2的幂或者2的幂加或减1。因而,示例性自定义ISA可限制可表示操作数的数量,从而再次限制了攻击的自由。 
另一示例性方法可修改或限制对至少一些条件分支517的使用。例如,每个条件通常存在两个版本:“如果条件被设定则分支和如果条件未被设定则分支”。因为使用两个分支是多余的,所以自定义ISA可包括重写代码使得仅仅一个版本被 使用而其对应版本不被包括在ISA中。该示例性技术例如在许可证检查分支有条件地取决于序列号的有效性时是有用的:它将防止攻击者简单地翻转分支条件。 
图10示出图5的、具有可用于多样化的指令编码的各个方面的指令编码块520。更具体地,这些方面包括可变指令大小522、用于物理重叠的一元编码524、非局部语义526和重新排列解码结构529。 
一旦确定了指令语义,就需要确定针对这些指令的操作码编码。传统体系结构的所有操作码的大小通常是常数或者仅仅略微地可变。例如,MSIL操作码通常是一个字节,其用转义值(0xfe)来对较不频繁的指令启用两个字节操作码。有限的可变性便于通过表格解释来快速查找。但是,更一般地,任何前缀码(无代码字是任何其它代码字的前缀)允许明确的解释。 
在其最一般的形式中,可通过二叉树遍历来完成操作码到语义的解码。解码通常开始于根节点;当0比特被读取时,向左子节点的移动发生;当1比特被读取时,向右子节点的移动发生。当到达叶节点时,操作码已被成功地解码(例如,考虑包含对仿真指令语义的case语句的引用的叶节点)。 
如果自定义ISA允许任意操作码大小,而不存在非法操作码,则针对n个指令的可能编码的数量由以下方程给出: 
2 ( n - 1 ) n - 1 n n ! - - - ( 3 )
在方程3中,分数表示具有n个叶的平面二叉树的数量(Catalan数),而阶乘表示操作码到叶的分配。如果利用最短的可能编码选择固定操作码大小,即log2(n)比特,则它可引入非法操作码。在这种情况下,可能编码的数量由以下表示(方程4)给出: 
2 [ log 2 ( n ) ] n - - - ( 4 )
如果自定义ISA由于除最小固定操作码大小之外的其它原因而允许非法操作码,则将出现更多的可能。然而,这可能增大写入自定义ISA的二进制代码的大小而不提供优点。 
在本文给出的各个示例中,针对.NETTM框架(例如,MSIL),可支持以下模式:(i)具有表格查找的固定长度操作码;(ii)多级表格编码以实现略微可变的指令大小(转义码用于较长的操作码)以及(iii)具有用于解码的二叉树遍历的任意长度操作码。这些模式可在适当时应用于其它框架。 
再一次,关于防篡改,例如,与在指南中具有这一信息相比较,对从位序列到语义的映射的不了解为攻击者引入了学习曲线。存在以允许防篡改性质的方式选择映射的许多附加方法。 
如上已经提到的,图10的指令编码块520包括可变指令大小方法522。例如,自定义ISA可引入比CISC二进制代码中所允许的更多的操作码长度变化。可变指令大小还可用于使局部修改更加复杂。通常,较大的指令不能简单地替换较小的指令,因为它会盖写下一指令。自定义ISA还可确保较小的非控制转移指令不能替换较大的指令。例如,这可通过确保此类指令不被填充掉而使控制流到下一指令来完成。 
考虑具有64个指令的代码或ISA,其中每个指令可以被分配以比特范围计(例如,约64比特与约127比特之间)的唯一大小。显然,较大的指令不适合较小的指令的空间。此外,较小的指令确实适合较大的指令的空间。但是,当控制向下通过到达下一比特时,没有可用的指令来填充带有空操作的其余比特以确保控制流动到下一指令。因此,在该方案下使控制转移指令最长是有用的,以便阻止攻击者逃逸到他可为所欲为的另一位置。 
指令编码块520还包括一元编码方法524以实现例如物理重叠。一元编码方法可通过增大或最大化物理重叠来使程序更复杂。例如,这种方法能够跳到另一指令的中间,并且开始解码另一指令。该方法通过选择良好的编码来促进。例如,一元编码可用于编码操作码(0,01,001,...,0631)。在该示例中,存在使人们当在指令开始后跳一个比特时找到另一指令的好机会: 
1:add 
01:mul 
001:sub 
0001:div 
如上,使用一元编码使四个指令已被分配操作码。在该示例中,如果解码 在除指令(div)的第二比特开始,则减指令(sub)被展示。同样,查看除指令的最后比特,减和乘(mul)指令展示加指令。 
针对涉及指令编码的自定义ISA的另一方法使用非本地语义526。使每个分发的副本具有唯一的字节代码语言建立针对攻击者的重要屏障。 
通常,对于ISA,在以下各项上没有可用的文档编制:(i)从位模式到指令的映射;(ii)指令的语义;(iii)从位模式到操作数的映射;(iv)数据结构的表示;等等。然而,这种映射或表示最终可被攻击者通过静态或动态检查学习到。为挫败攻击,自定义ISA可使用非本地语义524来确保位模式沿不同执行路径具有不同含义。 
二进制程序仅仅是“1”和“0”的序列,其由处理器赋予含义。位模式和解释之间的含义通常由ISA固定。在传统体系结构上,如果某指令的操作码由给定的位模式表示,则该模式对于每个二进制代码都是恒定的,无论其在何处出现。自定义ISA可使任何特定的位模式可变,注意,并不是所有指令位模式都需要是可变的以建立针对攻击的重要屏障。因此,非本地语义块526包括例如针对指令的操作码的可变位模式块527方法。 
在自定义ISA中,位模式仅仅可取决于先前执行的代码被分配含义。为使解释取决于先前执行的代码,取决于(完全指定的)输入,自定义ISA可允许沿不同的执行路径到达程序点。然而,这种自定义ISA仍可希望对在给定程序点处的比特的解释实施控制。为适应该可变性,自定义ISA可使解释变化变为显式而非作为一些其它事件的副效应是隐式的。因此,非本地语义块526包括位模式块528方法,例如用以基于先前的代码执行分配含义。此外,非本地语义块526链接至自定义ISA中显式的解释变化,例如用以沿不同的执行路径到达程序点。 
一种示例性方法包括通过使用指令编码重新排列解码结构从而允许沿两个或多个执行路径到达程序中的点来生成程序的不同副本,其中在该点处的位模式的被分配含义取决于到该点的执行路径。例如,这种方法可基于先前的代码执行来分配含义,其对于不同的执行路径可能不同。 
自定义ISA可旨在不限制关于获得具体解释状态中的执行环境的复杂性。换言之,这种方法可确保,如果允许在不同解释状态中从不同执行路径到达程序点,则可以相对容易地迁移到单个目标解释状态而不管该不同的解释状态是什么。 
一种具体的方法涉及重新排列结构529。例如,改变解释可能相当于仅仅是重新排列解码树。考虑先前的观察结果,自定义ISA可仅仅允许有限形式的多样化。 为此,自定义ISA可具有选定的层,子树(或其它子结构)可在该层上到处移动。这种选择是多少不同的解释是可能的与从一组可能不同的解释状态转到固定的解释有多简单之间的折衷。 
在一示例中,考虑选择树结构的第三层。假设最短的操作码是3比特,则这允许8!个解释状态,而任何解释状态可用至多8个微操作达到。这种方法可应用于一组MSIL微操作。例如,考虑以下微操作: 
Swap(UInt3 position1,UInt3 position2),其交换位置position1与position2上的节点,以及 
Set(UInt3 label,UInt3position),其交换具有label的节点(无论它在何处)与在位置position上的节点。 
在表格解释的情况下,这被实现为两级表格解释。第一级可涉及可被交换的其它表格。 
在前述示例中,微操作主要对应于MSIL指令并且操作数类型主要对应于MSIL操作数类型。使用操作数的微操作仿真占位程序使用函数调用以确保操作码编码可被正交地多样化。这种回调还传递标识从中调用该回调的自定义VM指令(例如,参见指令语义510的示例)的自变量“insNr”。这允许针对不同的自定义VM指令不同地编码操作数。注意,由于占位程序的串接,任意数量的操作数可跟随操作码。因而,操作数编码530的方法可包括这种技术。因此,可关于指令编码做出多样化操作码编码的类似方法。 
多样化取周期可被认为是“人工”形式的多样化。图11将取周期块540示为包括使用“过滤器”542的各种方法。取决于当前程序计数器(PC),基本“非自定义”取周期仅仅从自定义字节代码二进制代码获取多个比特。然而,使用一个或多个过滤器542允许提高防篡改的自定义取周期。这样的一个或多个过滤器可将二进制代码中的实际比特变换成将由VM解释的比特。 
取周期过滤器542可通过将一个或多个请求的比特与其它信息组合而增加复杂性。例如,实际请求的比特可与程序的其它部分组合543。以此方式,程序变得更加相互依赖,因为改变程序的一部分也可影响其它部分。其它过滤器方法包括将一个或多个比特与随机值(例如,从密钥得到)相组合的过滤器544和将一个或多个比特与程序计数器(PC)相组合的过滤器545以使模式匹配技术变得复杂。 
最传统的代码表示是线性字节序列。在这种方法中,程序计数器(PC)简单地指向下一要执行的字节,并且控制转移通常将要继续执行的该字节指定为相对偏移或绝对地址。这在本质上可被视为将代码表示为字节数组的结构。 
图12示出程序计数器和程序表示块550,以及包括数组553、树554、链表555和散列表556的各种结构方法。自定义ISA可将代码表示为诸如图13的分裂树1320与1330之类的分裂树。尽管代码可被表示为分裂树,但是针对自定义ISA的一种示例性方法可替换地或另外地以分裂树或其它所选结构来表示数据以增强安全性。通常,此类方法可比传统线性表示(例如,参见图13的线性方法1310)更容易地提供多样性。 
分裂树具有许多优点:它们是自平衡的,这将允许代码的自动重定位。此外,它们在任意序列的已摊销成本方面几乎是最佳的。最后,新近访问的节点往往接近树的根,这允许部分地利用在大多数可执行文件中存在的空间与时间局部性。 
因为自平衡性质,代码片段可位于存储器中的许多不同位置,这取决于引导至某代码片段的执行路径。代码片段可到处移动,只要有方法引用到它们以便进行控制流转移,从而当控制转移到它们时它们可被检索。一种示例性结构方法使用分裂树中的节点的密钥,其中控制转移指定控制需要被转移到的节点的密钥。在这种示例中,要求控制流的目标是节点(即,不能容易地跳到包含在节点内的代码的中间)。在实践中,这意味着执行针对每个基本块启动新的节点。可通过使所有控制流变为显式来处理向下通过的路径。在这一示例中,所有控制流目标可被指定为包含目标代码的节点的密钥。此外,节点中的代码的大小可以是常数。再者,如果节点太小而不能包含整个基本块,则它可溢出到另一节点并在那里继续执行。 
图13示出将分裂树1320、1330用于阶乘函数“Fac”的给定线性方法1310的示例性方法。例如,当函数“Fac”第一次被调用时,具有密钥1的节点将被引用并渗滤到根,如第(2)部分所示。在该示例中另一值得注意的事情是,调用不再需要指定函数签名,因为该代码将不会经受验证。 
如果单纯地实现这种技术,则只有指针将到处移动,而实际代码将保持在堆上的同一位置。为使此进一步复杂化,节点的(原语类型的)实际内容的显式交换可以发生,或者,新的代码缓冲器的分配可与将代码缓冲器复制到所分配的空间一起发生,而这可能利用再加密和/或利用不同的无用信息填充。 
再次参考图7的框架特性500,示例性方法可应用于VM实现560。一些方法在图12中示出。对于给定的内部实现,评估栈并不是在ISA的基础上确定的(例 如,考虑组件505)。在这种示例中,用于微操作的仿真占位程序可仅仅依赖于支持诸如“出栈”和“入栈”之类的多个操作的接口。栈数据结构562的内部实现的示例性方法经由例如数组、链表等引入独立的多样性。一种示例性方法可任选地提供此类接口的许多不同实现。 
另一方法旨在多样化VM生成564。例如,一旦上述指定形式的多样化的参数被完全指定,示例性后端进程就可将来自各个位置的代码片断与一些自动生成的代码一起组合以便为自定义VM的实现汇编托管C#表示。或者,示例性后端进程可直接输出dll。 
另一示例性方法涉及多样化dll 566,例如通过使用来自诸如软件优化、软件模糊、(基于非虚拟化的方法来)软件多样化等的各种域的现有代码变换的可随机化版本来进行多样化。 
尽管本文讨论的各种示例性技术通常引入一些开销,但是其中涉及数字权限管理、敏感信息(例如,政府、所有权等)、许可证等,因而可以容忍这种开销,只要经由多样化引入增强的安全性即可。在此类实例中,多样化技术可被应用于典型目标区域而不被应用于需要一定程度的同时或“实时”执行的运行时特征。例如,多样化可被应用于与数字权限管理相关联的代码而不被应用于在执行之前需要某种形式的数字权限许可的相关联的代码。 
虚拟化为多样性和防篡改两者开辟了广泛的可能性。控制执行环境提供重要手段使攻击者的任务复杂化。尽管各个示例涉及基于虚拟化概念的软件保护的特定框架,但是也标识了其中以相当独立的方式引入多样性和/或防篡改特征的各种方法。可使用模块化开发和/或部署。 
图15示出可用于实现各种示例性组件且用于形成示例性系统的示例性计算设备1500。例如,图1的系统的服务器和客户机可包括设备1500的各种特征。 
在一个非常基本的配置中,计算设备1500通常包括至少一个处理单元1502和系统存储器1504。取决于计算设备的确切配置和类型,系统存储器1504可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。系统存储器1504通常包括操作系统1505、一个或多个程序模块806,并且可以包括程序数据1507。操作系统1506包括基于组件的框架1520,该框架1520支持组件(包括属性和事件)、对象、继承、多态性、反射,并且提供面向对象的基于组件的应用程序编程接口(API),比如由华盛顿州雷蒙德市的微软公司制造的.NETTM框架。操作系统1505还包括示例性框架1600,例如,但不限于,具有 自定义ISA和/或自定义VM的示例性框架。此外,计算设备1500可包括用于生成自定义ISA和/或自定义VM的软件模块。再者,计算设备1500可包括用于测试自定义ISA和/或自定义VM的软件模块。计算设备1500可包括用于生成自定义代码和/或自定义VM以至少部分地执行自定义代码的软件模块。设备1500具有由虚线1508划定界线的非常基本的配置。再一次,终端可具有较少的组件但是将与可具有这种基本配置的计算设备交互。 
计算设备1500还可具有附加特征或功能。例如,计算设备1500还可包括附加数据存储设备(可移动和/或不可移动),诸如,例如磁盘、光盘或磁带。这样的附加存储在图15中由可移动存储1509和不可移动存储1510示出。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器1504、可移动存储1509和不可移动存储1510都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算设备1500访问的任何其它介质。任何这样的计算机存储介质都可以是设备1500的一部分。计算设备1500也可以具有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等输入设备1512。也可以包括诸如显示器、扬声器、打印机等的输出设备1514。这些设备在本领域是公知的,因此不必在此详细讨论。 
计算设备1500也可以包含允许该设备与其它计算设备1518诸如经网络通信的通信连接1516(例如,考虑前述web或因特网103)。通信连接1516是通信介质的一个示例。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传递介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线缆连接之类的有线介质,以及诸如声学、RF、红外线和其它无线介质之类的无线介质。如此处所使用的术语计算机可读介质包括存储介质和通信介质两者。 
尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。 

Claims (20)

1.一种计算机可实现的用于增强软件安全性的方法,包括:
提供包括用以生成程序的不同副本的特征的指令集体系结构(200);
使用所述指令集体系结构来生成程序(150)的不同副本;以及
提供虚拟机(170)以执行所述程序的不同副本之一。
2.如权利要求1所述的方法,其特征在于,所述提供虚拟机包括生成虚拟机动态链接库(172)。
3.如权利要求1所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括指令语义(510),所述指令语义通过使用谓词寄存器(513)来提供条件执行(512)。
4.如权利要求1所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括具有有限指令集(514)的指令语义(510)。
5.如权利要求4所述的方法,其特征在于,所述有限指令集不包括“无操作”指令(515)。
6.如权利要求4所述的方法,其特征在于,所述有限指令集具有操作数的有限表示(516)。
7.如权利要求4所述的方法,其特征在于,所述有限指令集限制至少某些条件分支(517)。
8.如权利要求1所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括针对可变指令大小(522)的指令编码(520)。
9.如权利要求8所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括使用一元编码来分配操作码以引入物理重叠(524)的指令编码。
10.如权利要求8所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括用于引入指令的操作码的可变位模式(527)的指令编码。
11.如权利要求8所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括基于先前的操作码执行来分配位模式(528)的指令编码。
12.如权利要求8所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括用于重新排列解码结构(529)从而允许沿两个或多个执行路径到达所述程序中的点的指令编码,其中所述点处的位模式的被分配的含义取决于到所述点的执行路径。
13.如权利要求1所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括一个或多个取周期过滤器(542)。
14.如权利要求13所述的方法,其特征在于,所述一个或多个取周期过滤器(542)包括将信息添加到代码的一个或多个所请求的比特(543)的过滤器。
15.如权利要求14所述的方法,其特征在于,所述信息包括随机值(544)。
16.如权利要求14所述的方法,其特征在于,所述信息包括程序计数器值(545)或至少部分地基于程序计数器值的信息。
17.如权利要求1所述的方法,其特征在于,所述用以生成程序的不同副本的特征包括从由分裂树、链表和散列表组成的组(550)中选择的至少一个结构来表示所述程序。
18.一种计算机可实现的用于增强软件安全性的方法,包括:
提供以虚拟机(110)为目标的代码;以及
通过将来自各个位置的所述代码的片段与某些自动生成的代码相组合以汇编用于实现虚拟机的托管代码表示或输出多样化的虚拟机的动态链接库(170)来生成多样化的虚拟机。
19.一种用于增强软件安全性(105)的方法,所述方法包括:
提供包括指令集的基本虚拟化层;以及
提供一个或多个附加虚拟化层,其中所述一个或多个附加虚拟化层中的至少一个使所述基本虚拟化层的指令集虚拟化。
20.如权利要求19所述的方法,其特征在于,还包括:
生成程序代码(150)的个性化副本;以及
提供用于执行所述程序代码的个性化副本的虚拟机(170),其中所述虚拟机可改变运行时的程序操作。
CN2007800396079A 2006-10-27 2007-10-16 用于增强软件安全性的方法 Active CN101529436B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/553,841 2006-10-27
US11/553,841 US8584109B2 (en) 2006-10-27 2006-10-27 Virtualization for diversified tamper resistance
PCT/US2007/081485 WO2008115279A2 (en) 2006-10-27 2007-10-16 Virtualization for diversified tamper resistance

Publications (2)

Publication Number Publication Date
CN101529436A CN101529436A (zh) 2009-09-09
CN101529436B true CN101529436B (zh) 2012-12-12

Family

ID=39495793

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007800396079A Active CN101529436B (zh) 2006-10-27 2007-10-16 用于增强软件安全性的方法

Country Status (16)

Country Link
US (2) US8584109B2 (zh)
EP (1) EP2076863B1 (zh)
JP (1) JP5302202B2 (zh)
KR (1) KR101440646B1 (zh)
CN (1) CN101529436B (zh)
AU (1) AU2007349213B2 (zh)
BR (1) BRPI0716471A2 (zh)
CA (1) CA2662558C (zh)
ES (1) ES2675371T3 (zh)
IL (1) IL197361A0 (zh)
MX (1) MX2009003342A (zh)
MY (1) MY151697A (zh)
NO (1) NO344529B1 (zh)
RU (1) RU2458394C2 (zh)
TW (1) TWI431500B (zh)
WO (1) WO2008115279A2 (zh)

Families Citing this family (117)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8584109B2 (en) 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US20080184019A1 (en) * 2007-01-30 2008-07-31 International Business Machines Corporation Method for embedding short rare code sequences in hot code without branch-arounds
KR100922862B1 (ko) * 2007-11-14 2009-10-20 성균관대학교산학협력단 명령어의 부호화를 통한 시스템 보안방법
EP2240857A4 (en) * 2007-12-21 2013-12-25 Univ Virginia Patent Found SYSTEM, METHOD AND COMPUTER PROGRAM FOR PROTECTING SOFTWARE THROUGH ANTI-FALSIFICATION AND OBSCURING TRANSFORMATIONS
US8819647B2 (en) * 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8261254B2 (en) * 2008-03-31 2012-09-04 Symantec Corporation Dynamic insertion and removal of virtual software sub-layers
JP5151722B2 (ja) * 2008-06-20 2013-02-27 ソニー株式会社 データ処理装置およびその方法、並びにプログラム
US8434073B1 (en) * 2008-11-03 2013-04-30 Symantec Corporation Systems and methods for preventing exploitation of byte sequences that violate compiler-generated alignment
US8387031B2 (en) * 2009-01-23 2013-02-26 International Business Machines Corporation Providing code improvements for nested virtual machines
KR100985074B1 (ko) * 2009-02-05 2010-10-04 주식회사 안철수연구소 선별적 가상화를 이용한 악성 코드 사전 차단 장치, 방법 및 그 방법을 실행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
US20110099439A1 (en) * 2009-10-23 2011-04-28 Infineon Technologies Ag Automatic diverse software generation for use in high integrity systems
US20110208948A1 (en) * 2010-02-23 2011-08-25 Infineon Technologies Ag Reading to and writing from peripherals with temporally separated redundant processor execution
WO2011116446A1 (en) * 2010-03-24 2011-09-29 Irdeto Canada Corporation System and method for random algorithm selection to dynamically conceal the operation of software
JP5549810B2 (ja) * 2010-06-25 2014-07-16 日本電気株式会社 プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム
WO2012012861A1 (en) * 2010-07-29 2012-02-02 Irdeto Canada Corporation System and method for efficiently deploying massively diverse program instances to resist differential attacks
CN101944042A (zh) * 2010-09-01 2011-01-12 深圳市拜特科技股份有限公司 一种Java程序的运行方法及电子终端
US9047101B2 (en) * 2010-12-06 2015-06-02 Google Inc. Method for compiling an intermediate code of an application
EP2482184A1 (en) * 2011-02-01 2012-08-01 Irdeto B.V. Adaptive obfuscated virtual machine
CN102231180B (zh) * 2011-07-30 2014-05-28 张鹏 处理器指令编码可重定义的方法
RU2620712C2 (ru) * 2012-01-09 2017-05-29 Конинклейке Филипс Н.В. Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US8533836B2 (en) * 2012-01-13 2013-09-10 Accessdata Group, Llc Identifying software execution behavior
US8959577B2 (en) 2012-04-13 2015-02-17 Cisco Technology, Inc. Automatic curation and modification of virtualized computer programs
US10095847B2 (en) * 2012-05-25 2018-10-09 Koninklijke Philips N.V. Method, system and device for protection against reverse engineering and/or tampering with programs
US9436474B2 (en) 2012-07-27 2016-09-06 Microsoft Technology Licensing, Llc Lock free streaming of executable code data
CN102855139B (zh) * 2012-08-10 2015-04-22 浙江省电力公司电力科学研究院 一种反编译数据流分析中的寄存器清除方法及系统
CN103685399B (zh) 2012-09-17 2018-03-23 腾讯科技(深圳)有限公司 一种登录类Unix虚拟容器的方法、装置和系统
US9336370B2 (en) * 2012-12-06 2016-05-10 Apple Inc. Method and apparatus for dynamic obfuscation of static data
US9560014B2 (en) * 2013-01-23 2017-01-31 Mcafee, Inc. System and method for an endpoint hardware assisted network firewall in a security environment
US9116712B2 (en) * 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
KR101500714B1 (ko) * 2013-05-15 2015-03-10 주식회사 코스콤 시스템의 지연 방지 방법 및 그 시스템
KR101500512B1 (ko) 2013-05-15 2015-03-18 소프트캠프(주) 데이터 프로세싱 시스템 보안 장치와 보안방법
WO2014210277A1 (en) 2013-06-28 2014-12-31 The Trustees Of Columbia University In The City Of New York Diversified instruction set processing to enhance security
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
US9223995B1 (en) * 2013-12-10 2015-12-29 Progress Software Corporation Semantic obfuscation of data in real time
CN106663025A (zh) * 2014-03-31 2017-05-10 耶德托公司 用于混淆虚拟机上的应用程序的执行的方法、装置以及计算机可读介质
RU2568282C2 (ru) * 2014-04-18 2015-11-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обеспечения отказоустойчивости антивирусной защиты, реализуемой в виртуальной среде
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9715402B2 (en) 2014-09-30 2017-07-25 Amazon Technologies, Inc. Dynamic code deployment and versioning
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code
US9830193B1 (en) 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
US10048974B1 (en) 2014-09-30 2018-08-14 Amazon Technologies, Inc. Message-based computation request scheduling
US9537788B2 (en) 2014-12-05 2017-01-03 Amazon Technologies, Inc. Automatic determination of resource sizing
US9733967B2 (en) 2015-02-04 2017-08-15 Amazon Technologies, Inc. Security protocols for low latency execution of program code
US9588790B1 (en) 2015-02-04 2017-03-07 Amazon Technologies, Inc. Stateful virtual compute system
CN104680042B (zh) * 2015-03-10 2017-10-24 北京深思数盾科技股份有限公司 一种虚拟机性能分析的方法及系统
US9930103B2 (en) 2015-04-08 2018-03-27 Amazon Technologies, Inc. Endpoint management system providing an application programming interface proxy service
US9785476B2 (en) 2015-04-08 2017-10-10 Amazon Technologies, Inc. Endpoint management system and virtual compute system
CN105046117A (zh) * 2015-06-30 2015-11-11 西北大学 一种具有指令集随机化的代码虚拟化软件保护系统
CN105045605B (zh) * 2015-08-28 2019-05-24 成都卫士通信息产业股份有限公司 一种将dll注入目标进程的方法和系统
US9811434B1 (en) 2015-12-16 2017-11-07 Amazon Technologies, Inc. Predictive management of on-demand code execution
US10754701B1 (en) 2015-12-16 2020-08-25 Amazon Technologies, Inc. Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions
US10067801B1 (en) 2015-12-21 2018-09-04 Amazon Technologies, Inc. Acquisition and maintenance of compute capacity
US9910713B2 (en) 2015-12-21 2018-03-06 Amazon Technologies, Inc. Code execution request routing
CN106960141A (zh) * 2016-01-08 2017-07-18 阿里巴巴集团控股有限公司 虚拟机指令的编码、解码方法及装置、虚拟机保护系统
US10891145B2 (en) 2016-03-30 2021-01-12 Amazon Technologies, Inc. Processing pre-existing data sets at an on demand code execution environment
US11132213B1 (en) 2016-03-30 2021-09-28 Amazon Technologies, Inc. Dependency-based process of pre-existing data sets at an on demand code execution environment
EP3246837A1 (en) * 2016-05-19 2017-11-22 SFNT Germany GmbH Method to generate special purpose virtual machines
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10296331B2 (en) * 2016-07-12 2019-05-21 International Business Machines Corporation Log-based software porting
US10162605B2 (en) * 2016-07-20 2018-12-25 Microsoft Technology Licensing, Llc Code snippet content recommendation to define an object literal
EP3437011B1 (en) 2016-07-28 2020-12-16 Hewlett-Packard Development Company, L.P. Code package variants
US10884787B1 (en) 2016-09-23 2021-01-05 Amazon Technologies, Inc. Execution guarantees in an on-demand network code execution system
US10325148B2 (en) * 2016-09-30 2019-06-18 Wipro Limited Method and a system for optical character recognition
US11119813B1 (en) 2016-09-30 2021-09-14 Amazon Technologies, Inc. Mapreduce implementation using an on-demand network code execution system
US11017125B2 (en) * 2016-12-13 2021-05-25 University Of Florida Research Foundation, Incorporated Uniquified FPGA virtualization approach to hardware security
US10303861B2 (en) * 2017-01-26 2019-05-28 Immunant, Inc. Software diversification in external contexts
RU2638000C1 (ru) * 2017-02-08 2017-12-08 Акционерное общество "Лаборатория Касперского" Способ контроля системы исполнения программируемого логического контроллера
US20200050469A1 (en) * 2017-02-21 2020-02-13 Privacy Software Solutions Ltd. A method and system for creating multi mobilephone environments and numbers on a single handset with single sim-card
US10564946B1 (en) 2017-12-13 2020-02-18 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10831898B1 (en) 2018-02-05 2020-11-10 Amazon Technologies, Inc. Detecting privilege escalations in code including cross-service calls
US10733085B1 (en) 2018-02-05 2020-08-04 Amazon Technologies, Inc. Detecting impedance mismatches due to cross-service calls
US10725752B1 (en) 2018-02-13 2020-07-28 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10776091B1 (en) 2018-02-26 2020-09-15 Amazon Technologies, Inc. Logging endpoint in an on-demand code execution system
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US10649749B1 (en) 2018-06-26 2020-05-12 Amazon Technologies, Inc. Cross-environment application of tracing information for improved code execution
US11146569B1 (en) 2018-06-28 2021-10-12 Amazon Technologies, Inc. Escalation-resistant secure network services using request-scoped authentication information
US10949237B2 (en) 2018-06-29 2021-03-16 Amazon Technologies, Inc. Operating system customization in an on-demand network code execution system
US11099870B1 (en) 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
US11099917B2 (en) 2018-09-27 2021-08-24 Amazon Technologies, Inc. Efficient state maintenance for execution environments in an on-demand code execution system
US11243953B2 (en) 2018-09-27 2022-02-08 Amazon Technologies, Inc. Mapreduce implementation in an on-demand network code execution system and stream data processing system
US11836246B2 (en) 2018-11-19 2023-12-05 Secure Micro Ltd Computer implemented method
US10884812B2 (en) 2018-12-13 2021-01-05 Amazon Technologies, Inc. Performance-based hardware emulation in an on-demand network code execution system
US11010188B1 (en) 2019-02-05 2021-05-18 Amazon Technologies, Inc. Simulated data object storage using on-demand computation of data objects
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11115404B2 (en) 2019-06-28 2021-09-07 Amazon Technologies, Inc. Facilitating service connections in serverless code executions
US11190609B2 (en) 2019-06-28 2021-11-30 Amazon Technologies, Inc. Connection pooling for scalable network services
US11159528B2 (en) 2019-06-28 2021-10-26 Amazon Technologies, Inc. Authentication to network-services using hosted authentication information
CN110430209B (zh) * 2019-08-13 2021-12-14 中科天御(苏州)科技有限公司 一种基于动态多样化的工控系统安全防御方法及装置
US11023416B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. Data access control system for object storage service based on owner-defined code
US11250007B1 (en) 2019-09-27 2022-02-15 Amazon Technologies, Inc. On-demand execution of object combination code in output path of object storage service
US11263220B2 (en) 2019-09-27 2022-03-01 Amazon Technologies, Inc. On-demand execution of object transformation code in output path of object storage service
US11656892B1 (en) 2019-09-27 2023-05-23 Amazon Technologies, Inc. Sequential execution of user-submitted code and native functions
US10908927B1 (en) 2019-09-27 2021-02-02 Amazon Technologies, Inc. On-demand execution of object filter code in output path of object storage service
US11360948B2 (en) 2019-09-27 2022-06-14 Amazon Technologies, Inc. Inserting owner-specified data processing pipelines into input/output path of object storage service
US10996961B2 (en) 2019-09-27 2021-05-04 Amazon Technologies, Inc. On-demand indexing of data in input path of object storage service
US11023311B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. On-demand code execution in input path of data uploaded to storage service in multiple data portions
US11550944B2 (en) 2019-09-27 2023-01-10 Amazon Technologies, Inc. Code execution environment customization system for object storage service
US11106477B2 (en) 2019-09-27 2021-08-31 Amazon Technologies, Inc. Execution of owner-specified code during input/output path to object storage service
US11394761B1 (en) 2019-09-27 2022-07-19 Amazon Technologies, Inc. Execution of user-submitted code on a stream of data
US11416628B2 (en) 2019-09-27 2022-08-16 Amazon Technologies, Inc. User-specific data manipulation system for object storage service based on user-submitted code
US11055112B2 (en) 2019-09-27 2021-07-06 Amazon Technologies, Inc. Inserting executions of owner-specified code into input/output path of object storage service
US11386230B2 (en) 2019-09-27 2022-07-12 Amazon Technologies, Inc. On-demand code obfuscation of data in input path of object storage service
US10942795B1 (en) 2019-11-27 2021-03-09 Amazon Technologies, Inc. Serverless call distribution to utilize reserved capacity without inhibiting scaling
US11119826B2 (en) 2019-11-27 2021-09-14 Amazon Technologies, Inc. Serverless call distribution to implement spillover while avoiding cold starts
CN113031930B (zh) * 2019-12-24 2022-07-05 武汉斗鱼鱼乐网络科技有限公司 一种控制流平坦化的源代码混淆生成方法及装置
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
US11188391B1 (en) 2020-03-11 2021-11-30 Amazon Technologies, Inc. Allocating resources to on-demand code executions under scarcity conditions
CN111314377B (zh) * 2020-03-17 2023-04-07 中科天御(苏州)科技有限公司 一种工控终端动态多样化云安全方法及系统
US11775640B1 (en) 2020-03-30 2023-10-03 Amazon Technologies, Inc. Resource utilization-based malicious task detection in an on-demand code execution system
US11550713B1 (en) 2020-11-25 2023-01-10 Amazon Technologies, Inc. Garbage collection in distributed systems using life cycled storage roots
US11593270B1 (en) 2020-11-25 2023-02-28 Amazon Technologies, Inc. Fast distributed caching using erasure coded object parts
KR102305845B1 (ko) 2020-12-21 2021-09-29 쿠팡 주식회사 코드의 검증을 위한 전자 장치 및 그 방법
US11388210B1 (en) 2021-06-30 2022-07-12 Amazon Technologies, Inc. Streaming analytics using a serverless compute system
CN114707124B (zh) * 2022-03-22 2022-11-29 广东技术师范大学 基于代码虚拟化的.net平台代码保护方法和系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1714338A (zh) * 2002-11-20 2005-12-28 皇家飞利浦电子股份有限公司 带有复制寄存器文件的vliw处理器
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US20060136867A1 (en) * 2004-12-17 2006-06-22 Manfred Schneider Code diversification

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
JP3816961B2 (ja) * 1997-10-02 2006-08-30 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ バーチャルマシン命令を処理するためのデータ処理装置
DE69836902T2 (de) * 1997-10-02 2007-10-18 Koninklijke Philips Electronics N.V. Auf variable instruktionen eingestellter computer
US6643775B1 (en) * 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
US6092202A (en) * 1998-05-22 2000-07-18 N*Able Technologies, Inc. Method and system for secure transactions in a computer system
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6832367B1 (en) * 2000-03-06 2004-12-14 International Business Machines Corporation Method and system for recording and replaying the execution of distributed java programs
US7093239B1 (en) * 2000-07-14 2006-08-15 Internet Security Systems, Inc. Computer immune system and method for detecting unwanted code in a computer system
US20030023960A1 (en) * 2001-07-25 2003-01-30 Shoab Khan Microprocessor instruction format using combination opcodes and destination prefixes
US7613930B2 (en) * 2001-01-19 2009-11-03 Trustware International Limited Method for protecting computer programs and data from hostile code
US7065755B2 (en) * 2001-03-15 2006-06-20 Sun Microsystems, Inc. Method and apparatus for removing class initialization barriers from shared compiled methods
US7543288B2 (en) * 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US7320075B2 (en) * 2001-11-20 2008-01-15 Safenet, Inc. Software protection method utilizing hidden application code in a protection dynamic link library object
US20030135719A1 (en) * 2002-01-14 2003-07-17 International Business Machines Corporation Method and system using hardware assistance for tracing instruction disposition information
US8843903B1 (en) * 2003-06-11 2014-09-23 Symantec Corporation Process tracking application layered system
US7150003B2 (en) * 2002-11-25 2006-12-12 Matsushita Electric Industrial Co., Ltd. Class coalescence for obfuscation of object-oriented software
US20040117532A1 (en) * 2002-12-11 2004-06-17 Bennett Steven M. Mechanism for controlling external interrupts in a virtual machine system
US7162711B2 (en) * 2002-12-12 2007-01-09 Sun Microsystems, Inc. Method of automatically virtualizing core native libraries of a virtual machine
KR100568228B1 (ko) 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7260815B1 (en) * 2003-06-30 2007-08-21 Vmware, Inc. Method and apparatus for managing registers in a binary translator
US9020801B2 (en) * 2003-08-11 2015-04-28 Scalemp Inc. Cluster-based operating system-agnostic virtual computing system
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
US20050066324A1 (en) * 2003-09-22 2005-03-24 Microsoft Corporation Method and system for distributing and installing software
US8220058B2 (en) 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7114055B1 (en) * 2003-09-29 2006-09-26 Xilinx, Inc. Reduced instruction set computer architecture with duplication of bit values from an immediate field of an instruction multiple times in a data word
US7376949B2 (en) * 2003-10-01 2008-05-20 Hewlett-Packard Development Company, L.P. Resource allocation and protection in a multi-virtual environment
US20050091658A1 (en) 2003-10-24 2005-04-28 Microsoft Corporation Operating system resource protection
US7421689B2 (en) * 2003-10-28 2008-09-02 Hewlett-Packard Development Company, L.P. Processor-architecture for facilitating a virtual machine monitor
US20050108440A1 (en) * 2003-11-19 2005-05-19 Intel Corporation Method and system for coalescing input output accesses to a virtual device
US7516331B2 (en) 2003-11-26 2009-04-07 International Business Machines Corporation Tamper-resistant trusted java virtual machine and method of using the same
US20050177826A1 (en) * 2004-02-05 2005-08-11 Miller James S. Versioning support in object-oriented programming languages and tools
JP3970856B2 (ja) 2004-03-16 2007-09-05 Kddi株式会社 プログラム難読化装置、プログラム配布システム、コンピュータプログラム
US20050216920A1 (en) * 2004-03-24 2005-09-29 Vijay Tewari Use of a virtual machine to emulate a hardware device
US7577997B2 (en) 2004-06-12 2009-08-18 Microsoft Corporation Image verification
US7590867B2 (en) * 2004-06-24 2009-09-15 Intel Corporation Method and apparatus for providing secure virtualization of a trusted platform module
US8271976B2 (en) * 2004-06-30 2012-09-18 Microsoft Corporation Systems and methods for initializing multiple virtual processors within a single virtual machine
EP1669864B1 (en) * 2004-12-03 2010-06-02 STMicroelectronics Srl A process for managing virtual machines in a physical processing machine, corresponding processor system and computer program product therefor
US7472381B2 (en) * 2004-12-07 2008-12-30 Roaming Messenger, Inc. Method of and instruction set for executing operations on a device
US7409719B2 (en) * 2004-12-21 2008-08-05 Microsoft Corporation Computer security management, such as in a virtual machine or hardened operating system
US8370819B2 (en) * 2005-03-25 2013-02-05 Microsoft Corporation Mechanism to store information describing a virtual machine in a virtual disk image
JP4806402B2 (ja) * 2005-04-21 2011-11-02 パナソニック株式会社 プログラム難読化装置及び難読化方法
US20070022275A1 (en) * 2005-07-25 2007-01-25 Mistletoe Technologies, Inc. Processor cluster implementing conditional instruction skip
US7581085B1 (en) * 2005-09-08 2009-08-25 Parallels Software International, Inc. Fast stub and frame technology for virtual machine optimization
US8429630B2 (en) * 2005-09-15 2013-04-23 Ca, Inc. Globally distributed utility computing cloud
US8104033B2 (en) * 2005-09-30 2012-01-24 Computer Associates Think, Inc. Managing virtual machines based on business priorty
US7882499B2 (en) * 2005-10-24 2011-02-01 Microsoft Corporation Caching dynamically compiled code to storage
US8417796B2 (en) * 2006-01-17 2013-04-09 Leostream Corporation System and method for transferring a computing environment between computers of dissimilar configurations
US8296742B2 (en) * 2006-10-10 2012-10-23 Microsoft Corporation Automatic native generation
US8584109B2 (en) 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8078649B2 (en) * 2008-04-07 2011-12-13 Installfree, Inc. Method and system for centrally deploying and managing virtual software applications

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
CN1714338A (zh) * 2002-11-20 2005-12-28 皇家飞利浦电子股份有限公司 带有复制寄存器文件的vliw处理器
US20060136867A1 (en) * 2004-12-17 2006-06-22 Manfred Schneider Code diversification

Also Published As

Publication number Publication date
TW200832179A (en) 2008-08-01
IL197361A0 (en) 2009-12-24
NO344529B1 (no) 2020-01-27
US20140068580A1 (en) 2014-03-06
KR101440646B1 (ko) 2014-09-22
NO20091281L (no) 2009-05-22
RU2009115656A (ru) 2010-10-27
MX2009003342A (es) 2009-05-12
WO2008115279A3 (en) 2009-02-19
EP2076863A4 (en) 2013-09-04
US9459893B2 (en) 2016-10-04
CA2662558A1 (en) 2008-09-25
JP5302202B2 (ja) 2013-10-02
KR20090082176A (ko) 2009-07-29
CN101529436A (zh) 2009-09-09
JP2010508583A (ja) 2010-03-18
WO2008115279A2 (en) 2008-09-25
RU2458394C2 (ru) 2012-08-10
US8584109B2 (en) 2013-11-12
US20080127125A1 (en) 2008-05-29
MY151697A (en) 2014-06-30
CA2662558C (en) 2015-12-01
ES2675371T3 (es) 2018-07-10
EP2076863B1 (en) 2018-05-02
AU2007349213B2 (en) 2011-10-06
EP2076863A2 (en) 2009-07-08
AU2007349213A1 (en) 2008-09-25
TWI431500B (zh) 2014-03-21
BRPI0716471A2 (pt) 2014-03-18

Similar Documents

Publication Publication Date Title
CN101529436B (zh) 用于增强软件安全性的方法
Suiche Porosity: A decompiler for blockchain-based smart contracts bytecode
Theisen Programming languages in chemistry: a review of HTML5/JavaScript
Schoolderman Verifying branch-free assembly code in Why3
Sletten WebAssembly: The Definitive Guide
Davis Modern programming made easy: using Java, Scala, Groovy, and JavaScript
Kurniawan Java for Android
Géczi et al. Automatic translation of assembly shellcodes to printable byte codes
Puder A cross-language framework for developing ajax applications
Abyaneh et al. You can program what you want but you cannot compute what you want
Bancila et al. Learn C# Programming: A guide to building a solid foundation in C# language for writing efficient programs
Kok Hands-On Blockchain for Python Developers: Gain blockchain programming skills to build decentralized applications using Python
Osborne The postroom computer
Teixeira EWVM-an Educational Web Virtual Machine
Liang et al. Programming at different levels: a teaching module for undergraduate computer architecture course
Gagniuc An Introduction to Programming Languages: Simultaneous Learning in Multiple Coding Environments
Tewari Application Of High Level Programming Language (Visual Basic): A Review
Wen Browserify: Empowering Consistent and Efficient Application Deployment across Heterogeneous Mobile Devices
Wendland WebAssembly as a Multi-Language Platform
Dima Developing JavaScript applications in Eiffel
Santamarıa JAVA FOR THE STUDY OF EVOLUTION VOLUME XVII version 2 EASY JAVA GENETIC PROGRAMMING
Pucher Identification of Obfuscated Function Clones in Binaries using Machine Learning
Juneau et al. Getting Started with Java 9
Drechsler et al. The Yoix® scripting language: a different way of writing Java™ applications
Hetland et al. Extending Python

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150507

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150507

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.