代码扰乱以及通过仿真来控制处理器.pdf

上传人:奻奴 文档编号:1063133 上传时间:2018-03-29 格式:PDF 页数:23 大小:1.20MB
返回 下载 相关 举报
摘要
申请专利号:

CN200480027216.1

申请日:

2004.08.19

公开号:

CN1856759A

公开日:

2006.11.01

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回|||实质审查的生效|||公开

IPC分类号:

G06F1/00(2006.01)

主分类号:

G06F1/00

申请人:

麦克罗维西恩欧洲公司;

发明人:

艾伦·W·斯蒂门斯; 马丁·C·格雷; 克里斯托弗·E·萨利

地址:

英国伯克郡

优先权:

2003.08.20 GB 0319596.3

专利代理机构:

北京市柳沈律师事务所

代理人:

邸万奎;黄小临

PDF下载: PDF下载
内容摘要

通过相应的键(32)随机地选择各个安全程序(28),然后将其与游戏程序(20)封装在一起以提供要应用于例如光盘(30)的存储介质的可执行程序文件(34)。每当运行安全程序(28)时,它产生的目标代码是扰乱的,以使得难以通过识别和除去安全程序来克服该保护。通过用变量函数来代替源代码中的变量来产生扰乱的目标代码。当编译该源代码以产生目标代码时,该函数使变量作为一系列操作而存在于编译的目标代码中。

权利要求书

1、  一种产生扰乱的目标代码的方法,该方法包括以下步骤:用变量的选定函数代替源代码中的变量;以及编译该源代码以产生目标代码,该选定函数使变量作为一系列操作而存在于编译的目标代码中。

2、
  如权利要求1所述的方法,其中,利用其呈现变量的操作系列由算术和/或逻辑操作组成,并且其中该操作系列被布置为:当运行目标代码时提供该变量。

3、
  如权利要求1或者2所述的方法,其中,利用其呈现变量的操作系列包含求补操作,其被布置为当目标代码运行时提供该变量。

4、
  如任一先前权利要求所述的方法,其中,在源代码的模板中定义选定函数。

5、
  如权利要求4所述的方法,其中,该源代码的模板定义多个函数,其中,每个函数都被布置为进行编译,以将变量呈现为一系列操作,并且该方法还包含选择函数之一来代替源代码中的变量。

6、
  如权利要求5所述的方法,其中,不同的键与模板中的每一个函数相关联,并且该方法还包含用该模板来代替源代码中的变量,并且通过选择与模板中的一个函数相关联的键来选择所述一个函数。

7、
  如任一先前权利要求所述的方法,其中,源代码涉及存储数组和模板,并使用指针来定位这些数组和模板。

8、
  如任一先前权利要求所述的方法,其中,源代码是标准的编程语言。

9、
  如权利要求8所述的方法,其中,源代码是C++

10、
  一种以目标代码形式的可执行程序,该程序已经从源代码中编译,其中在源代码中的变量已被编译为作为一系列目标代码而存在于目标代码中,以借此扰乱目标代码。

11、
  如权利要求10所述的可执行程序,其中,利用其呈现变量的操作系列由算术和/或逻辑操作组成,并且,其中该操作系列被布置为:当运行目标代码时提供该变量。

12、
  如权利要求10或权利要求11所述的可执行程序,其中,利用其呈现变量的操作系列包含求补操作,其被布置为当目标代码运行时提供该变量。

13、
  如权利要求10到12中的任何一个所述的可执行程序,其中:
已通过用选定函数代替源代码中的变量而产生了一系列操作,其中该选定函数被布置为使变量作为一系列操作而存在于编译后的目标代码中。

14、
  如权利要求13所述的可执行程序,其中,在源代码的模板中定义了选定函数。

15、
  如权利要求14所述的可执行程序,其中,源代码的模板已定义了多个函数,每个函数都被布置为进行编译,以将变量呈现为一系列操作,并且已经选择了所述函数之一来代替源代码中的变量。

16、
  一种产生其上具有安全的可执行程序的存储介质的方法,该方法包括以下步骤:通过将可执行程序与被布置为控制对可执行程序的访问的安全程序相关联,来使该可执行程序安全;以及将安全的可执行程序应用于该存储介质,并且,该方法还包含扰乱该安全程序的目标代码,其中已经通过用变量的选定函数代替源代码中的该变量、并编译该源代码以产生目标代码,来扰乱该安全程序的目标代码,该选定函数使变量作为一系列操作而存在于已编译的目标代码中。

17、
  如权利要求16所述的产生其上具有安全的可执行程序的存储介质的方法,其中,利用其呈现变量的操作系列由算术和/或逻辑操作组成,并且其中该操作系列被布置为:当运行目标代码时提供该变量。

18、
  如权利要求16或权利要求17所述的产生其上具有安全的可执行程序的存储介质的方法,其中,利用其呈现变量的操作系列包含求补操作,其被布置为当目标代码运行时提供该变量。

19、
  如权利要求16到18中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,可执行程序和安全程序在目标代码级别上相关联。

20、
  如权利要求16到19中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,该安全程序被布置为加密该可执行程序。

21、
  如权利要求16到20中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,还包含:将可执行程序中的块移出该可执行程序,并在安全程序中重定位这些块。

22、
  如权利要求16到21中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,该安全程序被布置为需要验证程序的运行。

23、
  如权利要求16到22中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,在源代码的模板中定义在安全程序源代码中的选定函数。

24、
  如权利要求23所述的产生其上具有安全的可执行程序的存储介质的方法,其中,安全程序源代码的所述模板定义多个函数,每个函数都被布置为进行编译,以将变量呈现为一系列操作,该方法还包含选择所述函数之一来代替源代码中的变量。

25、
  如权利要求24所述的产生其上具有安全的可执行程序的存储介质的方法,其中,不同的键与模板中的每一个函数相关联,并且该方法还包含:用该模板来代替源代码中的变量,并且,通过选择与模板中的一个函数相关联的键来选择所述一个函数。

26、
  如权利要求16到25中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,安全程序的源代码涉及存储的数组和模板,并使用指针来定位这些数组和模板。

27、
  如权利要求16到26中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,安全程序的源代码是标准编程语言。

28、
  如权利要求27所述的产生其上具有安全的可执行程序的存储介质的方法,其中,源代码是C++

29、
  如权利要求16到28中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,其上应用了安全的可执行程序的存储介质是光盘。

30、
  如权利要求29所述的产生其上具有安全的可执行程序的存储介质的方法,其中,通过激光束编码将安全的可执行程序应用于光盘上。

31、
  如权利要求16到28中的任何一个所述的产生其上具有安全的可执行程序的存储介质的方法,其中,其上应用了安全的可执行程序的存储介质是服务器、计算机和/或其它处理部件中的存储器、或与这些部件相关联的存储器。

32、
  一种其上具有安全的可执行程序的存储介质,其中,通过将安全程序与其相关联来使可执行程序安全,该安全程序被布置为控制对可执行程序的访问,并且其中,安全程序处于已被扰乱的目标代码的形式,该安全程序已被从源代码编译,并且,安全程序的源代码中的变量已被编译为作为一系列操作而存在于目标代码中,借此已扰乱了目标代码。

33、
  如权利要求32所述的其上具有安全的可执行程序的存储介质,其中,利用其呈现变量的操作系列由算术和/或逻辑操作组成,并且其中,该操作系列被布置为:当运行目标代码时提供该变量。

34、
  如权利要求32或权利要求33所述的其上具有安全的可执行程序的存储介质,其中,利用其呈现变量的操作系列包含求补操作,其被布置为当目标代码运行时提供该变量。

35、
  如权利要求32到34中的任一个所述的其上具有安全的可执行程序的存储介质,其中,通过用选定函数代替源代码中的变量,已经产生了一系列操作,其中,该选定函数被布置为:使变量作为一系列操作而存在于编译的目标代码中。

36、
  如权利要求35所述的其上具有安全的可执行程序的存储介质,其中,在源代码的模板中定义了选定函数。

37、
  如权利要求36所述的其上具有安全的可执行程序的存储介质,其中,源代码的模板已定义了多个函数,每个函数都被布置为进行编译,以将变量呈现为一系列操作,并且,已选择了所述函数之一来代替源代码中的变量。

38、
  如权利要求32到37中的任一个所述的其上具有安全的可执行程序的存储介质,其中,可执行程序和安全程序在目标代码级别上相关联。

39、
  如权利要求32到38中的任一个所述的其上具有安全的可执行程序的存储介质,其中,在存储介质上加密可执行程序,并且相关联的安全程序允许可执行程序的解密。

40、
  如权利要求32到39中的任一个所述的其上具有安全的可执行程序的存储介质,其中,已在安全程序内重定位了来自可执行程序的块。

41、
  如权利要求32到40中的任一个所述的其上具有安全的可执行程序的存储介质,其中,安全程序被布置为需要验证程序的运行。

42、
  如权利要求32到41中的任一个所述的其上具有安全的可执行程序的存储介质,其中,存储介质是其上编码了可执行程序和安全程序的光盘。

43、
  如权利要求42所述的其上具有安全的可执行程序的存储介质,其中,该光盘是CD、CD-ROM、或DVD。

44、
  如权利要求32到41中的任一个所述的其上具有安全的可执行程序的存储介质,其中,存储介质是在服务器、计算机和/或其它处理部件中的存储器或者与这些部件相关联的存储器,并且,其上存储了可执行程序和安全程序。

45、
  如权利要求32到44中的任一个所述的其上具有安全的可执行程序的存储介质,其中,可执行程序是游戏程序、和/或视频程序、和/或音频程序、和/或其它软件。

46、
  一种控制处理器运行程序的方法,包括以下步骤:
把来自程序的指令变换为所述处理器不对其响应的精简指令集格式;
使该变换了的指令被施加到对该精简指令集格式响应的虚拟处理器;以及
使虚拟处理器运行对其施加的指令,并施加该处理器响应的一系列简单的指令到该处理器。

47、
  如权利要求46所述的控制处理器运行程序的方法,还包含:加密要施加到虚拟处理器的已变换了的指令;以及允许虚拟处理器响应于所述加密的指令,而不用对它们进行解密。

48、
  如权利要求46或权利要求47所述的控制处理器运行程序的方法,还包含:使用模板来变换和加密这些指令,其中选定模板为来自程序的每条指令提供了以精简指令集格式的一系列指令。

49、
  如权利要求48所述的控制处理器运行程序的方法,其中,所述模板定义用于程序中的指令的以精简指令集格式的多个指令系列,该方法还包含:选择所述多个指令系列之一,作为所述指令的变换。

50、
  如权利要求49所述的控制处理器运行程序的方法,其中,不同的键与模板中以精简指令集格式的多个系列指令中的每一个相关联,并且其中,该方法还包含:选择与所述多个系列指令中的一个相关联的键,并且将程序中的指令变换为所述多个系列指令中的与选定键相关联的一个。

51、
  如权利要求50所述的控制处理器运行程序的方法,其中,虚拟处理器能够响应于所述多个系列指令中的所述一个。

52、
  如权利要求46到51中的任一个所述的控制处理器运行程序的方法,其中,仅变换执行预定函数或者例程的来自程序的指令,并将这些指令施加到虚拟处理器。

53、
  如权利要求46到51中的任一个所述的控制处理器运行程序的方法,其中,来自程序的指令处于目标代码中,或者已经从目标代码中转换得到,并且其中已经通过如权利要求1到9中的任何一个所述的方法扰乱该目标代码。

54、
  如权利要求46到53中的任一个所述的控制处理器运行程序的方法,其中,指令来自于如权利要求10到15中任一个所述的以目标代码形式的可执行程序。

55、
  如权利要求46到52中的任一个所述的控制处理器运行程序的方法,其中,指令来自于在存储介质上的安全的可执行程序,其中该存储介质由权利要求16到31中的任一个所述的方法所产生。

56、
  如权利要求46到54中的任一个所述的控制处理器运行程序的方法,其中,指令来自于在如权利要求32到45中的任一个所述的存储介质上的安全的可执行程序。

57、
  一种其上具有安全的可执行程序的存储介质,其中,通过让安全程序以及仿真程序与此相关联来使可执行程序安全,该安全程序被布置为控制对可执行程序的访问,并且,该仿真程序使可执行程序的预定函数或者例程在由所述仿真程序提供的虚拟处理器上运行,其中,仿真程序被布置为将来自可执行程序的指令变换成为精简指令集格式,以使所变换的指令被施加到虚拟处理器,并且使该虚拟处理器运行对其施加的指令、并输出一系列简单的指令,用于施加到处理器。

58、
  如权利要求57所述的其上具有安全的可执行程序的存储介质,其中,存储介质是其上编码了可执行程序、安全程序和仿真程序的光盘。

59、
  如权利要求57或权利要求58所述的其上具有安全的可执行程序的存储介质,其中,光盘是CD、CD-ROM、或DVD。

60、
  如权利要求57所述的其上具有安全的可执行程序的存储介质,其中,存储介质是在服务器、计算机和/或其它处理部件中的存储器或者与这些部件相关联的存储器,并且其上存储了安全程序和仿真程序。

61、
  如权利要求57到60中的任一个所述的其上具有安全的可执行程序的存储介质,其中,可执行程序是游戏程序、和/或视频程序、和/或音频程序、和/或其它软件。

62、
  一种产生扰乱的目标代码的方法,其实质上如在上文中参考附图所述。

63、
  一种以目标代码形式的可执行程序,其实质上如在上文中参考附图所述。

64、
  一种产生其上具有安全的可执行程序的存储介质的方法,其实质上如在上文中参考附图所述。

65、
  一种其上具有安全的可执行程序的存储介质,其实质上如在上文中参考附图所述。

66、
  一种控制处理器运行程序的方法,其实质上如在上文中参考附图所述。

说明书

代码扰乱以及通过仿真来控制处理器
技术领域
本发明涉及产生扰乱的目标代码的方法、以目标代码形式的可执行程序、产生其上具有安全的可执行程序的存储介质的方法、以及其上具有安全的可执行程序的存储介质。本发明还涉及控制处理器运行程序的方法。
背景技术
通常,这个发明涉及软件安全性。众所周知,软件可以是有价值的,并且,有人和组织试图绕过用来保护软件的任何安全措施。
以诸如C和Fortran的高级语言编写程序。然后将它们编译成为目标代码,其可为机器语言,或者可被转换成机器语言。例如编译器的设备可以用来进行从源代码到目标代码的变换(translation)。机器语言是二进制数字流,其将包括用于可执行程序的指令,但是还可以包括各种安全部件,例如,用来确保仅可运行程序的真正副本。破解者(cracker)试图获得清楚的代码,以便他们可以绕过任何安全部件,并且,例如,由于可得到将从二进制流产生源代码的反向编译器,所以,他们会在这方面获得帮助。
已经建议了填充目标代码,即增加冗余的附加代码来隐藏或扰乱(obfuscate)起作用的(functional)目标代码,但是,已经证实破解者熟练于识别和除去填充。还已建议了加密目标代码。然而,当运行程序时需要能够得到加密密钥,以便可以解密指令。显然,一旦破解者找到了密钥,便提供了对未加密的代码的访问。
发明内容
本发明试图提供使软件安全的新的且改进的方法。
依据本发明的第一方面,提供了一种产生扰乱的目标代码的方法,该方法包括以下步骤:用变量的选定函数代替源代码中的变量;以及编译该源代码,以产生目标代码,该选定函数使变量作为一系列操作而存在于编译后的目标代码中。
因为将变量编译成一系列操作,所以增加了目标代码的大小,并且这本身就起到隐藏或扰乱有用的代码的作用。然而,提供一系列操作来呈现一个变量与填充代码相比具有这样的优势,即全部产生的代码看起来都是有用的,从而使破解者更难以确定他们需要哪些目标代码。
在优选实施例中,利用其呈现变量的一系列操作由算术和/或逻辑操作组成,并且这一系列操作被布置为:当运行目标代码时提供该变量。另外和/或作为选择,利用其呈现变量的一系列操作包含求补操作,其被布置为当目标代码运行时提供该变量。
在这方面,目标代码的长度大大地增加了,并且由此通过例如将变量呈现为一系列算术或其它操作,来扰乱目标代码。
在实施例中,在源代码的模板中定义选定函数。
例如,源代码的模板定义了多个函数,所述多个函数各自被布置为进行编译,以将变量呈现为一系列操作,并且该方法还包含选择函数之一来代替源代码中的变量。
优选地,不同的键与模板中的每个函数相关联,并且该方法还包含用该模板来代替源代码中的变量,并且通过选择与模板中的一个函数相关联的键来选择所述一个函数。
提供多个函数、其中每个都可被选择来代替变量,这允许以多种不同的方法来编译特定变量。这对于其中一个源产生许多不同的软件应用是非常有帮助的。例如,CD的制造商将生产具有不同的标题和内容的CD,但是将保持格式和安全措施在所有标题上都是共用的。在许多现有技术的安全性解决方案中,破解者只需破解在一个标题上的保护,就能够通过重复所进行的动作来破解全部标题。
如上面所定义的,提供多个函数,允许为每个不同的标题、为相同的变量而选择不同的函数。因此,如果破解者的确设法访问了一个CD标题的内容,则也对破解者访问另一个CD标题的内容的努力没有帮助。此外,使用键方法来选择函数允许使软件安全的处理的某些自动化。
在实施例中,源代码涉及存储的数组和模板,并使用指针来定位这些数组和模板。
优选地,源代码是标准地编程语言。例如,源代码是C++
本发明还扩展到以目标代码形式的可执行程序,该程序已从源代码编译,其中,源代码中的变量已被编译为作为一系列操作而存在于目标代码中,借此扰乱目标代码。
利用其呈现变量的一系列操作可以由算术和/或逻辑操作组成,并且这一系列操作被布置为:当运行目标代码时提供该变量。另外和/或作为选择,利用其呈现变量的一系列操作可以包含求补操作,其被布置为当目标代码运行时提供该变量。
被布置为当运行目标代码时提供该变量的一系列操作的使用允许目标代码的指令、或从目标代码中转换的指令运行程序,而不需要解密、或者解释扰乱的目标代码。
在实施例中,已通过用选定函数代替源代码中的变量而产生了一系列操作,该选定函数被布置为使变量作为一系列操作而存在于编译后的目标代码中。
例如,在源代码的模板中定义了选定函数。
优选地,源代码的模板已定义了多个函数,每个函数都被布置为进行编译,以将变量呈现为一系列操作,并且已经选择了函数之一来代替源代码中的变量。
依据本发明的进一步方面,提供了一种产生其上具有安全的可执行程序的存储介质的方法,该方法包括以下步骤:通过将可执行程序与被布置为控制对可执行程序的访问的安全程序相关联,来使该可执行程序安全;以及将安全的可执行程序应用于存储介质。并且,该方法还包含:扰乱该安全程序的目标代码,其中,已经通过用变量的选定函数代替源代码中的变量、并编译该源代码以产生目标代码,来扰乱该安全程序的目标代码,该选定函数使变量作为一系列操作而存在于已编译的目标代码中。
在实施例中,利用其呈现变量的一系列操作由算术和/或逻辑操作组成,并且其中该系列的操作被布置为:当运行目标代码时提供该变量。另外和/或作为选择,利用其呈现变量的一系列操作包含求补操作,其被布置为当目标代码运行时提供该变量。
优选地,可执行程序和安全程序在目标代码级别上相关联。
提供控制对可执行程序的访问的安全程序可以是任何适当的安全程序。例如,安全程序可以被布置为加密该可执行程序,和/或可以把可执行程序中的块移入安全程序中,和/或安全程序可以被布置为需要验证程序的运行。
在实施例中,在源代码的模板中定义在安全程序的源代码中的选定函数。
例如,所述安全程序源代码的模板定义了多个函数,每个函数都被布置为进行编译,以将变量呈现为一系列操作,并且,该方法还包含选择函数之一来代替源代码中的变量。
优选地,不同的键与模板中的每一个函数相关联,并且该方法还包含:用该模板来代替源代码中的变量,并且,通过选择与一个函数相关联的键来选择模板中的所述一个函数。
在实施例中,安全程序的源代码涉及存储的数组和模板,并使用指针来定位这些数组和模板。
安全程序的源代码优选为标准编程语言,如C++
优选地,其上应用了安全的可执行程序的存储介质是光盘,并且,例如,安全的可执行程序通过激光束编码而应用于光盘上。
作为选择,其上应用了安全的可执行程序的存储介质是服务器、计算机和/或其它处理部件中的存储器或者与这些部件相关联的存储器。例如,存储介质可以是计算机中、或者连接到计算机的硬盘。
本发明还扩展到其上具有安全的可执行程序的存储介质,其中通过让安全程序与其相关联来使可执行程序安全,该安全程序被布置为控制对可执行程序的访问,并且,其中,安全程序处于已被扰乱的目标代码中,该安全程序已经从源代码编译,并且,安全程序的源代码中的变量已被编译为作为一系列操作而存在于目标代码中,借此已扰乱了目标代码。
例如,利用其呈现变量的一系列操作由算术和/或逻辑操作组成,并且其中,该系列的操作被布置为:当运行目标代码时提供该变量。另外和/或作为选择,利用其呈现变量的一系列操作包含求补操作,其被布置为当目标代码运行时提供该变量。
在实施例中,已通过用被布置为使变量作为一系列操作而存在于编译的目标代码中的选定函数代替源代码中的变量,而产生了一系列操作。
例如,在源代码的模板中定义了选定函数。
在实施例中,源代码的模板已经定义了多个函数,其中,所述多个函数各自被布置为进行编译,以将变量呈现为一系列操作,并且,已经选择了函数之一来代替源代码中的变量。
优选地,可执行程序和安全程序在目标代码级别上相关联。
可以在存储介质上加密可执行程序,并且,随后,相关联的安全程序被布置为允许可执行程序的解密。
另外和/或作为选择,可以已经在安全程序内重定位来自可执行程序的块。
另外和/或作为选择,安全程序可以被布置为需要验证程序的运行。
在安全程序被布置为例如需要验证程序的运行的情况中,将也在存储介质上提供验证程序。让安全程序合并验证程序将是可能的,但是当前通常优选为:安全程序指向验证程序。
在实施例中,存储介质是其上编码了可执行程序和安全程序的光盘。例如,光盘是CD、CD-ROM、或DVD。
在替换实施例中,存储介质是在服务器、计算机和/或其它处理部件中的存储器或者与这些部件相关联的存储器,并且其上存储了可执行程序和安全程序。例如,存储介质可以是计算机中,或连接到计算机的硬盘。
可执行程序是游戏程序、和/或视频程序、和/或音频程序、和/或其它软件。
在后面的这个方面中,应当理解:上面定义的安全方法通常可应用于全部的软件应用。在存储介质上提供的可执行程序可以包含游戏程序和/或视频程序、和/或音频程序和/或任何其它多媒体格式。
如上面所定义的那样,一种产生扰乱的目标代码的方法、和/或一种以目标代码形式的可执行程序、和/或一种产生其上具有安全的可执行程序的存储介质的方法可以各自单独地使用、或者结合如下面所定义的那样的控制处理器以运行程序的方法、和/或其上具有安全的可执行程序的存储介质来使用。
依据本发明的再一个方面,提供了一种控制处理器运行程序的方法,该方法包括以下步骤:把来自程序的指令变换为所述处理器不对其响应的精简指令集格式,
使已变换了的指令被施加到响应于该精简指令集格式的虚拟处理器,以及
使虚拟处理器运行对其施加的指令,并且,将处理器响应的一系列简单的指令施加到该处理器。
通常,来自应用于例如CPU的处理器的程序的指令是清楚的,并且有可能让破解者在程序的运行期间访问这些指令,以获得对程序的访问。利用本发明中的方法,施加到作为以软件配置的处理器的虚拟处理器的已变换的指令不是通常使用的标准指令,并且,因此对于破解者来说是没有用的。此外,施加到处理器的一系列简单指令数量上大于常用的数量,并且,因此扰乱了这些指令。
在优选实施例中,该方法还包含:加密要施加到虚拟处理器的已变换的指令,并且允许虚拟处理器响应于该加密的指令,而不用对它们进行解密。
加密技术的一个弱点是必须提供密钥或其它设备以允许解密。破解者具有识别这样的密钥的经验。然而,本发明中的方法不需要虚拟处理器解密所变换的指令以便运行这些指令,以便不提供密钥。通过在虚拟处理器中提供允许虚拟处理器理解每条加密的指令的信息并且让虚拟处理器响应于此而产生适当动作,可以避免解密。这样,虚拟处理器从不利用可能由破解者访问的清楚指令而工作。
还建议提供以精简指令集格式的、多于一个系列的指令,这些系列指令可以代替来自程序的每条指令。每个系列的指令是不同的,由此各个虚拟处理器可以接收与由其它虚拟处理器接收的那些指令不同的、变换后的指令。这可以通过模板的使用来实现。
因此,在优选实施例中,该方法还包含:利用模板来变换和加密指令,选定模板为来自程序的每条指令提供了以精简指令集格式的一系列指令。
例如,该模板定义用于程序中的指令的、以精简指令集格式的多个指令系列,该方法还包含:选择所述多个指令系列之一,作为所述指令的变换。
优选地,不同的键与模板中以精简指令集格式的多个系列指令中的每一个相关联,并且,该方法还包含:选择与所述多个系列指令之一相关联的键,并且,将程序中的指令变换为与选定键相关联的所述多个系列指令之一。
如先前所述,键的使用允许执行该方法所需要的编程中的某些自动化。
应当理解:如果使用了这种控制方法用于例如运行游戏程序,那么,在来自程序的变换了的指令上起作用、然后向处理器提供大量简单指令的虚拟处理器的使用将增加不可接受的延迟。因此,建议仅让程序中的部分经受虚拟处理器的处理。
一种如上面所定义的那样的控制处理器的方法,可以单独使用或者可以结合如上面定义的那样的产生扰乱的目标代码的方法、和/或以目标代码形式的可执行程序、和/或产生其上具有安全的可执行程序的存储介质的方法、和/或其上具有安全的可执行程序的存储介质使用。
本发明还扩展到其上具有安全的可执行程序的存储介质,其中,通过让安全程序以及仿真程序与其相关联,来使可执行程序安全,该安全程序被布置为控制对可执行程序的访问,并且,该仿真程序使可执行程序的预定函数或例程在由所述仿真程序提供的虚拟处理器上运行,其中,该仿真程序被布置为:将来自可执行程序的指令变换成为精简指令集格式,以使变换的指令施加到虚拟处理器,以及使该虚拟处理器运行对其施加的指令,并且输出一系列简单的指令,用于施加到处理器。
附图说明
在下文中,将通过示例并参考附图而描述本发明的实施例,附图中:
图1示意性地示出了高级源代码到机器语言的变换,并图解了编译器对模板的使用;
图2示意性地图解了具有安全的可执行程序的光盘的产生;以及
图3图解了在本发明的控制处理器的方法中的虚拟处理器的使用。
具体实施方式
以下通过参考在诸如CD-ROM或DVD的光盘上提供的例如游戏程序的可执行程序,而描述和说明本发明的实施例。然而,应当理解,本发明不局限于所给出的具体示例,并且,尤其可应用于全部软件、以及用于存储软件的任何存储介质。
例如,本发明可以与存储在个人计算机和/或服务器和/或其它处理部件中的存储器上或与这些部件相关联的存储器上的软件、和/或用于被布置为下载到计算机的软件一起使用。尤其应当注意到:可以结合数字权限管理软件而使用本发明。
图1示出了在2处所指示的源代码到在4处所指示的作为二进制数字序列的机器语言的变换。如所示出的,通常为例如C、C++、或者Fortran的高级语言的源代码2通过编译器8而被变换成目标代码6。
在一些实例中,取决于源代码2的语言以及编译器8的属性,目标代码6与机器语言4相同、或者基本上相似。在图1中图解的实施例中,由汇编器10变换该目标代码6,以提供机器语言4。
可与源代码2的类型无关地应用在图1中图解的方法,但是,通过进一步具体参考C++源代码2来对其进行描述和说明。C++是非常灵活的语言,这是因为如图1所示,其使用通常在12、14和16处指示的模板和阵列。已将图1中的模板14指示为CValue,并且,这是要在本发明中使用、以扰乱从源代码2产生的目标代码6的类模板(class template)。
为了给出非常简单的示例,以C编写的程序可以设置变量值,例如,如下所述的int i和int j:
int i=5
int j=i+6
如在图1中可以看出的,模板CValue为键(key)k0,k1...到kn中的每一个提供了相关联的变量函数,即函数f(int0),f(int1)....f(intn)。这些函数中的每个是不同的,并且各自涉及例如一系列的算术或者逻辑操作。
当使用所说明的方法时,程序员用来自CValue模板14的指定函数替换源代码中的变量值。因此,并不是int i=5,源代码将指定CValue<key,int>i=5。因此,在编译源代码2以形成目标代码6的期间,要被设置为5的变量inti将由通过选择键k0、k1...kn之一而从CValue模板14中确定的适当函数f(int0)、f(int1)....f(intn)所定义的一系列操作来替换。
如上所述,源代码中的变量已经由例如一系列数学操作所替换。这使所得到的目标代码6晦涩或扰乱。因此,并不是将int i设置为5,例如,f(int0)可以指定以下的操作序列:
m=5+key
n=6+key
p=m+n
l=p-(2×key)
int l=i.
用这样的方式,以一系列操作的方式将变量i设置为5。在由编译器8输出的目标代码6中,所有指示的操作看起来将是有用的,使得破解者将在掌握出现扰乱的位置时遇到困难。当然,因为这些操作最终导致所需变量的正确值,所以,可以由处理器直接运行目标代码6、或从其汇编的机器语言4,而不需要任何解密或解码。
通常,以这样的方式对变量执行的操作将比上面所述的那些操作更复杂。此外,并不是使用诸如加、除、减和乘的一系列简单算术运算符,它通常将优选使用可以可靠地将变量返回到其指定值的诸如异或(XOR)的函数。在这方面,在实践中可以使用如下所述的技术。
这个技术使用C++模板来实现Vq,其中:
q=T_MANGLE_SEED_VALUE_N XOR T_MANGLE_SEED_VALUE_M
template<class T,int x=0,int z=0>
struct V
{
       Toperator()(Tx,Tv,Tz)
      {
          Ty=x^z;
          return(T)(v^y);
      }
      Toperator()(Tv)
      {
        Ty=x^z;
        return(T)(v^y);
      }
};
int main(int argc,char*argv[])
{
int z=T_MANGLE_SEED_VALUE_M;
int y=T_MANGLE_SEED_VALUE_N;
if(12345678==argc)
{
         //这从不会发生
         z=T_MANGLE_SEED_VALUE_O;
         y=T_MANGLE_SEED_VALUE_P;
}
          int    a    =V<int,T_MANGLE_SEED_VALUE_N,
    T_MANGLE_SEED_VALUE_M>()(argc);
    //这里a==Vq
    int b=a;
    return=V<int>()(y,b,z);
}
查看所生成的代码,我们看到,q的分量(N和M)用于弄乱该值,然后在运行时间使用q来恢复(unmangle)该值。这是不对称的,这是由于在加密/解密循环中没有使用单个值。
由上,显然,该方法使源代码中的变量作为一系列操作而存在于目标代码中。这增加了目标代码的复杂度和晦涩程度,并提供了对抗破解者的保护。
此外,提供可以通过相关联的键的选择而选择的不同函数允许生成不同的目标代码,以执行相同的函数。因此,游戏的一个标题(title)可以以相同的格式作为第二标题提供。然而,每个标题可以具有不同的目标代码。因此,如果破解者设法破解了第一标题的代码,这将不会对第二标题的破解提供帮助。
图2示意性地示出了将安全的游戏应用于CD-ROM 30的方法。在这方面,并且如上面所指出的那样,仅通过参考存储在光盘上的游戏程序而例示本发明。本发明可用来使存储在任何介质上的任何软件安全。因此,例如,本发明可以用来使存储在服务器、计算机和/或其它处理部件中、或者与这些处理部件相关联的存储器上的可执行程序安全。在希望例如使用权限管理软件下载可执行程序、以确保仅授权的用户才具有到安全的可执行程序的访问权、和/或以控制用户访问安全的可执行程序的程度或方式的情况中,本发明尤其有用。
在图2所示的实施例中,游戏包含游戏程序game.exe 20,并且这将与适当的安全软件一起应用于CD-ROM 30。在这方面,软件工具包22提供了保护游戏程序20所必需的程序。工具包22包括安全应用程序SECPREP.DLL 24,其起到访问要与游戏程序20一起捆绑的适当的安全程序28的作用。在这方面,安全应用程序24访问恰当地存储在存储器26中的很多安全程序SECSERV.DLL 28之一。每个单独的安全程序与相应的键32相关联,并且安全应用程序24随机地选择键32之一,借此选择对应的安全程序28。此后,将所选的安全程序28与游戏程序20、以及任何其它安全措施一起封装,以形成可执行程序文件34,然后存储该文件,也就是说,在这个例子中,通过适当的编码部件(未示出)而应用于CD-ROM 30。
在图2中图解的实施例中,工具包22不仅将游戏程序20与安全程序28一起封装,并且它还提供了验证程序36。
安全程序28起到游戏程序20和验证程序36的封装器(wrapper)的作用。因此,当由将该CD-ROM 30放入到计算机的驱动器中的用户访问可执行应用文件34时,安全程序28需要运行验证程序36。例如,并且以已知的方式,验证程序36可以查找盘30上的已知错误,其中该错误将已经在如上所述的生产过程期间放置在盘30上。如果找到预期的错误,则将断言该盘是真的,并且在那种情况下,安全程序28随后将允许游戏程序20的加载和运行。在这方面,每当安全程序28正在运行目标代码时,如上所述,它产生的结果将是被扰乱的,从而使破解者难以识别和除去安全程序28。这防止破解者获得对游戏程序20的访问。
例如,可以通过将例如在38处指示的编程块从游戏程序中取出、并将它们并入安全程序28中,来增强由安全程序28提供的安全性。在游戏程序20中提供指向块38的指针40。通过这种技术,还通过扰乱的代码而向破解者隐藏游戏程序本身的一些部分,其中当在安全程序28内运行块38时产生扰乱的代码。由软件工具包22在可执行程序文件34的产生期间进行块38从游戏程序20到安全程序28的移动。
应当理解:除了图2中描述和说明的那些措施之外的安全措施可以经由软件工具包22而并入。例如,还可以加密游戏程序20。
上述用于扰乱代码的技术可以单独使用来保密软件,或者可以结合以下的仿真技术使用。现在将参考图3而描述和说明的仿真技术可以结合其它安全技术使用,或它可以被单独使用。
应当理解,对例如以C++语言形式的程序进行编译以产生用于应用于处理器的指令集。如果破解者可以获取对例如游戏的指令集的清楚的访问权,则可以执行该游戏的逆向工程(engineering)。图3图解了可用来向破解者隐藏指令的仿真技术。
如图3所示,将源代码2施加到编译器50以产生在52处指示的指令集。然而,编译器50被布置为加密编译的指令,并且还被布置为以精简指令集格式、而不是更常用的自然指令,来提供指令。
如图3所示,编译器50具有模板58的库54,如上面参考图1所描述的,模板58可以有选择地提供在52处的很多指令集之一。在这方面,编译器50被布置为选择很多键56之一,由此选择对应的模板58,以便在指令集52的产生中使用。还通过仿真器编译器64、使用选定键,以软件的形式来配置虚拟处理器或仿真器60。这允许仿真器60对指令集52中的指令起作用而不需要解密它们。
例如,通过使用具有键0的模板58而获得的指令集可以通过向每个变量值添加值+3而被加密。因此,仿真器60可以理解每个变量必须被减3,并且,因此,可以执行所述指令。因此,例如,如果MOV指令应该为0、且仿真器接收到变量3,则它可以理解:对于这个指令集,要将3设置为MOV、并相应地起作用。因此,通过这种手段,没有清楚和未加密的指令集输入到仿真器60中。
此外,仿真器60被布置为:为每个真正的指令产生一个大的指令系列,并且将这个大的指令系列施加到CPU 62。例如,并不是指示CPU 62加3,仿真器60可以发出指令串:
add 10,
subtract 7,
divide by 1,
multiply by 1.
这增加了要送到CPU 62的指令的复杂度,并且这个复杂度也起使代码令破解者困惑的作用。
应当理解:使用所描述的仿真器60将增加处理所需要的实际时间,并且,因此,它不适合于用这样的方式在CPU 62上运行游戏程序。相反,仅使用这种技术向破解者隐藏部分程序。例如,如果这种技术结合上述技术的使用,则可能包括来自游戏程序20的块38的安全程序28可以经受这种仿真技术。
由上应当理解:如果在编译期间选择了不同的键56,则指令集52和仿真器60将改变。这种在不同的盘上使用不同的指令集和仿真器的能力增加了更进一步的安全级别,这是因为它允许由同一个制造商出版的不同盘具有不同的安全性。指令集52保持加密也是重要的,这是因为这确保没有可能由破解者使用的清楚指令集可用。
应当理解:可在所附权利要求的范围之内,对所描述和说明的发明作出改变和修改。

代码扰乱以及通过仿真来控制处理器.pdf_第1页
第1页 / 共23页
代码扰乱以及通过仿真来控制处理器.pdf_第2页
第2页 / 共23页
代码扰乱以及通过仿真来控制处理器.pdf_第3页
第3页 / 共23页
点击查看更多>>
资源描述

《代码扰乱以及通过仿真来控制处理器.pdf》由会员分享,可在线阅读,更多相关《代码扰乱以及通过仿真来控制处理器.pdf(23页珍藏版)》请在专利查询网上搜索。

通过相应的键(32)随机地选择各个安全程序(28),然后将其与游戏程序(20)封装在一起以提供要应用于例如光盘(30)的存储介质的可执行程序文件(34)。每当运行安全程序(28)时,它产生的目标代码是扰乱的,以使得难以通过识别和除去安全程序来克服该保护。通过用变量函数来代替源代码中的变量来产生扰乱的目标代码。当编译该源代码以产生目标代码时,该函数使变量作为一系列操作而存在于编译的目标代码中。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1