专利名称:用于创建可执行代码的副本的唯一标识及其管理的方法
技术领域:
本发明涉及标识方法,具体地说,涉及用于创建可执行代码的副本的唯一标识及其管理的方法。
背景技术:
软件盗版是一个重大问题。很难防止人们非法复制软件以及其它类似的电子文件。该问题的一部分是唯一标识软件或电子文件的特定副本方面的困难。本文所述的是一种以几乎不可消除的方式唯一标识软件文件的副本的方法。
当软件被出售时,它可经由CD-ROM(或类似的基于盘的技术)或电子文件下载来分发。当存在批量生产的产品、如操作系统或主要应用程序时可采用CD-ROM。电子文件下载可用来分发更新或补丁。在一些情况中,完整的应用程序可经由电子下载来分发。
当软件代码被编制或编译为可在数字计算机上运行的形式时,它被转换为可执行软件文件。可执行软件文件的一个实例示于图1。
如图1所示,传统可执行软件文件包含数据部分100和代码部分200。数据部分100包括数据位置110、120、130和140。数据位置110、120、130和140可由代码部分200中的指令210、220、230和240引用。
按照传统方式,代码部分200还包括子例程300和310。代码部分200中的子例程300和310由指令210、220、230和240组成,它们可分别通过操作数1100、1200、1300和1400引用地址位置,以便对位于存储在操作数1100、1200、1300和1400中的地址的数据执行操作。更具体来说,如图1所示,操作数1100、1200、1300和1400分别存储数据位置110、120、130和140的地址值。指令210、220、230和240还可引用其它子例程的起始地址,以便使那些子例程被运行。
按照传统方式,软件文件的各元素位于那个软件文件中的特定位置。通过在不同位置示出上述元素的每个,在图1中以符号表示这种情况。在可执行软件文件中,软件文件内各项目与其它项目的相对位置在它被加载到数字计算机的存储器中以便执行之后保持相同。各地址110、120、130和140仅表示一个位置,而子例程300和310则包含一个以上邻接位置。
传统可执行软件文件的第一入口点250是在数字计算机开始执行可执行软件文件的指令时要执行的第一指令的位置。这个第一入口点250在传统上是可执行软件文件的第一位置或者接近第一位置。
现在参照图2,指令410之后跟随至少一个操作数。在图2中,示出两个操作数420和430。操作数的数量在传统上根据操作数之前的指令的身份来改变。
再参照图1,当软件文件被执行时,从位于第一入口点250的指令开始执行指令。这个指令可包含“跳转”指令,它将使下一条指令从不与“跳转”指令相邻的位置读取。虽然图1说明了分为数据部分100和代码部分200的可执行软件文件,但是子例程300、310和地址位置110、120、130、140可驻留在可执行软件文件中的任何位置,并且可以混合。但是,每一个单独子例程300和310由于包含一个以上邻接位置而无法被分割,并且必须保持原样。
再参照图2,指令410的操作数420和430可包含数据,或者可包含传统可执行软件文件中的地址位置。可执行软件文件的操作数420和430中的地址仅与可执行软件文件中的位置有关。在可执行软件文件被加载到数字计算机的存储器之前,操作数420和430中的地址与数字计算机的存储器中的物理位置无关。
在传统可执行软件文件被加载到存储器时,数字计算机必须执行称作“链接编辑”的操作。换言之,包含对于可执行软件文件中的另一个位置的引用的可执行软件文件中的每个位置必须经过修改,以便引用正执行软件文件的数字计算机的存储器中的物理位置。
参照图1,数字计算机中的传统“链接编辑”程序确定第一入口点250的物理起始地址。那个相同的“链接编辑”程序还将可执行软件文件中的所有地址引用增加那个位移。例如,如果数字计算机中的传统“链接编辑”程序将第一入口点250的物理起始地址确定为具有值“400”的物理起始地址,如果操作数1100、1200、1300和1400包含地址引用,则这些操作数中的所有值也被增加“400”。
通过从第一入口点250中的指令开始沿着可执行软件文件中的指令的执行路径,执行“链接编辑”的数字计算机中的程序可确定哪些位置包含地址。如上所述,可能包含地址引用的可执行软件文件中的唯一位置是指令的操作数。指令的身份确定哪些可能有的操作数必须是地址引用。
可执行软件文件中的指令的执行路径可由执行“链接编辑”的程序来确定,因为要执行的下一条指令位于当前指令的操作数之后,或者位于由当前指令的操作数之一所引用的相对地址。传统的链接编辑方法还可沿着基于条件的执行路径;这类算法的细节在此不作论述。需要适当工作的链接编辑程序,以便让数字计算机成功加载和执行可执行软件文件。
利用以上所述的概念,能够创建相同的或者在特定预定位置中的信息被改变的可执行文件。通过改变特定预定位置中的信息,软件分销商能够将序列号或其它信息段(密钥)嵌入可执行文件,它必须由用户输入以便启用软件。
由于上述变更被限制到特定预定位置,因此,软件盗版者可轻易地探知特定预定位置,因而软件盗版者能够轻易地遮掩与特定预定位置关联的信息,以便清除序列号或者禁止内置于应用程序的任何副本保护的操作。随着序列号区被清除,就无法确定软件是如何非法得到的。
因此,希望提供一种实现软件副本来源的标识的方法。此外,还希望提供一种实现难以遮掩或清除的软件副本来源的标识的方法。
发明内容
根据本发明的一个方面,提供一种用于创建各具有唯一标识值的已编译可执行文件的方法,包括(a)编译源代码以创建具有与所述源代码对应的第一数据结构的已编译可执行文件,使得每当编译所述源代码时实现所述第一数据结构;(b)重新排列所述已编译可执行文件内的预定数量的数据元素的位置,从而创建具有第二数据结构的已编译可执行文件,所述第二数据结构不同于所述第一数据结构;(c)根据所述重新排列的位置来编辑所述已编译文件内的地址数据,从而产生以与具有所述第一数据结构的所述已编译可执行文件相同的方式起作用的具有第二数据结构的已编译可执行文件;以及(d)创建表示具有第二数据结构的所述已编译可执行文件的所述数据结构的唯一值,所述唯一值提供具有第二数据结构的所述已编译可执行文件的唯一标识。
根据本发明的另一方面,提供一种用于创建和记录已编译可执行文件的每个副本的唯一标识值的方法,包括(a)编译源代码以创建具有与所述源代码对应的第一数据结构的已编译可执行文件,使得每当编译所述源代码时实现所述第一数据结构;(b)重新排列具有所述第一数据结构的所述已编译可执行文件内的预定数量的数据元素的位置,从而创建具有第二数据结构的已编译文件,所述第二数据结构不同于所述第一数据结构;(c)根据所述重新排列的位置来编辑所述已编译文件内的地址数据,从而产生以与具有所述第一数据结构的所述已编译可执行文件相同的方式起作用的具有第二数据结构的已编译可执行文件;(d)创建表示具有非第一数据结构的所述已编译可执行文件的每个唯一数据结构的唯一值,所述唯一值提供具有唯一的非第一数据结构的每个已编译可执行文件的唯一标识;(e)把唯一资产代码分配给具有唯一的非第一数据结构的每个已编译可执行文件;(f)把具有唯一的非第一数据结构的所述已编译可执行文件记录到记录媒体上;以及(g)以相关方式存储与具有唯一的非第一数据结构的所述已编译可执行文件关联的唯一值以及与具有唯一的非第一数据结构的所述已编译可执行文件关联的所述唯一资产代码。
图1以图形方式说明传统软件文件的结构布局;图2以图形方式说明传统机器码指令的结构布局;图3以图形方式说明对软件文件的内容重新排序的概念;图4是流程图,说明将被许可人映射到软件副本的方法;图5是流程图,说明用于分发的可加载格式化可执行软件文件的创建,每个可加载格式化可执行软件文件具有唯一数据结构;图6是流程图,说明用于分发的可加载格式化可执行软件文件的创建,每个可加载格式化可执行软件文件具有唯一数据结构;以及图7是流程图,说明用于分发的可加载格式化可执行软件文件的创建,每个可加载格式化可执行软件文件具有唯一数据结构。
具体实施例方式
如上所述,当软件代码被编制或编译为可在数字计算机上执行的形式时,它被转换为包含数据部分和代码部分的可执行软件文件。数据部分包括地址位置,在其中,地址位置可由代码部分中的指令引用,以便对地址处包含的数据执行操作。
又如上所述,按照传统方式,可执行软件文件的各元素位于那个软件文件中的特定位置。在可执行软件文件中、软件文件中的各项目相对于其它项目的相对位置在它被编译之后保持相同。
更具体来说,在传统上编译为可执行软件文件的程序具有被定义并且在传统环境下不会改变的字节序列。程序可以编程语言来编写,并且可包括变量、数据元素和/或指令。编译器把程序转换为具有可加载格式的静态可执行软件文件;静态表示字节序列被定义并且不可变,以及可加载格式表示可执行软件文件采用一种有助于加载到存储器以便执行的格式。在程序编译为静态可加载格式化可执行软件文件之后,这个文件可写入CD-ROM以便适当分发,或者以电子方式发出以便适当分发。
当静态可加载格式化可执行软件文件加载到存储器供数字计算机执行时,该文件由数字计算机的“链接编辑”程序使用,如上所述。可加载格式可随操作系统不同而改变,并且可能随编程语言不同而改变。静态可加载格式化可执行软件文件提供指定要执行的机器指令的方式以及(在存储器中)查找构成程序的变量和子例程的方式。
如上所述,希望提供一种产生实现软件副本的来源的标识和/或使得难以遮掩或清除软件副本的来源的标识的方式的方法。这种方法创建各静态可加载格式化可执行软件文件的实际数据结构的唯一排列。换言之,静态可加载格式化可执行软件文件中的各个元素的位置创建标识软件副本来源的唯一形态。此外,这个基于唯一数据结构的签名在不破坏静态可加载格式化可执行软件文件的功能性时难以改变。
为了更好地说明产生实现软件副本的来源的标识和/或使得难以遮掩或清除软件副本的来源的标识的软件文件的数据结构的唯一排列,利用以下简单程序VarMessage1字符串;Message2字符串;Message3字符串;Procedure MakeMessage;
BeginMessage1=‘你好’;Message2=‘世界’;Message3=Message1+’‘+Message2;End;BeginMakeMessage;End如上所述,编译和执行简单程序始终将产生具有值“你好,世界”的变量Message3,因为可加载格式化可执行软件文件的数据结构是静态的。但是,如果通过以不同顺序向编译器提供与Message1和Message2关联的源代码,或者通过在编译期间或之后重新排列机器码,在编译期间颠倒Message1和Message2的位置,则将创建不同的但功能上相同的可执行软件文件。
更具体来说,如果编译器以相反顺序接收到Message1和Message2,则可加载格式化可执行软件文件的数据结构与原始结构的不同之处在于,与Message1关联的原始数据将位于Message2的原始地址位置,而与Message2关联的原始数据将位于Message1的原始地址位置。在这种情况中,新编译的程序将输出“世界,你好”,因为Message1和Message2的地址位置已经被编译器颠倒。此外,如果与Message1和Message2关联的机器码在编译期间或之后已经改变位置,则新编译的程序将输出“世界,你好”。
注意,所创建可加载格式化可执行软件文件的分析可泄露与Message1和Message2关联的数据的地址位置。换言之,在其第一位置上具有与Message1和Message2关联的数据的所创建可加载格式化可执行软件文件将具有一种可执行软件文件数据结构,它与在其颠倒位置上具有与Message1和Message2关联的数据的所创建可加载格式化可执行软件文件不同。因此,通过在编译期间、之前或之后重新排列可执行软件文件中的不同元素的位置,可创建唯一的可执行软件文件数据结构。这个唯一的可执行软件文件数据结构可提供可执行软件文件的唯一标识标记。
通过在编译期间、之前或之后重新排列可执行软件文件中的不同元素的位置,可创建唯一的可执行软件文件数据结构。但是,如果这在编译之后进行,则在保持原样时会破坏输出或功能性。通过跟踪所有改变、然后编辑与标识可加载格式化可执行软件文件中的重新排列位置关联的原始数据以便反映所创建的新位置,可解决来自编译之后重新排列可执行软件文件中的不同元素的位置的破坏。换言之,如果位置变化被跟踪,以及与标识重新排列位置(地址值)关联的原始数据被更新以便反映可加载格式化可执行软件文件数据结构的变化,则可加载格式化可执行软件文件中的各个元素的位置可重新排列,而没有不利地影响功能性。
注意,位置的变化可由随机算法或者产生预定预期数量的唯一可加载格式化可执行软件文件数据结构的预定算法来控制。
通过重新排列可加载格式化可执行软件文件中的元素来构成的可执行软件文件数据结构的一个实例如图3所示。在以下说明中,假定图1从传统编译来说明可执行软件文件数据结构。
如图3所示,子例程300、310和数据110、120、130、140在编译之后已经在可执行软件文件中重新排列。数据位置110、120、130和140可由子例程300、310中的指令210、220、230和240引用。如前面所述,子例程300和310由指令210、220、230和240组成,它们可分别通过操作数1100、1200、1300和1400引用地址位置,以便对位于存储在操作数1100、1200、1300和1400中的地址处的数据执行操作。更具体来说,如图3所示,操作数1100、1200、1300和1400分别存储数据位置110、120、130和140的地址值。指令210、220、230和240还可引用其它子例程的起始地址,以便使其它子例程被执行。
图3的软件文件的各元素位于那个软件文件中不同于图1所示位置的特定位置,但是,图1和图3的软件文件表示具有相同功能性的可执行文件。如同图1那样,在图3中,在可执行软件文件中,软件文件内各项目与其它项目的相对位置在它被加载到数字计算机的存储器中以便执行之后保持相同。各地址110、120、130和140仅表示一个位置,而子例程300和310则包含一个以上邻接位置。注意,子例程300和310没有被分割,而是保持原样。
因此,如图1和图3所示,可执行软件文件数据结构是不同且唯一的。
图5-7将用于更全面地理解关于如何实现这些唯一的可执行软件文件数据结构。
图5是流程图,说明所编译的机器码的重新排列以便产生相同的相应可执行软件文件,但其中每一个具有唯一的数据结构。首先,如图5所示,在S800接收所编译机器码的文件。在S810重新排列所编译机器码的文件中的各种元素。注意,元素的位置的重新排列或改变可由随机算法或者产生预定预期数量的唯一可加载格式化可执行软件文件数据结构的预定算法来控制。
在S820跟踪所编译机器码的文件中的各种元素的重新排列,使得各元素这时所在位置的记录为已知。在S830,这种跟踪信息被用来编辑所编译机器码中的地址数据,从而反映所跟踪变化。
例如,如果数据位置在编译之后最初一定会位于地址“500”,但在元素重新排列之后被移动到地址“750”,则在编译中等于“500”的原始地址数据经过编辑以反映新的位置“750”。因此,通过跟踪变化,所编译机器码可经过编辑,从而提供与各个重新排列元素的新位置对应的正确地址数据。
一旦所编译机器码经过编辑以提供与各个重新排列元素的新位置对应的正确地址数据,在S840,重新排列的已编辑所编译代码准备用于通过物理媒体、如CD-ROM或者通信媒体、如网络进行分发。
利用这个方法,分销商可产生软件程序的多个副本,每个具有相同功能,但各具有唯一的基本数据结构。这种唯一数据结构可用来提供软件的各副本的不同但唯一的标识信息。
在创建唯一的可执行软件文件数据结构后,可对唯一的数据结构可执行软件文件执行校验和生成例程或其它算法,以便创建表示那个可执行软件文件的唯一值。为了确保真正的随机性,这些唯一值可与过去创建的值进行比较,以便确保所创建可执行软件文件数据结构的确是唯一的。
图6是流程图,说明在编译之前的源代码的重新排列以便产生相应的可执行软件文件,但其中的每一个具有唯一的数据结构。首先,如图6所示,在S900接收要编译的源代码的文件。在S910重新排列要编译的源代码的文件中的各个元素、文本字符串。注意,元素的位置的重新排列或改变可由随机算法或者产生预定预期数量的唯一可加载格式化可执行软件文件数据结构的预定算法来控制。
然后在S930,所编译代码准备用于通过物理媒体、如CD-ROM或者通信媒体、如网络进行分发。
利用这个方法,分销商可产生软件程序的多个副本,每个具有相同功能,但各具有唯一的基本数据结构。这种唯一数据结构可用来提供软件的各副本的不同但唯一的标识信息。
图7是流程图,说明在编译期间的所编译机器码的文件中的各个元素的重新排列以便产生相同的相应可执行软件文件,但其中的每一个具有唯一的数据结构。首先,如图7所示,在S1000接收要编译的源代码的文件。源代码经过编译,以及在编译期间,在S1010重新排列所编译机器码的文件中的各种元素。注意,元素的位置的重新排列或改变可由随机算法或者产生预定预期数量的唯一可加载格式化可执行软件文件数据结构的预定算法来控制。
在S1020跟踪所编译机器码的文件中的各个元素的重新排列,使得各元素这时所在位置的记录为已知。在S1030,这种跟踪信息用来编辑所编译机器码中的地址数据,从而反映所跟踪变化。
例如,如果数据位置在编译之后最初一定会位于地址“500”,但在编译期间被移动到地址“750”,则在编译中等于“500”的原始地址数据经过编辑以便反映新的位置“750”。因此,通过跟踪变化,所编译机器码可经过编辑,从而提供与各种重新排列元素的新位置对应的正确地址数据。
一旦所编译机器码经过编辑以提供与各种重新排列元素的新位置对应的正确地址数据,在S1040,重新排列的已编辑所编译代码准备用于通过物理媒体、如CD-ROM或者通信媒体、如网络进行分发。
利用这个方法,分销商可产生软件程序的多个副本,每个具有相同功能,但各具有唯一的基本数据结构。这种唯一数据结构可用来提供软件的各副本的不同但唯一的标识信息。
利用以上所述的唯一数据结构生成例程,分销商可更轻松地识别盗版软件副本的来源。例如,如图4所示,唯一的数据结构可执行软件文件在S710通过重新排列例程来创建。在S720,根据可执行软件文件的唯一数据结构来产生唯一值。
如上所述,唯一的数据结构提供产生可执行软件的那个副本的唯一标识的基础。一个实例是利用校验和生成器,它产生可执行软件的那个副本的校验和,其中校验和生成基于该数据结构。
可执行软件文件中的所有位置包含指令、地址引用或数据元素。所有这些类型的内容均采取二进制数值形式。因此,能够让可执行软件文件中的元素的任何排序通过作为所有位置的全部内容的和的校验和来表示。根据可执行软件文件的内容,可执行软件文件的内容的每个唯一排序也可具有唯一校验和。
注意,可能的不同校验和的数量也会随着数据元素和子例程的数量增加而增加。因此,校验和与内容的唯一排列的关联可用于将原始被许可人与其软件副本关联。
注意,可采用校验和之外的表示可执行软件文件中的元素的排序的其它方式。
在S730,当分销商要许可或销售可执行软件的副本时,分销商可通过记录它的根据可执行软件文件的唯一数据结构所产生的唯一标识值来登记被许可人或购买者并标识所传递的软件。
例如,分销商可产生上千个CD-ROM,在每一个中具有相同的可执行软件文件“A”,但是其中各CD-ROM上的可执行软件文件“A”具有不同的数据结构,并且各CD-ROM具有不同的序列号或ID。从该数据结构,分销商向数据库输入根据可执行软件文件的唯一数据结构所产生的唯一值以及CD-ROM的关联序列号。当分发CD-ROM时,分销商则可向数据库输入与接收CD-ROM的实体关联的信息。
此后,如果分销商发现断定的盗版软件版本,则分销商只需要分析可执行代码的数据结构以便确定它的唯一值,并且将它与数据库中的值进行比较,从而确定它是否被盗版,以及如果被盗版,则确定被盗版的原件的来源。
本文所公开的方法是不以任何方式改变可执行软件的功能性而执行可执行软件文件的内容的重新排序的方法。
注意,子例程仍然包含相同顺序的相同指令集。
如上所述,如果数据地址的位置被移动,则引用那个地址的可执行软件文件中的每个操作数也必须被改变。类似地,要注意,如果子例程的位置被改变,则引用那个子例程的可执行软件文件中的每个操作数也必须被改变。
注意,可执行软件文件中的可移动元素的数量越大,则可能的唯一数据结构的数量也越大。注意,当可执行软件文件中的可移动元素的数量增加时,确定变量的顺序可能的方式的数量可能以指数方式增加。最后要注意,以上所述的各种例程可在任何数字处理装置上实现。以上所述的各种例程也可通过固件或者直接通过硬件来实现。
总之,一种方法以电子方式修改已编译可执行文件,已编译可执行文件包括多个数据元素,该方法通过以下方式编译源代码以便创建具有与源代码对应的第一数据结构的已编译可执行文件,使得每次编译源代码时实现第一数据结构;重新排列已编译可执行文件中的预定数量的数据元素的位置以便创建具有不同于第一数据结构的第二数据结构的已编译文件;以及根据重新排列位置来编辑具有第二数据结构的已编译文件中的地址数据以便产生具有第二数据结构的、以与具有第一数据结构的已编译可执行文件相同的方式起作用的已编译可执行文件。数据元素可能是已编译可执行文件中的数据位置、已编译可执行文件中的数据的字节和/或已编译可执行文件中的子例程。具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置可随机重新排列和/或采用产生预定数量的唯一数据结构的预定算法来重新排列。来自相同源代码的已编译可执行文件的每个副本使具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置重新排列,以便创建具有非第一数据结构的已编译文件,以及已编译文件中的地址数据根据重新排列的位置来编辑。
一种方法以电子方式修改已编译可执行文件,已编译可执行文件包括多个数据元素,该方法通过以下方式在源代码的编译期间重新排列预定数量的数据元素的位置,以便创建具有第二数据结构的已编译文件,第一数据结构在编译相同源代码而未重新排列预定数量的数据元素的位置时实现,第一数据结构在每次没有重新排列而编译源代码时实现,第二数据结构不同于第一数据结构;以及根据重新排列位置来编辑已编译文件中的地址数据,以便产生具有第二数据结构的、以与具有第一数据结构的已编译可执行文件相同的方式起作用的已编译可执行文件。
数据元素可能是已编译可执行文件中的数据位置、已编译可执行文件中的数据的字节和/或已编译可执行文件中的子例程。具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置可随机重新排列和/或采用产生预定数量的唯一数据结构的预定算法来重新排列。来自相同源代码的已编译可执行文件的每个副本使具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置重新排列,以便创建具有非第一数据结构的已编译文件,以及已编译文件中的地址数据根据重新排列的位置来编辑。
一种方法以电子方式修改已编译可执行文件的数据结构,已编译可执行文件包括多个数据元素,该方法通过以下方式在编译之前重新排列源代码中的文本字符串的位置;以及编译重新排列的源代码,以便创建具有第二数据结构的已编译可执行文件,第一数据结构在编译相同源代码而不重新排列源代码中的文本字符串的位置时实现,第一数据结构在每次没有重新排列而编译源代码时实现。
文本字符串可能是已编译可执行文件中的数据位置、已编译可执行文件中的数据的字节和/或已编译可执行文件中的子例程。源代码中的文本字符串的位置可随机地重新排列和/或采用产生预定数量的唯一数据结构的预定算法来重新排列。
一种方法创建各具有唯一标识值的已编译可执行文件,通过以下方式编译源代码以创建具有与源代码对应的第一数据结构的已编译可执行文件,使得每次编译源代码时实现第一数据结构;重新排列已编译可执行文件中的预定数量的数据元素的位置以创建具有不同于第一数据结构的第二数据结构的已编译可执行文件;根据重新排列位置来编辑已编译文件中的地址数据以产生具有第二数据结构的、以与具有第一数据结构的已编译可执行文件相同的方式起作用的已编译可执行文件;以及创建表示具有第二数据结构的已编译可执行文件的数据结构的、提供具有第二数据结构的已编译可执行文件的唯一标识的唯一值。
数据元素可能是已编译可执行文件中的数据位置、已编译可执行文件中的数据的字节和/或已编译可执行文件中的子例程。具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置可随机重新排列和/或采用产生预定数量的唯一数据结构的预定算法来重新排列。唯一值通过对于具有第二数据结构的已编译可执行文件执行校验和例程来产生。来自相同源代码的已编译可执行文件的每个副本使具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置重新排列,以便创建具有非第一数据结构的已编译文件,以及已编译文件中的地址数据根据重新排列的位置来编辑,并创建表示具有非第一数据结构的每个已编译可执行文件的数据结构的唯一值。
通过编译源代码以创建具有与源代码对应的第一数据结构的已编译可执行文件,使得第一数据结构每当编译源代码时实现;重新排列具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置,以便创建具有不同于第一数据结构的第二数据结构的已编译文件;根据重新排列位置来编辑已编译文件中的地址数据,以便产生具有第二数据结构的、以与具有第一数据结构的已编译可执行文件相同的方式起作用的已编译可执行文件;创建表示具有非第一数据结构的已编译可执行文件的每个唯一数据结构的唯一值,唯一值提供具有唯一的非第一数据结构的每个已编译可执行文件的唯一标识;将唯一的资产代码分配给具有唯一的非第一数据结构的每个已编译可执行文件;把具有唯一的非第一数据结构的已编译可执行文件记录到记录媒体中;以及以相关方式存储与具有唯一的非第一数据结构的已编译可执行文件关联的唯一值以及与具有唯一的非第一数据结构的已编译可执行文件关联的唯一资产代码,一种方法创建和记录已编译可执行文件的每个副本的唯一标识值。
数据元素可能是已编译可执行文件中的数据位置、已编译可执行文件中的数据的字节和/或已编译可执行文件中的子例程。具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置可随机重新排列和/或采用产生预定数量的唯一数据结构的预定算法来重新排列。唯一值通过对于具有第二数据结构的已编译可执行文件执行校验和例程来产生。来自相同源代码的已编译可执行文件的每个副本使具有第一数据结构的已编译可执行文件中的预定数量的数据元素的位置重新排列,以便创建具有非第一数据结构的已编译文件,以及已编译文件中的地址数据根据重新排列的位置来编辑。唯一资产代码可能是序列号、表示已编译可执行文件的被许可人的信息、表示已编译可执行文件的购买者的信息和/或表示已编译可执行文件的接收者的信息。
权利要求
1.一种用于创建各具有唯一标识值的已编译可执行文件的方法,包括(a)编译源代码以创建具有与所述源代码对应的第一数据结构的已编译可执行文件,使得每当编译所述源代码时实现所述第一数据结构;(b)重新排列所述已编译可执行文件内的预定数量的数据元素的位置,从而创建具有第二数据结构的已编译可执行文件,所述第二数据结构不同于所述第一数据结构;(c)根据所述重新排列的位置来编辑所述已编译文件内的地址数据,从而产生以与具有所述第一数据结构的所述已编译可执行文件相同的方式起作用的具有第二数据结构的已编译可执行文件;以及(d)创建表示具有第二数据结构的所述已编译可执行文件的所述数据结构的唯一值,所述唯一值提供具有第二数据结构的所述已编译可执行文件的唯一标识。
2.一种用于创建和记录已编译可执行文件的每个副本的唯一标识值的方法,包括(a)编译源代码以创建具有与所述源代码对应的第一数据结构的已编译可执行文件,使得每当编译所述源代码时实现所述第一数据结构;(b)重新排列具有所述第一数据结构的所述已编译可执行文件内的预定数量的数据元素的位置,从而创建具有第二数据结构的已编译文件,所述第二数据结构不同于所述第一数据结构;(c)根据所述重新排列的位置来编辑所述已编译文件内的地址数据,从而产生以与具有所述第一数据结构的所述已编译可执行文件相同的方式起作用的具有第二数据结构的已编译可执行文件;(d)创建表示具有非第一数据结构的所述已编译可执行文件的每个唯一数据结构的唯一值,所述唯一值提供具有唯一的非第一数据结构的每个已编译可执行文件的唯一标识;(e)把唯一资产代码分配给具有唯一的非第一数据结构的每个已编译可执行文件;(f)把具有唯一的非第一数据结构的所述已编译可执行文件记录到记录媒体上;以及(g)以相关方式存储与具有唯一的非第一数据结构的所述已编译可执行文件关联的唯一值以及与具有唯一的非第一数据结构的所述已编译可执行文件关联的所述唯一资产代码。
全文摘要
一种方法以电子方式修改包括多个数据元素的已编译可执行文件,通过以下方式编译源代码以创建具有与源代码对应的第一数据结构的已编译可执行文件,使得每次编译源代码时实现第一数据结构;重新排列第一已编译可执行文件中的预定数量的数据元素的位置以创建具有第二数据结构的已编译可执行文件;根据重新排列位置编辑已编译可执行文件中的地址数据以产生具有唯一第二数据结构的、以与具有第一数据结构的已编译可执行文件相同的方式起作用的已编译可执行文件。这个唯一第二数据结构在软件文件上创建在保持其功能性时实质上不可消除的标记。唯一第二数据结构对应于可执行代码的特定副本,从而实现对可执行代码的来源的确定。
文档编号G06F21/00GK1862493SQ200610081948
公开日2006年11月15日 申请日期2006年5月11日 优先权日2005年5月12日
发明者B·E·弗农 申请人:施乐公司