CN101300584B - 防止对软件或运行时数据的未经授权的修改的方法 - Google Patents

防止对软件或运行时数据的未经授权的修改的方法 Download PDF

Info

Publication number
CN101300584B
CN101300584B CN200680029302.5A CN200680029302A CN101300584B CN 101300584 B CN101300584 B CN 101300584B CN 200680029302 A CN200680029302 A CN 200680029302A CN 101300584 B CN101300584 B CN 101300584B
Authority
CN
China
Prior art keywords
code
software
interpreter
instruction
converter
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.)
Expired - Fee Related
Application number
CN200680029302.5A
Other languages
English (en)
Other versions
CN101300584A (zh
Inventor
K·艾斯波夫
B·艾斯波夫
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=36648619&utm_source=***_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=CN101300584(B) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101300584A publication Critical patent/CN101300584A/zh
Application granted granted Critical
Publication of CN101300584B publication Critical patent/CN101300584B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Abstract

一种用于防止对软件的未经授权的修改或对运行时数据的未经授权的修改的方法。根据该方法,提供能够将软件转换成一般化的机器代码的转换器。该转换器被设计成通过使用造成数据损失的转换处理使得它不能被逆向工程。还提供一种解释器,其处理方法的知识保持受限制。该解释器将一般化的机器代码解释成专门的机器代码,同时在解释过程中重新构造所损失的数据。

Description

防止对软件或运行时数据的未经授权的修改的方法
发明领域
本发明涉及计算机软件保护领域。更为具体地,本发明涉及保护计算机软件免遭逆向工程、未经授权的修改以及运行时数据截取。 
发明背景
近年来已经作出了许多努力来保护原始计算机软件不被复制和大量散布。现今所用的方法之一涉及要求在安装或运行时期间由用户手动输入许可证或密钥序列。防止软件的重复使用的另一个流行的方法涉及安装后对软件的激活。激活过程要求软件读取计算机中的硬件元件的ID序列号,例如处理器的序列号或图形卡的序列号。一旦硬件ID序列号被读取,它们就可与软件ID号一起通过因特网发送给厂商。厂商存储ID号,并通过因特网将许可证代码发送给程序。可以把软件编程为没有来自厂商的经验证的许可证代码就停止正常的功能。在此情况下,如果软件被非法地复制并安装到一不同计算机上,由于软件许可证已经与首次安装的硬件相关联,且许可证代码仅可被发送到具有与厂商所存储的相同硬件配置文件的计算机,因此,软件不能被激活。然而,这些方法不能防止未经授权的一方对软件代码进行逆向工程,修改软件代码来除去这些软件保护工具,以及大量散布修改后的软件。 
现今有许多工具用于软件逆向工程,像hexadecimal dumper,它以十六进制格式打印或显示软件代码的二进制数。通过了解代表这些指令的位模式以及指令长度,想要对软件进行逆向工程的人就能够识别代码的某些部分来看它们如何工作,然后对它们进行修改。用于逆向工程和代码修改的另一种常用工具是反汇编程序。反汇编程序读取二进制代码,然后以文本格式显示每个可执行指令。同样,由于反汇编程序不能告知可执行指令和代码所使用的数据之间的差异,可使用调试器。调试器允许反汇编程序避免对代码的数据部分进行反汇编。例如,如果反汇编程序读取到命令“ADD_INT8”,表示:“加接下去的 8位所代表的数”,调试器将该接下去的8位作为命令“ADD_INT8”的数据部分来处理,下一组位被按照新的命令来处理。然而,这些工具依赖于以下公知常识:指令代码是如何被构建的、信息位于存储器中的何处、哪些寄存器被使用、如何使用堆栈(用于存储需要被处理的请求的数据缓冲器,采用下推表的形式)。 
当涉及基于解释器的编程语言时,与基于编译器的编程语言行程对比,逆向工程以及由未经授权用户进行的修改的问题更为明显。基于编译器的编程语言的描述可见图1,图1一般地示出了诸如C或Pascal之类的基于编译器的编程语言的现有技术软件处理。当编程者使用编辑器等以高级语言编写程序时,他的代码指令10或源代码不能被计算机硬件直接读取。因此,源代码10必须经过称为编译器11进行的编译的翻译处理。编译器11将源代码10编译成计算机硬件能够读取并执行的专门的机器代码(MC)12。由于MC 12被专门编译到特定平台,因此,它不能从一个平台转移到另一个平台。在基于编译器的编程语言中,对每个平***立地编译源代码10,为每个平台产生不同的专门MC 12。不同平台的例子可以是具有WindowsXP和Mac
Figure 2006800293025_1
OS X的基于Intel 的PC。 
基于解释器的编程语言的描述可见图2a,图2a是流程图,一般地描述了对诸如JAVA之类的基于解释器的编程语言的现有技术软件处理。类似于基于编译器的编程语言,基于解释器的语言是使用编辑器等以高级语言编写的,下文中称为源语句20。然而,根据该方法,编译器21将高级源语句20翻译成字节代码(BC)22,它是不限于特定平台的一般化的MC。然而,为了执行BC 22,需要专门的解释器23来将BC 22翻译成专门的MC 24。专门的解释器23通常与操作***一起被安装。该方法的一个主要优点是可以对不同平台分发BC 22。一旦在特定平台上执行BC 22,专门的解释器23一次仅翻译一条BC 22指令,为计算机硬件产生专门的MC 24指令来执行。然而,由于解释器的处理方法是公知的,因此,相当容易读取、理解和修改作为解释器23的指令集的BC 22。黑客可能购买到以BC编写的代码的合法版本,破译其指令并擦除或修改BC的某些原始指令。一旦BC被修改,它就可能被大量复制和转售。 
黑客使用的另一种方法在本领域中称为“运行时数据截取”。通过在解释 器对合法程序的执行期间截取并读取数据,黑客能够在执行非法程序时模拟该过程。 
防止容易地理解和破译代码行为的一种方法使用代码加密,如US2004/0015710中所述。根据该方法,加密的代码与用于解密该代码的解密密钥一起销售。代码中的每条指令首先被解密并由解释器解释供处理器执行。然而,一旦代码被解密,黑客就可能读取解密的代码来对原始代码进行逆向工程。此外,解密过程可由用户监视来形成解密密钥。此外,一旦代码被解密,它就被无保护地加载到计算机的存储器中,并也可从中被复制。 
防止对软件代码的修改的另一种方法是将代码分割成两部分:包括代码保护的敏感部分和较不敏感部分。代码的较不敏感部分卖给用户,如以前那样准备被解释,而代码的敏感部分存储在诸如智能卡之类的硬件产品上。对代码的敏感部分的解释是在诸如智能卡读取器之类的硬件中进行的,在那里该部分不能被监视或读取。然而,在某些情况下,该额外的硬件可能是昂贵的,并且由供应商生成的代码更新的再分发是复杂的。 
用于防止对软件代码的修改的一种方法描述于Enriquillo Valdez和MotiYung的“DISSECT:Distribution for SECurity Tool”(G.I.Davida和Y.rankel(Eds.):ISC 2001,LNCS 2200,第125-143页,2001.Springer-Verlag BerlinHeidelberg 2001)中。该方法建议将代码分割成两部分:敏感部分和较不敏感部分。代码的较不敏感部分被卖给用户,如以前那样准备好被解释,而代码的敏感部分存储在安全服务器上。代码的敏感部分的解释是在安全服务器上进行的,在那里该部分不能被监视或读取。然而,该方法要求维持对指定服务器的直接联系来执行代码。 
因此,本发明的一个目的是提供一种用于防止软件逆向工程、未经授权的修改以及运行时数据截取的廉价方法。 
本发明的另一个目的是提供一种无需额外的硬件就能防止对软件的未经授权的修改的方法。 
本发明的又一个目的是提供一种方法,一方面它防止未经授权的用户进行的任何修改,另一方面它允许厂商进行修改和更新。 
本发明的其它目的和优点将随着说明的继续而变得明显。 
发明概述
本发明针对一种用于防止对软件的未经授权的修改和对运行时数据的未经授权的修改的方法。提供了一种能够使用造成数据损失的转换处理将软件转换成不能被逆向工程的一般化的机器代码的转换器、以及可由CLR编译的解释器。解释器的处理方法的知识保持受限制。一般的机器代码由解释器解释到专门的机器中。 
软件可以是诸如基于解释器的语言等高级语言(如JAVA、Visual J#、J#、C#或VB.NET,或基于编译器的语言,如C++、VB或Pascal),并可被划分使得仅软件的一部分被转换器转换并被解释器解释。 
转换期间的数据损失可以是代码结构元数据的去除,或是到相应操作数是在运行时确定的其它指令的指令转换。 
附图简述
附图中: 
图1是一般地例示出对基于编译器的编程语言的现有技术软件处理的流程图; 
图2a是一般地例示出对基于解释器的编程语言的现有技术软件处理的流程图; 
图2b是一般地例示出对基于编译器的编程语言的现有技术软件处理的流程图,主要为JAVA; 
图3是一般地例示出对诸如Visual J#之类的.NET编程语言的现有技术软件处理的流程图; 
图4是一般地例示出根据一个实施例的本发明的实现方式的流程图; 
图5是例示出本发明的一个实施例的框图; 
图6是一般地例示出根据本发明的另一个实施例的本发明的实现方式的流程图; 
图7是一般地例示出根据一个实施例的对于基于编译器的编程语言的本发明的实现方式的流程图。 
较佳实施例的详细描述
出于简要的目的,明确定义下列术语: 
平台是计算机操作***,它构建在计算机处理器的指令集上,计算机处理器是执行逻辑运算并管理计算机中的数据移动的硬件。 
机器代码(MC)是可由计算机处理器直接读取和执行的代码。 
专门机器代码是仅可由专门的平台或若干指定的平台读取和执行的代码。 
一般化的机器代码是不限于专门平台的代码。 
编译器将一组指令转换成机器代码。 
公知过程的描述
图2b是一般地例示出对诸如JAVA之类的基于解释器的编程语言的现有技术软件处理的流程图。类似于基于编译器的编程语言,基于解释器的语言是使用编辑器等以高级语言编写的,下文中称为源语句200。根据该方法,编译器210将高级源语句200翻译成字节代码(BC)220,BC 220是不限于特定平台的一般化的MC。然而,为了执行BC 220,需要专门的解释器230将BC 20翻译成专门的MC 240。专门的解释器230通常与操作***一起被安装。该方法的主要优点是可对不同平台分发BC 220。一旦在特定平台上执行BC 220,专门的解释器230一次仅翻译一条BC命令,由此为计算机硬件产生专门的MC命令来执行。当涉及Sun Microsystems
Figure 2006800293025_3
Java时,BC 220被称为Java字节代码,解释器230被称为虚拟机(VM)。在某些情况下,VM与即时(Just-in-time)编译器250集合在一起,并可被任选地使用。即时编译器250将Java BC 220编译成专门的MC 260,就好像该程序一开始就已经为该特定程序编译过一样。在VM 230和即时编译器250这两种情况下,计算机硬件读取其预期的专门MC。然而,由于解释器230在执行期间一次仅翻译一条BC 220命令,它在计算机上可能运行较慢。 
充当Java BC和专门MC之间的解释器的Java VM对于每个平台来说都是独立的。一旦Java VM被提供给平台,任何经编译的Java BC就可运行在该平台上。因此,当用户在其计算机上安装了Java VM时,他可获得Java BC形式 的任何程序,并在其计算机上执行。当编程者以Java编程并将程序编译成JavaBC时,他可将Java BC广泛地分发给任何用户,因为Java BC对于所有流行的平台来说都是兼容的。Java VM负责分配存储器、设置寄存器、堆栈、“无用信息(garbage)”堆、以及方法区域(Java VM的方法区域是存储关于加载类型的所有信息的存储器的逻辑区域)供程序执行。 
图3是一般地例示出诸如Visual J#之类的被设计成运行在Microsoft
Figure 2006800293025_4
.NET上的编程语言的现有技术软件处理的流程图。一般来说,.NET环境允许对各种服务使用Web资源而不是计算机资源。Visual J#或J#允许编程者以“类Java”语言编程,并在.NET上运行程序。以Visual J#高级语言编写的源语句300由编译器310编译成微软中间语言(MSIL)320,它是不限于专门平台的一般MC。MSIL 320在其功能上相当于Java BC 220,Java BC 220甚至可以容易地被转换成MSIL 320。类似于上述的过程,使用相当于JAVA VM 230的功能的公共语言运行库(CLR)330将MSIL 320转换成专门的MC 340。如所理解的那样,诸如C#和VB.NET之类的其它.NET编程语言经过从源语句300到MSIL 320到MC 340的类似过程。 
应理解,上述VM和CLR进行的存储器分配被黑客广为所知,例如设置寄存器、堆栈、“无用信息”堆、以及程序的方法区域。使用该信息,黑客能够理解Java BC或MSIL的哪些命令涉及许可证要求,并修改这些命令。 
微软.NET框架中的.NET元数据描述了.NET CIL(公共中间语言)代码。.NET语言编译器将生成所述元数据,并将此存储在包含CIL的程序集(assembly)中。元数据描述了该程序集中定义的全部类和类成员,以及当前的程序集将从另一程序集调用的类和类成员。方法的元数据包含对该方法的完整描述,包括类(以及包含该类的程序集)、返回类型以及全部方法参数。当CLR执行CIL时,它验证被调用的方法的元数据是否与存储在作出调用的方法中的元数据相同。这确保了仅能用完全正确数量的参数和完全正确的参数类型来调用方法。因此,在像.NET和Java之类的环境中,很容易对代码进行逆向工程,因为代码和元数据是作为可再分发的程序包的一部分而被一起提供的。元数据对于代码对目标平台的即时编译来说是必需的。然而,在诸如C++之类的基于编译器的语言中,在编译和链接阶段期间,元数据被丢弃并不被再分发 给终端用户。 
本发明的总体描述
本发明的实质在于解释器,其操作和存储器分配方法是未公开的。该新的未揭露的解释器或“秘密VM”在下文中被称为SVM。每个SVM与一相关的转换器配对,或者换言之,每个SVM仅可解释由相关的转换器产生的代码。因此,要求软件保护的原始软件的每个供应商可购买专用的一对相关的转换器和SVM。诸如指令编码或存储器分配之类的操作方法在不同的SVM之间可改变。 
图4例示出根据一个实施例的本发明的实现方式,其中源语句400是以.NET的高级编程语言编写的。编译器410将源语句400编译成MSIL 420,如现有技术中所述。这里,转换器421用于将MSIL 420转换成秘密虚拟机语言(SVML)422。SVML 422是不限于特定平台的一般的MC。然而,SVML 422的命令不同于诸如Java BC或MSIL 420命令之类的已知的一般的MC命令。因此,破解SVML 422是格外复杂的,因为对SVML 422不存在已知的反汇编程序或调试器。SVML 422可与相应的SVM 423一起分发。使用本地CLR 430在指定计算机上编译SVM 423,用于添加关于指定计算机的专门平台的数据。由于SVM 423作为解释器来执行,因此它不仅包括用于解释SVML 422的新数据,还包括来自CLR 430的关于平台概况的数据。从而,当在指定计算机上执行SVML 422时,SVM 423向硬件解释每条命令供执行。由于SVM 423处理方法是未知的,因此黑客将发现很难理解并修改代码或试图在运行时期间截取数据。 
推荐的转换器属性的总体描述
转换器的指定属性之一涉及对相同的MSIL输入产生不同的SVML程序(另外称为“代码变形”)。代码变形依赖于SVML指令集中的冗余性,例如SUB指令可由NEG和ADD指令来替代。该属性对于防止将MSIL指令集与等价的SVML指令集比较的尝试来说极其有效。该属性依赖于SVML指令集中的冗余性,例如SUB指令可由NEG和ADD指令来替代。 
I.转换器的另一设计的属性是对指令的动态编码的可能性,意味着改变某一指令的相应位模式或代码。与预期相同指令被类似地编码的MSIL形成对比,在SVML中,同一指令可能以不同的代码出现。例如,下面的指令可用其地址来编码,如下表所示: 
  指令地址   MSIL指令   代码
  70   ADD   20
  指令地址   SVML指令  代码
  70   ADD  20+70=90
  74   ADD  20+74=94
因此,即使黑客可能试图在SVML代码中找到重复的模式来推导出公共的指令,他会发现比想像中要复杂得多。 
II.转换器的主要设计属性是在转换期间造成数据损失,使得转换过程实际上不可逆。数据损失的一个例子是诸如方法声明之类的代码结构元数据的去除,因为在.NET中当一方法仅由其它经转换的方法调用时并不需要它。数据损失的另一例子如下:一广为所知的指令集包括下面的指令:ADD_INT8、ADD_INT16以及ADD_INT32。这些指令指示处理器相应地加8位、16位和32位的数。在转换处理期间,使用独特的转换器,所有这些指令都被转换成开放指令“ADD”。应当被加的操作数的类型和位数(8、16或32)是在运行时期间被确定的。因此,不知道在“ADD”指令中相加的数的话,逆向编译是不可能的。由于转换处理是不可逆的,因此代码不能被转换回标准的MSIL/JavaBC格式,因此就不能使用标准工具进行反编译、反汇编、调试或修改。 
SVM架构和相应SVML指令集的示例
图5是例示出根据一个实施例的SVM架构的示例的框图。算术逻辑单元500对操作数寄存器510和520执行逻辑运算,并在寄存器530中存储结果。数据转移寄存器560用于在寄存器和存储体540和550之间转移数据。存储体540和550用于存储局部变量和方法参数。存储体选择器寄存器570存储被使用的存储体的数量。 
SVML的指令的一个子集的例子以及它们的含义: 
  SVML指令  说明
  MEM2TRANSFER  将指定的存储器地址的内容复制到数据转移寄存器560
  SETMBANK1  将存储器选择器寄存器570设置为1
  SETMBANK2  将存储器选择器寄存器570设置为2
  TRANSFER2MEM  将数据转移寄存器560的内容复制到指定的存储器地址
  TRANSFER2OP1  将数据转移寄存器560的内容复制到操作数寄存器510
  TRANSFER2OP2  将数据转移寄存器560的内容复制到操作数寄存器520
  RESULT2TRANSFER  将结果寄存器530的内容复制到数据转移寄存器560
  ADD  对操作数1和操作数2寄存器执行加法算术运算,并将 结果存储在结果寄存器530中
  SUB  对操作数1和操作数2寄存器执行减法算术运算,并将 结果存储在结果寄存器530中
一般的MC代码和SVML代码之间的比较
为了简洁起见,下面示出一非限制性的示例,将现有技术的一般的MC的汇编程序代码与SVML的进行比较。在这两种情况中,给定所需处理的任务是公式4+3-1。 
一般的MC程序代码处理公式4+3-1: 
LDC 4 
LDC 3 
ADD 
LDC 1 
SUB 
SVML程序代码处理公式4+3-1: 
SETMBANK1            选择存储器体1 
MEM2TRANSFER 23      加载“4”,即存储在存储器地址23处的常数 
TRANSFER2OP1         将值“4”移到操作数1寄存器 
MEM2TRANSFER 45      加载“3”,即存储在存储器地址45处的常数 
TRANSFER2OP2          将值“3”移到操作数2寄存器 
ADD                   将操作数1和2寄存器的内容相加 
RESULT2TRANSFER       将结果“7”移到转移寄存器 
TRANSFER2OP1          将值“7”移到操作数1寄存器 
MEM2TRANSFER 12       加载“1”,即存储在存储器地址12处的常数 
TRANSFEROP2           将值“1”移到操作数2寄存器 
SUB                   从操作数1减去操作数2的内容 
RESULT2TRANSFER       将结果移到转移寄存器 
TRANSFER2MEM1         在存储器地址1处存储结果 
如上面的程序代码所示,被处理的操作数(4、3和1)在指令中从不被明确地表示。试图对该程序进行逆向工程的黑客不能从当前指令集中推导出公式的操作数的值是什么,因为每个值都是在运行时期间从存储器读出的。 
本发明的其它实施例
在一个实施例中,每个厂商配备有其自己的一对转换器和SVM。因此,知道一个SVM的处理的方法不会揭露其它SVM的处理的方法。 
本发明所推荐的方法可与任何基于解释器的语言一起使用。例如,对于.NET的J#来说,SVM是由CLR编译的;对于JAVA来说,SVM是由VM编译的;依此类推。所推荐的发明可用于任何软件,不管是诸如C#或VB.NET之类的高级语言、软件代码、源代码还是机器代码。 
图6例示出本发明的另一实施例的示例,其中源语句500是以诸如VisualJ#之类的高级语言编写的。编译器410将源语句400编译成MSIL 420,如上所述。然而,在转换之前,MSIL 420指令被划分成两组:可包括许可证要求的敏感指令、以及不敏感指令。敏感指令由转换器421转换成SVML 422,而不敏感指令不被转换。由一部分MSIL和一部分SVML组成的一般的MC 425或程序可与相应的SVM 423一起被分发给任何流行的平台。为了执行程序,SVM423由指定平台上的CLR 430编译。在执行期间,每条指令被检查与MSIL 420或SVML 422的兼容性。MSIL 420指令由CLR 430直接解释,而SVML 422 指令由SVM 423解释。 
图7例示出根据一个实施例的对于基于编译器的编程语言的本发明的实现方式。如背景部分所述,源代码700由编译器710编译成专门的MC 720。使用指定的转换器721将该专门的MC 720转换成SVML 722,而SVML 722是依赖于平台的,或换言之,它是专门的MC。SVML 722与为SVML 722的专门平台设计的SVM 723一起被分发。由于被分发的SVM 723已经是专门用于指定平台的,它就不需要在指定的计算机上编译。因此,SVM 72能够将SVML722翻译成专门的MC 740,用于指定的计算机的硬件。 
在对于基于编译器的编程语言的另一个实施例中,仅敏感指令被转换器721转换成SVML 722。SVML 722与SVM 723以及专门的MC 720的其余指令一起被分发。在执行期间,SVM 723执行SVML 722的指令。 
虽然以例示的方式描述了本发明的一些实施例,但是显然本发明可用许多修改、变型和改编来实践,并利用落在本领域技术人员的知晓范围内众多等价或替代方案来实践,这不背离本发明的要旨或超出权利要求的范围。 

Claims (8)

1.一种用于防止对软件的未经授权的修改或对运行时数据的未经授权的修改的方法,包括以下步骤:
a.提供一转换器,所述转换器能够通过使用造成数据损失的转换处理将所述
软件转换成不能被逆向工程的一般化的机器代码;
b.提供一解释器,所述解释器的处理方法的知识保持受限制;
c.由所述解释器将所述一般化的机器代码解释成专门的机器代码,同时在
所述解释过程中重新构造所损失的数据,
其中,所述数据损失是去除操作数的类型和位数,所述操作数的类型和位数是运行时期间被确定的。
2.如权利要求1所述的方法,其特征在于,所述解释器是由CLR编译的。
3.如权利要求1或2所述的方法,其特征在于,所述软件被划分,使得仅所述软件的一部分被所述转换器转换并被所述解释器解释。
4.如权利要求1所述的方法,其特征在于,所述软件是高级语言。
5.如权利要求4所述的方法,其特征在于,所述高级语言是基于解释器的语言。
6.如权利要求5所述的方法,其特征在于,所述高级语言可以是Java、VisualJ#、J#、C#或VB.NET中的任一种。
7.如权利要求4所述的方法,其特征在于,所述高级语言是基于编译器的语言。
8.如权利要求7所述的方法,其特征在于,所述高级语言可以是C++、VB或Pascal中的任一种。
CN200680029302.5A 2005-08-06 2006-03-30 防止对软件或运行时数据的未经授权的修改的方法 Expired - Fee Related CN101300584B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US59580205P 2005-08-06 2005-08-06
US60/595,802 2005-08-06
PCT/IL2006/000398 WO2007017856A1 (en) 2005-08-06 2006-03-30 Method for preventing software reverse engineering, unauthorized modification, and runtime data interception

Publications (2)

Publication Number Publication Date
CN101300584A CN101300584A (zh) 2008-11-05
CN101300584B true CN101300584B (zh) 2012-02-29

Family

ID=36648619

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680029302.5A Expired - Fee Related CN101300584B (zh) 2005-08-06 2006-03-30 防止对软件或运行时数据的未经授权的修改的方法

Country Status (5)

Country Link
US (2) US8352929B2 (zh)
CN (1) CN101300584B (zh)
BR (1) BRPI0614089A8 (zh)
RU (1) RU2439669C2 (zh)
WO (1) WO2007017856A1 (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352929B2 (en) 2005-08-06 2013-01-08 Microsoft Corporation Method for preventing software reverse engineering, unauthorized modification, and runtime data interception
US8464207B2 (en) * 2007-10-12 2013-06-11 Novell Intellectual Property Holdings, Inc. System and method for tracking software changes
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
US8776016B2 (en) * 2009-10-29 2014-07-08 Red Hat, Inc. Integration of structured profiling data with source data in the eclipse development environment
US8561032B2 (en) * 2009-11-04 2013-10-15 Red Hat, Inc. Visualizing thread life time in eclipse
US8789024B2 (en) * 2009-11-04 2014-07-22 Red Hat, Inc. Integration of visualization with source code in the Eclipse development environment
US8683452B1 (en) * 2010-12-21 2014-03-25 Emc Corporation Dynamically obfuscated javascript
CN104321774B (zh) * 2012-05-25 2018-08-28 皇家飞利浦有限公司 用于防逆向工程和/或篡改程序的方法、***以及设备
US9152801B2 (en) * 2012-06-28 2015-10-06 Steven W. Cooke Cryptographic system of symmetric-key encryption using large permutation vector keys
CN103218551B (zh) * 2013-05-03 2016-04-06 飞天诚信科技股份有限公司 一种保护java程序的方法
US20220012346A1 (en) * 2013-09-13 2022-01-13 Vmware, Inc. Risk assessment for managed client devices
US9392084B2 (en) 2014-01-06 2016-07-12 International Business Machines Corporation Recovery of a network infrastructure to facilitate business continuity
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code
US9715433B2 (en) * 2014-08-29 2017-07-25 Netapp, Inc. Reconciliation in sync replication
RU2635271C2 (ru) * 2015-03-31 2017-11-09 Закрытое акционерное общество "Лаборатория Касперского" Способ категоризации сборок и зависимых образов
RU2628920C2 (ru) * 2015-03-31 2017-08-22 Закрытое акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных сборок
CN105279399A (zh) * 2015-10-30 2016-01-27 百度在线网络技术(北京)有限公司 应用防破解方法和装置
RU2625052C1 (ru) * 2016-03-18 2017-07-11 Акционерное общество "Лаборатория Касперского" Способ ограничения доступа образа машинного кода к ресурсам операционной системы
WO2018081093A1 (en) * 2016-10-24 2018-05-03 Clark Carl M Software algorithm security
CN107292131A (zh) * 2017-06-21 2017-10-24 北京深思数盾科技股份有限公司 软件保护方法和装置
RU2720254C1 (ru) * 2019-12-05 2020-04-28 Акционерное общество "Актив-софт" (АО "Актив-софт") Способ восстановления и обновления программного обеспечения на смарт-карте
US11782685B2 (en) 2020-06-17 2023-10-10 Bank Of America Corporation Software code vectorization converter
US11347500B2 (en) 2020-06-17 2022-05-31 Bank Of America Corporation Software code converter for resolving conflicts during code development
US11573775B2 (en) 2020-06-17 2023-02-07 Bank Of America Corporation Software code converter for resolving redundancy during code development
CN112241519A (zh) * 2020-11-05 2021-01-19 王志平 一种软件版权保护的实现方法
CN112642157B (zh) * 2020-12-31 2023-04-28 广州华多网络科技有限公司 代理开发控制方法及其相应的装置、设备、介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293576A (en) 1991-11-21 1994-03-08 Motorola, Inc. Command authentication process
AUPN002594A0 (en) * 1994-12-13 1995-01-12 Dunn, Alexander Atkinson Improvements in software for the protection of executable programs, libraries and their data
US6334189B1 (en) * 1997-12-05 2001-12-25 Jamama, Llc Use of pseudocode to protect software from unauthorized use
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
RU2183051C2 (ru) 2000-04-12 2002-05-27 Военный университет связи Способ формирования ключа шифрования/дешифрования
US7237123B2 (en) * 2000-09-22 2007-06-26 Ecd Systems, Inc. Systems and methods for preventing unauthorized use of digital content
WO2002025415A2 (en) * 2000-09-22 2002-03-28 Edc Systems, Inc. Systems and methods for preventing unauthorized use of digital content
DE10108487A1 (de) 2001-02-22 2002-09-12 Giesecke & Devrient Gmbh Verfahren und System zur verteilten Erstellung eines Programms für einen programmierbaren, tragbaren Datenträger
CA2348355A1 (en) * 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
US7383443B2 (en) 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
WO2004003264A1 (ja) 2002-06-28 2004-01-08 Sharp Kabushiki Kaisha 薄板製造方法および薄板製造装置
US7093119B2 (en) * 2002-07-16 2006-08-15 International Business Machines Corporation Methods and computer program products for protecting source code of an interpreted programming language
US20040128260A1 (en) 2002-12-30 2004-07-01 Nokia, Inc. Method and system for protecting against unauthorized modification of products
JP4193607B2 (ja) 2003-06-26 2008-12-10 日本電気株式会社 データフロー制御方式、方法、およびプログラム
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
US7366914B2 (en) 2003-08-29 2008-04-29 Intel Corporation Source code transformation based on program operators
AU2004310915B2 (en) 2003-12-01 2008-05-22 Samsung Electronics Co., Ltd. Method and apparatus for scalable video encoding and decoding
US8352929B2 (en) 2005-08-06 2013-01-08 Microsoft Corporation Method for preventing software reverse engineering, unauthorized modification, and runtime data interception

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘晓英等.软件开发中的一个重要环节--混淆.南京邮电学院学报24 1.2004,24(1),59-63.
刘晓英等.软件开发中的一个重要环节--混淆.南京邮电学院学报24 1.2004,24(1),59-63. *

Also Published As

Publication number Publication date
RU2439669C2 (ru) 2012-01-10
BRPI0614089A2 (pt) 2011-03-09
US20100313188A1 (en) 2010-12-09
US8938727B2 (en) 2015-01-20
BRPI0614089A8 (pt) 2017-01-17
WO2007017856A1 (en) 2007-02-15
RU2008104404A (ru) 2009-08-10
CN101300584A (zh) 2008-11-05
US8352929B2 (en) 2013-01-08
US20130125243A1 (en) 2013-05-16

Similar Documents

Publication Publication Date Title
CN101300584B (zh) 防止对软件或运行时数据的未经授权的修改的方法
US5781758A (en) Software emulation system with reduced memory requirements
Steele Jr LAMBDA: The ultimate declarative
US6694435B2 (en) Method of obfuscating computer instruction streams
US20070089090A1 (en) Method and system for protecting source code
CN103460217B (zh) 用于保护应用程序的方法及其装置
US7707631B2 (en) Device and method for processing a program code
CN101233485B (zh) 将后绑定函数和语言集成到外部程序环境中的方法和***
CN108733988A (zh) 安卓平台上可执行程序的保护方法
WO2004102303A2 (en) Compiling intermediate language bytecodes into java bytecodes
CN107632832B (zh) 一种面向dalvik字节码控制流混淆方法
CN100492387C (zh) 基于Keil C51的软件保护开发的方法和***
Anckaert et al. A model for self-modifying code
Ghezzi et al. An evaluation of the adaptation capabilities in programming languages
CN112434266A (zh) 一种shellcode控制流扁平化混淆方法
Cimato et al. Overcoming the obfuscation of Java programs by identifier renaming
US7089242B1 (en) Method, system, program, and data structure for controlling access to sensitive functions
JP5387089B2 (ja) プログラム及びプログラム実行装置
KR20200017120A (ko) 코스 스프레잉을 이용한 코드 보호 방법 및 시스템
Trapp et al. Automated Combination of Real-Time Shader Programs.
CN101593257B (zh) 基于.Net虚拟机的软件保护***和方法
CN105095698A (zh) 基于最近执行的程序代码的程序代码模糊处理
KR20200017121A (ko) 원타임 코드를 이용한 코드 보호 방법 및 시스템
JP2006048186A (ja) 動的コンパイラの生成コードを保護する言語処理系
WO2019149630A1 (en) Method for protecting an executable code

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT CORP.

Free format text: FORMER OWNER: SECURED DIMENSIONS LTD.

Effective date: 20100330

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: SAVA,ISRAEL TO: WASHINGTON, U.S.A.

TA01 Transfer of patent application right

Effective date of registration: 20100330

Address after: Washington State

Applicant after: Microsoft Corp.

Address before: Israel Savoy

Applicant before: Safety Standard Co.,Ltd.

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: 20150518

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

Effective date of registration: 20150518

Address after: Washington State

Patentee after: MICROSOFT TECHNOLOGY LICENSING, LLC

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120229

CF01 Termination of patent right due to non-payment of annual fee