CN104303187A - 软件加指纹 - Google Patents

软件加指纹 Download PDF

Info

Publication number
CN104303187A
CN104303187A CN201280073363.7A CN201280073363A CN104303187A CN 104303187 A CN104303187 A CN 104303187A CN 201280073363 A CN201280073363 A CN 201280073363A CN 104303187 A CN104303187 A CN 104303187A
Authority
CN
China
Prior art keywords
sections
software project
version
receiver
initial software
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.)
Pending
Application number
CN201280073363.7A
Other languages
English (en)
Inventor
A.A.瓦吉斯
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.)
Irdeto BV
Original Assignee
Irdeto BV
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 Irdeto BV filed Critical Irdeto BV
Publication of CN104303187A publication Critical patent/CN104303187A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • 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]
    • 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/16Program or content traceability, e.g. by watermarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

本发明涉及一种为接收器提供初始软件项目的某一版本的方法,所述方法包括:对于共同形成初始软件项目的初始软件项目的多个节段当中的每一个,获得该节段的一个或更多对应的版本,其中对于至少其中一个节段获得该节段的对应的多个不同版本;对于初始软件项目的多个节段当中的每一个,选择将由接收器使用的该节段的对应版本,所述选择被设置成使得可以从所选版本的集合识别接收器;以及通过使得接收器能够访问初始软件项目的各个节段的所选版本,为接收器提供初始软件项目的某一版本。

Description

软件加指纹
技术领域
本发明涉及为接收器提供初始软件项目的某一版本,以及用于或者允许为接收器提供初始软件项目的某一版本的方法、系统、计算机程序和数据结构。
背景技术
用户(或者其客户端设备或接收器设备)能够通过网络下载软件(例如从服务器系统下载)是众所周知的。举例来说,可以通过所谓的“应用商店”获得或者可以从中下载到各种设备的可下载软件的基础设施日益增多,所述各种设备比如有移动电话、平板设备、膝上型计算机、电视机、机顶盒、游戏机、个人计算机等等。
这里所使用的术语“软件”可以是指被设计用于在计算机系统上执行的一个或更多指令序列,并且可以包括子例程、函数、规程、对象方法、对象实现方式、应用、小应用程序(applet)、小服务器程序(servlet)、源代码、对象代码、机器或可执行代码、共享库、动态链接库以及/或者被设计用于在计算机系统的处理器上执行的其他指令序列。
软件的开发者和分发器所面临的一个问题在于,软件可能通过未经授权的再分发平台以未经授权的方式被分发。鉴于软件的数字性质以及能够产生并且随后向其他人传送数字内容的精确拷贝的容易程度,使得这种未经授权的散播变得特别容易。
对内容进行数字加水印是众所周知的。所述内容可以包括任何类型的数字数据或数字信号,并且可以包括音频数据、图像数据、视频数据、文字数据、多媒体数据、网页、软件产品、安全性密钥、实验数据或者任何其他种类的数据当中的一项或更多项。存在许多用于对内容实施数字加水印的方法,但是一般来说其全部涉及向软件项目添加水印。这就涉及修改或改变原始内容项目以便形成加有水印的内容项目——所做出的修改或改变可以代表将被嵌入在所述内容项目中的有效载荷数据,或者可以简单地被使用来标识该特定的加有水印的内容项目。随后可以将加有水印的内容项目分发到一个或更多用户(或者接收方或接收器)。
数字取证加水印(其常被称作指纹加水印或者简单地称作加指纹)正越来越多地被用来追踪或识别已被提供给一个(或更多)用户/接收器的特定内容拷贝,从而识别出所述一个(或更多)用户/接收器。这可以例如被用来追踪以未经授权的方式(比如未经授权的在线内容分发或公开)“泄露”其内容的用户。对于这种类型的加水印处理,为每一个合法的/经过授权的接收器/用户指派对应的水印代码字。每一个接收器/用户接收或者被允许访问原始内容项目的一份拷贝,其已被修改成代表或者对应于其对应的水印代码字。随后如果找到所述内容项目的未经授权的拷贝,则可以从该内容项目中解码所述水印代码字,并且可以识别出对应于已解码水印代码字的接收器/用户。
软件迷乱(software obfuscation)是可以被用来提高软件的复杂度并且从而使得对于软件的逆向工程更加困难的一种已知的技术。多种技术可用来模糊软件项目中的执行流程和数据流程。举例来说,美国专利US7395433(其全部公开内容被通过引用合并在此)描述了用来将源代码变换成源代码的被迷乱版本的各种方法。欧洲专利申请EP2104987(其全部公开内容被通过引用合并在此)描述了一种用于软件的指纹加水印技术——在该方法中,被用来迷乱软件的一个或更多构造被那些迷乱构造的对应的不同变型替换,以便产生该软件的唯一的特定实现方式实例。其他软件迷乱和加水印技术是已知的,因此在这里将不做详细描述——其具体细节与这里的讨论不相关。
现有的指纹加水印技术不适合于其中例如将从分发服务器或“应用商店”分发软件的情形。具体来说,在对一个软件项目加水印中的处理开销(例如通过将独有的水印插入到应用中)常常涉及针对特定平台的编译和链接步骤,并且这对于分发服务器来说常常过于复杂(在处理要求、所需时间和可维护性方面)。此外,为了提高安全性,迷乱加水印工具提供商优选地使其工具对于外部各方(比如分发器)不可用,因为这样会将所述工具暴露于更大的人群,其中潜在地包括一个或更多攻击者。
发明内容
鉴于前述问题,将希望能够通过可以追踪未经授权的拷贝和未经授权的分发的方式来分发软件,与此同时不会在软件分发器方面施加过大的处理开销。
根据本发明的第一方面,提供一种为接收器提供初始软件项目的某一版本的方法,所述方法包括:对于共同形成初始软件项目的初始软件项目的多个节段当中的每一个,获得该节段的一个或更多对应的版本,其中对于至少其中一个节段获得该节段的对应的多个不同版本;对于初始软件项目的多个节段当中的每一个,选择将由接收器使用的该节段的对应版本,所述选择被设置成使得可以从所选版本的集合识别接收器;以及通过使得接收器能够访问初始软件项目的各个节段的所选版本,为接收器提供初始软件项目的某一版本。
在一些实施例中,对于为之获得该节段的对应的多个不同版本的初始软件项目的每一个节段,所述对应的多个不同版本是该节段的被不同地加水印的版本。但是其他修改技术也可以被用来获得一个节段的不同版本。
在一些实施例中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:从初始软件项目的各个节段的所选版本形成初始软件项目的所述版本;以及将初始软件项目的所形成的版本传送到接收器。
在一些实施例中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:对于初始软件项目的各个节段的一个或更多所述所选版本当中的每一个,向接收器标识出接收器可以从其处获得该所选版本的相应地址。在这样的实施例中,对于初始软件项目的某一节段的至少一个版本,获得初始软件项目的所述节段的所述版本可以包括获得一个地址,其中接收器可以从该地址获得初始软件项目的所述节段的该版本。
在一些实施例中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:形成第二软件项目,所述第二软件项目包括:(a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的至少一个节段的至少其中之一,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的至少一个节段的所述至少其中之一当中的每一个,该节段的不同版本被彼此不同地加密;以及(b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应的所选版本;将第二软件项目传送到接收器;以及为接收器提供解密数据,以使得接收器能够解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本。在这样的实施例中,所述获得可以包括:(a)获得所述已加密版本;或者(b)通过对相应的未加密版本进行加密而生成所述已加密版本。
在一些实施例中,所述获得包括获得第二软件项目,所述第二软件项目包括:(a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的所述至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及(b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应版本;并且使得接收器能够访问初始软件项目的各个节段的所选版本包括:将第二软件项目传送到接收器;以及为接收器提供解密数据,以使得接收器能够解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本。
在一些实施例中,所述获得包括获得第二软件项目,所述第二软件项目包括:(a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的所述至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及(b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应版本;并且使得接收器能够访问初始软件项目的各个节段的所选版本包括:通过解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本,从第二软件项目形成所述软件项目的版本;以及将软件项目的所形成的版本传送到接收器。
在一些实施例中,第二软件项目包括用以允许所述解密的功能。
在一些实施例中,如果两个不同版本是利用不同的加密密钥和/或不同的加密算法进行加密,则其被不同地加密。
在一些实施例中,所述使得接收器能够访问初始软件项目的各个节段的所选版本是响应于接收到来自接收器的针对初始软件项目的某一版本的请求而实施的。
在一些实施例中,所述对于初始软件项目的多个节段当中的每一个选择将由接收器使用的该节段的对应版本是响应于接收到来自接收器的针对初始软件项目的某一版本的请求而实施的。
在一些实施例中,对于为之获得该节段的对应的多个不同版本的初始软件项目的每一个节段,该节段的不同版本被设置成使得分别利用该节段的不同版本的初始软件项目的各个版本将在被供应相同的输入数据时生成相同的输出数据。
在一些实施例中,所述方法包括:识别出共同形成初始软件项目的初始软件项目的多个节段。在这样的实施例中,所述获得可以包括:对于所述至少其中一个节段当中的每一个,生成该节段的所述多个不同版本。
在一些实施例中,被提供到接收器的初始软件项目的版本包括分支表,以便在初始软件项目的所述版本由接收器执行时促进处理流程的控制。所述分支表可以至少部分地由第二软件项目生成。
根据本发明的第二方面,提供一种用于为接收器提供初始软件项目的某一版本的方法,所述方法包括:识别出共同形成初始软件项目的初始软件项目的多个节段;对于所述多个节段的至少其中之一,生成该节段的对应的多个不同版本;以及将所述多个节段的至少其中之一的所生成的版本连同除了所述多个节段的至少其中之一之外的所述多个节段当中的其他任何节段提供到软件分发系统,所述软件分发系统被设置成实施根据在前权利要求中任一项的方法。
在一些实施例中,所述提供包括为软件分发系统提供一个地址,接收器可以从所述地址获得所述多个节段的至少其中之一的其中一个或更多所生成的版本,并且/或者接收器可以从所述地址获得除了所述多个节段的至少其中之一之外的所述多个节段当中的其中一个或更多任何其他节段。
在一些实施例中,所述提供包括:对于多个节段的所述至少其中之一当中的一个或更多个,对该节段的所述对应的多个不同版本进行加密,其中该节段的所述对应的多个不同版本被彼此不同地加密;将所述已加密版本提供到软件分发系统;以及为软件分发系统提供解密数据以允许对所述已加密版本进行解密。
在一些实施例中,所述提供包括:形成第二软件项目,所述第二软件项目包括:(a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之生成该节段的对应的多个不同版本的至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之生成该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及(b)除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段;将所述第二软件项目提供到所述软件分发系统;以及为软件分发系统提供解密数据以允许对所述已加密版本进行解密。
根据本发明的第三方面,提供一种对应于初始软件项目的数据结构,所述数据结构包括:对于共同形成初始软件项目的初始软件项目的多个节段当中的一个或更多节段当中的每一个,该节段的至少一个已加密版本,存在至少一个节段,其数据结构包括该节段的对应的多个已加密的不同版本,该节段的不同版本被彼此不同地加密;以及对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的多个节段当中的其他每一个节段,该节段的对应版本。
在一些实施例中,所述数据结构还包括解密数据,以便允许数据结构的接收方对数据结构内的初始软件项目的某一节段的一个或更多已加密版本进行解密。
所述数据结构可以被存储在计算机可读介质上。
根据本发明的第四方面,提供一种设备,其包括处理器并且被配置成使得所述处理器实施前面所描述的任一种方法。
根据本发明的第五方面,提供一种计算机程序,其在由处理器执行时使得处理器实施前面所描述的任一种方法。所述计算机程序可以被存储在计算机可读介质上。
因此,利用本发明的实施例,软件分发器(比如应用商店)可以更加容易地生成某一软件项目的加有指纹的版本,这是通过使得接收器能够访问该软件项目的各个节段的不同版本当中的特定版本而实现的。软件分发器自身不需要实际实施任何软件迷乱和/或水印处理——其只需要使得接收器能够访问软件的适当节段。
附图说明
现在将参照附图仅通过举例的方式来描述本发明的实施例,其中:
图1示意性地示出了根据本发明的一个实施例的示例性系统,其中可以布置软件指纹加水印;
图2示意性地示出了计算机系统的一个实例;
图3示意性地示出了根据本发明的一个实施例的软件项目以及在该软件项目上实施的处理;
图4是示意性地示出了根据本发明的一个实施例的方法的流程图;
图5是示意性地示出了根据本发明的一个实施例的为接收器提供软件项目的某一拷贝或版本的方法的流程图;
图6是示意性地示出了用于实施图5的方法的根据本发明的一个实施例的一种具体方法的流程图;
图7示意性地示出了可以在图6的方法期间根据本发明的一个实施例形成的图3的软件项目的版本或拷贝;
图8是示意性地示出了用于实施图5的方法的根据本发明的一个实施例的另一种方法的流程图;
图9是示意性地示出了用于实施图5的方法的根据本发明的一个实施例的另一种方法的流程图;
图10a和10b示意性地示出了可以在图9的方法期间根据本发明的一个实施例形成的图3的软件项目的版本或拷贝;以及
图11示意性地示出了图7和10a中示出的实例的组合。
具体实施方式
在后面的描述和附图中描述了本发明的某些实施例。但是应当认识到,本发明不限于所描述的实施例,并且一些实施例可能不包括后面所描述的所有特征。显然地,在不背离如在所附权利要求书中阐述的本发明的更加广泛的精神和范围的情况下,在这里可以做出各种修改和改变。
系统总览
图1示意性地示出了根据本发明的一个实施例的示例性系统100,其中可以布置软件指纹加水印。具体来说,软件来源110生成(或产生)初始(或原始)软件项目,而分发器120则被设置成向一个或更多接收器140分发(或提供或供应)该软件项目的各个拷贝或版本。
分发器120可以被设置成通过网络130与接收器140通信,从而使得分发器120可以通过网络130向接收器140提供软件的某一拷贝或版本。在这种情况下,网络130可以是适合于从分发器120向接收器140传输或传送软件拷贝的任何种类的网络。举例来说,网络130可以包括以下各项当中的一项或更多项:局域网、广域网、城域网、因特网、无线通信网络、有线电视网络、数字广播网络、卫星通信网络、电话网络等等。分发器120于是可以经由任何适当的通信机制/协议通过网络130与接收器140通信,以便在分发器120与接收器140之间传送数据(比如软件拷贝,并且在必要时还有任何其他所需信息,比如有条件访问数据或数字权利管理数据)。但是应当认识到,其他通信情形也是可能的。举例来说,分发器120可以向接收器140提供存储软件拷贝的物理介质(比如CD、DVD、BluRay(蓝光)盘等等),在这种情况下可以省略网络130。
按照类似的方式,软件来源110可以被设置成通过网络与分发器120通信——在图1中,该网络被显示为用于分发器120与接收器140之间的通信的相同的网络130,但是应当认识到,可以替换地使用不同的网络。软件来源110于是可以经由任何适当的通信机制/协议与分发器120通信,以便在软件来源110与分发器120之间传输数据。同样应当认识到,其他通信情形也是可能的。举例来说,软件来源110可以向分发器120提供存储数据的物理介质(比如CD、DVD、BluRay(蓝光)盘等等),在这种情况下可以省略网络130。
虽然图1示出了单一软件来源110、单一分发器120和单一接收器140,但是应当认识到,可以存在多个软件来源110和/或多个分发器120和/或多个接收器140,并且图1已出于解释的目的被简化。
软件来源110、分发器120和接收器140可以分别包括一个或更多计算机系统200。图2示意性地示出了这样的计算机系统200的一个实例。系统200包括计算机202。计算机202包括:存储介质204、存储器206、处理器208、存储介质接口210、用户输出接口212、用户输入接口214以及网络接口216,其全部通过一条或更多条通信总线218链接在一起。
存储介质204可以是任何形式的非易失性数据存储设备,比如硬盘驱动器、磁盘、光盘、ROM等等当中的一项或更多项。存储介质204可以存储供处理器208执行以使得计算机202运作的操作系统。存储介质204还可以存储形成本发明的一个实施例的一部分的一个或更多计算机程序(或者软件或指令或代码)。
存储器206可以是适合于存储数据和/或计算机程序(或者软件或指令或代码)的任何随机存取存储器(存储单元或易失性存储介质)。
处理器208可以是适合于执行一个或更多计算机程序(比如存储在存储介质204上和/或存储在存储器206中的那些计算机程序)的任何数据处理单元,其中一些计算机程序可以是根据本发明的实施例的计算机程序,或者是在由处理器208执行时使得处理器208实施根据本发明的一个实施例的方法并且将系统200配置成根据本发明的一个实施例的系统的计算机程序。处理器208可以包括单一数据处理单元或者并行地或彼此协作地操作的多个数据处理单元。处理器208在实施用于本发明的实施例的数据处理操作时,可以向/从存储介质204和/或存储器206存储和/或读取数据。
存储介质接口210可以是用于向处于计算机202的外部或者可以从计算机202移除的数据存储设备222提供接口的任何单元。数据存储设备222例如可以是光盘、磁盘、固态存储设备等等当中的一项或更多项。存储介质接口210因此可以根据其接收自处理器208的一条或更多条命令从数据存储设备222读取数据或者向数据存储设备222写入数据。
用户输入接口214被设置成接收来自系统200的用户或操作员的输入。用户可以经由系统200的一个或更多输入设备来提供这一输入,比如连接到用户输入接口214或者与之通信的鼠标(或其他指示设备)226和/或键盘224。但是应当认识到,用户可以经由一个或更多附加的或替换的输入设备(比如触摸屏)向计算机202提供输入。计算机202可以把经由用户输入接口214接收自输入设备的输入存储在存储器206中以供处理器208后来访问和处理,或者可以将其直接传递到处理器208,从而使得处理器208可以对用户输入相应地做出响应。
用户输出接口212被设置成向系统200的用户或操作员提供图形/视觉和/或音频输出。因此,处理器208可以被设置成指示用户输出接口212形成代表所期望的图形输出的图像/视频信号,并且将该信号提供到与用户输出接口212连接的系统200的监视器(或者屏幕或显示单元)。附加地或替换地,处理器208可以被设置成指示用户输出接口212形成代表所期望的音频输出的音频信号,并且将该信号提供到与用户输出接口212连接的系统200的一个或更多扬声器221。
最后,网络接口216提供使得计算机202从/向一个或更多数据通信网络(比如图1的网络130)下载和/或上传数据的功能。
应当认识到,在图2中示出并且在前面描述的系统200的架构仅仅是示例性的,并且在本发明的实施例中可以使用具有不同架构(例如具有比图2中所示出的更少的组件,或者具有除了图2中所示的之外的附加和/或替换组件)的其他计算机系统200。还应当认识到,内容来源110、分发器120和接收器140可以使用不同种类的计算机系统200。作为实例:对应于内容来源110的所述或每一个计算机系统200可以是个人计算机或服务器计算机;对应于分发器120的所述或每一个计算机系统200可以是个人计算机或服务器计算机;并且对应于所述或每一个接收器140的所述或每一个计算机系统200可以是移动电话、平板设备、膝上型计算机、电视机、机顶盒、游戏机、个人计算机、服务器计算机、其他移动设备或消费电子设备等等当中的一项或更多项。
在本发明的一些实施例中,内容来源110和分发器120可以是单一集成系统——在这样的实施例中,内容来源110与分发器120之间的功能和处理的分离纯粹是概念性的,并且仅仅是为了易于解释而在这里给出。
指纹加水印
本发明的实施例可以利用软件加水印。已经知道存在多种软件加水印技术,并且借以对软件项目加水印的具体方法对于本发明的实施例不重要。举例来说,如前所述,软件迷乱是可以被用来提高软件的鲁棒性并且从而使得逆向工程更加困难的一种已知的技术。多种技术可用于模糊软件项目中的执行流程和数据流程——美国专利US7395433描述了用来将源代码变换成源代码的被迷乱版本的各种方法。欧洲专利申请EP2104987描述了一种用于软件的指纹加水印技术——在该方法中,被用来迷乱软件的一个或更多构造被那些迷乱构造的不同变型替换,以便产生该软件的唯一的特定实现方式实例。本发明的实施例可以利用在US7395433和EP2104987中描述的加水印技术,但是应当认识到,其他软件迷乱和加水印技术也是已知的,并且可以被替换地使用在本发明的实施例中。一些软件加水印技术在源代码上操作;一些软件加水印技术在已编译源代码上操作,即在对象代码上操作;并且一些软件加水印技术在已联编/已链接对象代码上操作,即在可执行代码(或机器代码)上操作。本发明的实施例可以利用这些种类的加水印技术当中的任一种。
图3示意性地示出了根据本发明的一个实施例的软件项目300以及在该软件项目300上实施的处理。如前所述,软件项目300可以包括被设计用于在计算机系统(比如接收器140)上执行的一个或更多指令序列,并且可以包括子例程、函数、规程、对象方法、对象实现方式、应用、小应用程序、小服务器程序、源代码、对象代码、机器或可执行代码、共享库、动态链接库以及/或者被设计用于在计算机系统的处理器上执行的其他指令序列。软件项目300还可以包括不同数量的数据(比如静态/恒定数值、查找表等等)。
可以通过一种或更多种软件迷乱技术(比如在US7395433和EP2104987中阐述的那些技术)来保护其中一些或所有软件项目300。图3示出了尚未通过一种或更多种软件迷乱技术得到保护的软件项目300的部分302,以及已经通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304。软件迷乱技术可能不适用于软件项目300的某些部分,这也正是可能有软件项目300的一个或更多部分302尚未通过一种或更多种软件迷乱技术得到保护的原因。但是应当认识到,对于一些软件项目300,可能不存在尚未通过一种或更多种软件迷乱技术得到保护的软件项目300的部分302——也就是说可以通过软件迷乱技术来保护整个软件项目300。
然而使用软件迷乱技术来生成软件项目300对于本发明并非是至关重要的(使得可能没有通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304),但是通过软件迷乱所产生的代码冗余性可以有助于加水印处理,并且通过软件迷乱产生的附加保护也有助于提高软件的安全性。但是一些软件加水印技术操作在被迷乱软件上或者与之相结合来工作,并且在利用这样的软件加水印技术的实施例中,软件项目300将需要已经通过一种或更多种软件迷乱技术得到保护的至少一个部分304。举例来说,软件加水印技术可以生成软件项目的加有水印的版本,这是通过作为迷乱技术的一部分改变(或者修改或替换)被用来编码数据的一个或更多编码函数或迷乱函数(例如参见EP2104987中阐述的加水印技术)。
任何特定的软件加水印技术都将在可能属于特定类型的特定适当数量(或者单元或部分或部件或节段)的软件上操作。具体来说,软件加水印技术可以通过修改属于特定类型的一定数量的软件的来运作,比如以下各项当中的一项或更多项:软件项目300内的静态/恒定数据(例如查找表、恒定数值等等);与函数内的流程控制或数据流程有关的指令;被用来编码或迷乱数据数值的函数等等。软件加水印技术可以通过修改最少或特定数量(或者单元或部分或部件或节段)的软件来运作。举例来说,软件加水印可以通过与其他指令隔离地修改一条或更多条指令来操作(在这种情况下,所述最小/特定数量处于指令层级);软件加水印可以通过与另一个函数或规程隔离地修改某一函数或规程来操作(在这种情况下,所述最小/特定数量处于函数层级);软件加水印可以通过与另一个静态/恒定数据数值隔离地修改一个静态/恒定数据数值来操作(在这种情况下,所述最小/特定数量处于静态/恒定数据数值的层级);软件加水印可以通过与另一个数据数值块(例如另一个查找表)隔离地修改一个数据数值块(例如查找表)来操作(在这种情况下,所述最小/特定数量处于例如查找表之类的数据数值块的层级)等等。
本发明的实施例涉及识别和选择适合于将要使用的特定软件加水印技术的软件项目300的一个或更多节段Ci(或者部件或组块或单元或部分或数量),也就是说每一个节段Ci属于适当类型并且/或者具有一定数量/尺寸,从而使得所述加水印技术可以在该节段Ci上操作或者被应用于该节段Ci,以便产生该节段Ci的加有水印的或者经过修改的版本。举例来说,在EP2104987中阐述的加水印技术通过改变(或者修改或替换)使用在软件迷乱中的一个或更多编码函数来操作——在这种情况下,软件项目300的适当的节段Ci可以分别对应于或者至少包含对应的编码函数。作为另一个实例,对于通过修改查找表来操作的加水印技术,软件项目300的适当的节段Ci可以被识别为或者至少可以包含软件项目300中的一个或更多查找表。一个节段Ci不一定需要仅仅是可以为之应用将被使用的加水印技术的软件项目300的最小数量——所述节段Ci可以包括附加数量的软件项目300。举例来说,软件项目300的一部分或全部(比如部分304)可以被划分成一定数目的节段(其潜在地具有相等的尺寸),并且可以对这些节段当中的每一个进行测试以检查其是否适合于通过将要使用的加水印技术来加水印——如果适合的话,则可以将其选择成其中一个所选节段Ci
在图3中有四个适当的节段C1、C2、C3和C4,但是应当认识到这纯粹是示例性的,并且在实践中所识别出和选择的适当节段Ci的数目可以由实际适合于所采用的加水印技术的软件项目300的节段数目来限制。此外,可以对于将要选择的节段Ci的数目设置上限,这是因为可能只需要预定的最大数目T——因此,如果在软件项目300中识别出多于预定最大数目T的适当节段,则本发明的实施例可以仅从所有那些识别出的适当节段当中选择阈值最大数目T(举例来说:作为随机选择;或者尝试确保所选的各个节段均匀地分发在软件项目300中的选择;或者选择前T个、中间的T个或者最后的T个适当节段等等)。
图3示出了处于已经通过一种或更多种软件迷乱技术得到保护的软件项目300部分304中的三个节段C1、C2和C3,以及处于尚未通过一种或更多种软件迷乱技术得到保护的软件项目300的部分302中的一个节段C4,但是应当认识到这仅仅是示例性的。如果加水印技术仅操作在已经通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304上,则所有节段Ci都将位于已经通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304内;如果加水印技术不需要操作在已经通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304上,则其中一些或所有节段Ci可以位于尚未通过一种或更多种软件迷乱技术得到保护的软件项目300的部分302中。实际上,一个节段Ci的一部分可以处于尚未通过一种或更多种软件迷乱技术得到保护的软件项目300的部分302中,而该节段Ci的另一部分则可以处于已经通过一种或更多种软件迷乱技术得到保护的软件项目300的部分304中。
虽然各个节段Ci在图3中被图示为软件项目300的连续部分,但是不需要是这种情况。举例来说,特定加水印技术可以涉及修改对一定数量的数据(例如一个输入数值)进行编码的函数,并且还修改在已对所述已编码数量的数据进行处理之后实施解码操作(例如作为编码操作的反转)的函数——所述编码和解码函数在软件项目300内可以是间隔开的,但是可以一同作为软件项目300的单一适当节段Ci来看待和应对。
虽然图3将软件项目300图示为单一软件“文件”(或者连续数量),但是本发明也可以在软件项目300包括多个文件(比如主程序文件以及/或者一个或更多配置文件以及/或者一个或动态链接库等等)的情况下操作。在这种情况下,节段Ci的集合可以分布在多个文件中。实际上,单一(分段化)节段Ci可以分布在多个文件中。
在图3中,除去所选节段Ci之后的软件项目300包括五个其他节段D1、D2、D3、D4和D5。这可以替换地被视为单一“其他”(非连续)节段D(D1、D2、D3、D4和D5的合并/组合)。该节段D在后面应当被称作“残留节段”D。
对于每一个所选节段Ci,本发明的实施例涉及形成该节段Ci的对应的多个不同版本,这例如是通过对节段Ci进行修改或加水印从而形成节段Ci的对应的经过不同地修改或加水印的版本。为了一般性起见,假设所选的适当节段Ci的数目为N,并且对于每一个所选节段Ci(i=1,...,N),设对于节段Ci形成的版本数目为Mi(其中Mi>1),于是对应于节段Ci的第j个版本(j=1,...,Mi)应当被表示为Ci,j。因此,可以通过Mi种不同方式对节段Ci进行修改或加水印,从而使得每一个对应的版本Ci,j代表(或者可能已经在其中嵌入)Mi个不同的代码字或数值的其中之一,例如数值0,1,...,(Mi-1)。Mi的数值可以对于所有所选节段Ci都是相同的(例如Mi可以对于所有所选节段Ci都等于2);但是如图3(其中M1=M3=M4=2,但是M2=4)中所示,这并不是至关重要的。
优选的是,生成每一个所选适当节段Ci的不同版本,从而使得使用所选节段的一个版本将产生与使用该所选节段的另一个版本相同的结果。换句话说,对于每一个节段Ci,该节段Ci的不同版本Ci,j被优选地设置成使得分别利用该节段Ci的不同版本Ci,j(以替代该节段Ci)的软件项目300的各个版本在被供应相同的输入数据时将生成相同的输出数据。换句话说,不同的版本Ci,j可以全部实施相同的总体功能/目的,但是可以通过不同方式实现这一总体功能/目的。在EP2104987中阐述的加水印技术提供了实现这一方面的修改技术的实例。
在本发明的一些实施例中,接收器140(或目标平台)可以执行用于解译源代码的解译器,以便执行软件项目(而不是执行已编译代码)。举例来说,软件项目可以是用例如Visual Basic之类的语言编写的,其是已解译语言。在这样的实施例中,软件项目300是源代码,并且本发明的实施例操作在源代码上。因此,每一个所选节段Ci的各个不同版本Ci,j是源代码的不同节段。
对于本发明的其他实施例,其意图可以是为接收器140提供已编译软件。对于操作在可执行代码上的本发明的实施例(也就是说当软件项目300已经处于机器代码层级并且加水印技术操作在机器代码上时),则每一个所选适当节段Ci的各个版本Ci,j(i=1,...,N,j=1,...,Mi)以及残留节段D(如果其存在的话)也已经处于可执行代码形式。但是对于并非操作在可执行代码上的本发明的实施例,各个版本Ci,j最初将不是可执行代码,因此实施进一步的处理以便形成处于可执行代码形式的版本Ci,j,也就是说将每一个“中间”版本Ci,j转换成相应的“最终”机器代码版本Ci,j。具体来说,对于操作在源代码上的本发明的实施例(也就是说当软件项目300处于源代码层级并且加水印技术操作在源代码上时),对于每一个所选适当节段Ci的每一个版本Ci,j(i=1,...,N,j=1,...,Mi)并且对于残留节段D(如果其存在的话)生成相应的可执行/机器代码(通过对于目标平台所必要的编译以及链接/联编)。这例如可以通过在软件项目300中使用节段Ci,j来替代相应的原始节段Ci并且随后对软件项目300进行编译以及链接/联编来实现。随后可以识别出对应于节段Ci,j的所得到的可执行代码的部分(取决于加水印技术的性质,这例如是通过寻找相应的函数入口点和出口点的位置或者查找表的位置等等)——所识别出的该部分随后被用作相应的“最终”机器代码版本Ci,j。相同的操作类似地适用于残留节段D(或者其各个子部分Di)。对于操作在对象代码上的本发明的实施例(也就是说当软件项目300处于对象代码层级并且加水印技术操作在对象代码上时),对于每一个所选适当节段Ci的每一个版本Ci,j(i=1,...,N,j=1,...,Mi)并且对于残留节段D(如果其存在的话)生成相应的可执行代码(通过对于目标平台所必要的链接/联编)。这可以通过类似于前面对于源代码所阐述的方式来实现。
因此,对于其中软件项目300意图由接收器140上的解译器运行的本发明的实施例,对于每一个所选适当节段Ci生成的各个版本Ci,j(i=1,...,N,j=1,...,Mi)是对应于该节段Ci的源代码的经过不同地修改的部分。对于其中软件项目300意图作为可执行/机器代码被运行在接收器140上的本发明的实施例,对于每一个所选适当节段Ci生成的各个版本Ci,j(i=1,...,N,j=1,...,Mi)是对应于该节段Ci的机器代码的经过不同地修改的部分——在这些情况中,可能需要编译以及链接/联编步骤(正如前面所阐述的那样),这取决于初始软件项目300的形式(源代码、对象代码或机器代码)以及加水印技术可以操作在其上的代码类型。
图4是示意性地示出了根据本发明的一个实施例的方法400的流程图。该方法400例如可以由内容来源110实施。
在步骤S402处,生成初始软件项目300。举例来说,正如在本技术领域内众所周知的那样,一位或更多位软件工程师/设计师可以编码出并且创建软件项目300。软件项目300可以处于源代码形式、对象代码形式或机器代码形式(其选择取决于后面所阐述的步骤S404和S406的性质并且适合于所述步骤)。
在步骤S404处,对初始软件项目300应用一种或更多种软件迷乱技术,从而生成被迷乱软件项目300。如前所述,这样的软件迷乱技术在本技术领域内是众所周知的,并且因此在这里将不做详细描述。
在步骤S406处,识别出软件项目300的其中一个或更多节段,所述多个节段当中的每一个适合于应用修改处理,比如软件加水印处理。如前所述,这样的软件加水印处理在本技术领域内是众所周知的,并且识别出适合于加水印的软件数量(以便能够应用加水印处理)同样是众所周知的——因此在这里不对其进行详细描述。选择一定数目的所识别出的节段以供未来使用——这可以涉及选择所有识别出的节段或者选择预定数目的所识别出的节段,或者某种其他选择标准。因此,步骤S406导致识别出并且选择软件项目300的多个节段Ci
应当提到的是,如果将要使用的加水印技术不依赖于具有被迷乱部分304的软件项目300,则可以省略步骤S404。
在步骤S408处,对于每一个所选节段Ci,生成该节段Ci的多个不同版本,这例如是通过使用加水印处理来生成该节段Ci的被不同地加水印的版本Ci,j。如前所述,可能必须将不同地加水印的版本Ci,j(如果存在的话还有残留节段D)转换成机器代码,这取决于软件项目300的初始形式以及目标平台的性质,即接收器140是否将解译源代码或执行机器代码。
因此,在步骤S408结束时,初始软件项目300(或者如果使用步骤S404的话是被迷乱软件项目300)可以被视为由多个分开的(无重叠)节段(对应于i=1,...,N的Ci,以及如果存在的话还有残留节段D)形成,这些节段当中的每一个具有该节段的一个或更多对应版本,至少其中一个节段(即对应于i=1,...,N的所选节段Ci)具有该节段的对应的多个不同版本(即对应于i=1,...,N和j=1,...,Mi的各个版本Ci,j)。
图5是示意性地示出了根据本发明的一个实施例的为接收器140提供软件项目300的某一拷贝或版本的方法500的流程图。该方法500可以由分发器120实施。
在步骤S502处,对于形成软件项目300的多个分开的节段当中的每一个(即节段C1,...CN并且如果存在的话还有D),获得该节段的一个或更多对应的版本(并且可能例如存储在存储器或数据库中)。具体来说,对于每一个节段C1,...CN,获得对应的多个不同版本                                                (i=1,...,N);对于残留节段D(如果其存在的话)或者其各个子部分D1,D2,...,该节段仅有一个版本,并且因此仅获得残留节段D(或者其各个子部分D1,D2,...)的初始版本。这些节段可以从软件来源110被提供到分发器120并且由其获得。
为接收器140提供软件项目300的一份拷贝,其由每一个所选节段Ci的各个版本Ci,j(i=1,...,N和j=1,...,Mi)还有(如果存在的话)残留节段D形成。因此,在步骤S504处,对于特定接收器140,对于每一个节段Ci(i=1,...,N),在1≤vi≤Mi的范围内选择一个索引vi,从而使得索引序列(v1,v2,...,vN)标识出该接收器140。举例来说,对于将要为之提供软件项目300的一份拷贝的每一个接收器140,可以生成对于该接收器140所独有(或者特有或与之对应)的索引序列(v1,v2,...,vN)。每一个索引vi(i=1,...,N)可以被视为范围(或字母表)1≤vi≤Mi内的一个符号,于是索引序列(v1,v2,...,vN)是与接收器140相关联的指纹代码字——于是有多种方式来选择适当的索引序列(v1,v2,...,vN)以充当对应于接收器140的指纹代码字,正如本技术领域内所熟知的那样。索引序列(v1,v2,...,vN)可以总体上或者部分地由分发器120和/或软件来源110和/或某一其他第三方(即替换来源)选择。索引序列(v1,v2,...,vN)在序列层级可以具有冗余性,这是在于即使索引序列(v1,v2,...,vN)中的一些索引被省略或者被改变/破坏(例如如果找到软件的“疑似”版本,但是该“疑似”版本已经被篡改或者仅仅是部分地完成),仍然可以识别出特定接收器140。
因此,对于软件项目的多个节段当中的每一个(即节段C1,...,CN以及如果存在的话还有D),为接收器140选择该节段的对应版本。当然,对于仅仅存在一个版本的节段(比如残留节段D或者其各个单独的部分D1,D2,...,取决于个人角度),所选版本是原始版本。对于各个节段Ci,对应于该节段的所选版本是。所选版本的集合(即以及如果存在的话还有D)可以被用来识别相应的接收器140。具体来说,这一所选版本集合对应于与接收器140相关联(或者为之指派)的索引序列(v1,v2,...,vN)。例如在接收到软件项目的“疑似”版本时,可以在来自该疑似版本的每一个相应的所选节段Ci上实施水印解码操作——所述水印解码操作将揭示出所述疑似版本包含第i个所选节段Ci的第vi个版本(对于i=1,...,N),使得从该疑似版本获得序列(v1,v2,...,vN),从而识别出相应的初始接收器140。分发器120(或者另一个实体,比如受信任的第三方)可以存储与相应接收器140的标识相关联的序列(v1,v2,...,vN),从而可以后来在从软件项目的疑似版本解码出序列(v1,v2,...,vN)的情形下识别出接收器140。
在步骤S506处,为接收器140提供软件项目300的某一拷贝或版本,这是通过使得接收器140能够访问已为该接收器140选择的软件项目300的各个节段的版本,即以及如果存在的话还有D。
因此,所能产生的软件项目300的不同版本的数目是。因此,N的数值和每一个Mi的数值可以被选择成足够大,从而使得可以为接收器140的整个群体(或者至少是预期将为其提供软件项目300的某一版本的一定数目的接收器140)都提供其自身的软件项目300的特定版本。
正如后面所阐述的那样,可以通过多种方式来实施方法500。
图6是示意性地示出了用于实施图5的方法500的根据本发明的一个实施例的特定方法600的流程图。
在步骤S602处,软件来源110实施前面参照图4描述的方法400。软件来源110向分发器120提供软件项目300的各个节段的所有生成的版本(即版本Ci,j(i=1,...,N和j=1,...,Mi)以及如果存在的话还有D)。
在步骤S604处,分发器120例如将所接收到的版本存储在数据库中。
在步骤S606处,接收器140向分发器120发送请求,从而请求软件项目300的某一拷贝或版本。
在步骤S608处,分发器120接收到请求。
在步骤S610处,分发器120实施图5的步骤S504,以便对于软件项目300的多个节段Ci(并且如果存在的话可能还有D)当中的每一个选择将由接收器140使用的该节段的对应版本(即以及如果存在的话还有D),这一选择被设置成使得可以从所选版本的集合识别出从其处接收到所述请求的接收器140。
在步骤S612处,分发器120从软件项目300的各个节段的所选版本(即以及如果存在的话还有D)形成软件项目300的一个版本。
在步骤S614处,分发器120向接收器140传送(或者传输或提供)在步骤S612处形成的软件项目的版本。
虽然步骤S610被图示为是响应于分发器120接收到来自接收器140的请求而实施的,但是应当认识到,可以在无须接收到来自接收器140的请求的情况下实施步骤S610(例如在预期会接收到接收器的请求140的情况下实施)。因此,可以在步骤S606和S608之前实施步骤S610。此外,在本发明的一些实施例中,可以省略步骤S606和S608,例如在其中分发器120向接收器140提供自动软件下载(例如软件更新)的实施例中。
图7示意性地示出了可以根据本发明的一个实施例在步骤S612处形成的软件项目300的版本或拷贝700。该例是基于图3中示出的示例性软件项目300,并且与之对应的所选版本序列例如是(v1,v2,v3,v4)=(1,4,2,1)。
在图7中,通过串连软件项目300的各个节段的所选版本(例如按照对应于原始节段C1,...,CN以及如果存在的话还有D1,D2,...的顺序)形成软件项目300的版本700。残留节段D可以被视为可以将不同版本插入到其中的模板。
但是在一些实施例中(比如其中版本涉及不同的函数或规程),版本700内的版本的排序可以改变(例如无论函数A在版本700内出现在函数B之前还是函数B之后没有区别时)。这例如可以在版本是将由运行在接收器140上的解译器解译的源代码时适用。
在一些实施例中,所选版本可以被存储并且提供为一个或更多分开的文件,从而不需要使用图7中示出的单一文件格式。在这种情况下,分发器120可以将包含所选版本的各个文件组合成适当的下载包以供递送到接收器140。举例来说,每一个版本可以处于其自身对应的DLL文件中,从而使得分发器120可以随后提供主程序文件(其例如代表残留节段D)连同对应于版本的DLL的集合。
应当认识到,分发器120在适当情况下可以通过其他方式在步骤S612形成软件项目300的版本,这取决于其(从软件来源110)所获得的软件项目300的各个节段的版本的具体形式。
图8是示意性地示出了用于实施图5的方法500的根据本发明的一个实施例的另一种方法800的流程图。
在步骤S802处,软件来源110实施前面参照图4描述的方法400。软件来源110向分发器120提供软件项目300的各个节段的所有生成的版本(即版本Ci,j(i=1,...,N和j=1,...,Mi)以及如果存在的话还有D)。
在步骤S804处,分发器120例如将所接收到的版本存储在数据库中。
在步骤S806处,接收器140向分发器120发送请求,从而请求软件项目300的某一拷贝或版本。
在步骤S808处,分发器120接收到请求。
在步骤S810处,分发器120实施图5的步骤S504,以便对于软件项目300的多个节段Ci(并且如果存在的话可能还有D)当中的每一个选择将由接收器140使用的该节段的对应版本(即以及如果存在的话还有D),这一选择被设置成使得可以从所选版本的集合识别出从其处接收到所述请求的接收器140。
在步骤S812处,对于软件项目300的各个节段的所选版本当中的一个或更多个(即以及如果存在的话还有D),分发器120向接收器140标识出接收器140可以从其处获得(或者下载或访问)所选版本的相应地址。所述地址例如可以被提供为URL或URI或者标识出可以在该处下载软件项目300的所述节段的对应的所选版本的位置的任何其他种类的地址/位置/参考信息。各个节段Ci,j可以位于分发器120处的单一文件内,在这种情况下对应于一个节段Ci,j的地址可以标识出偏移量(例如距离文件开头的偏移量)以及可能还有标识出该节段Ci,j的尺寸的长度数值(如果这尚不为接收器140所知的话),从而使得可以在该单一文件内识别出相应的节段Ci,j——所述偏移量和长度数值例如可以被包含在URL内以作为该URL的字段,所述URL标识文件。应当认识到,可以使用用于标识地址的其他机制。除了向接收器140传送地址信息之外,分发器120可以向接收器140传送没有为之向接收器140提供此类地址信息的软件项目300的各个节段的任何所选版本。可以有适用于提供有地址的所有所选节段的单一地址。或者提供有地址的每一个节段可以具有其自身的对应地址——通过这种方式,分发器120可以提供一个地址序列或集合(其可以被视为地址的播放列表)。可以为接收器140提供数据,接收器140可以从所述数据生成所述/每一个地址(与明确地为接收器140提供实际地址不同)。
在步骤S814处,接收器140接收地址信息(可能连同没有为之向接收器140提供此类地址信息的软件项目300的各个节段的一个或更多所选版本)。
在步骤S816处,接收器140(或者下载或访问)已经为之向接收器140提供了对应的地址信息的软件项目300的各个节段的所选版本。具体来说,对于已经为之向接收器140提供了地址信息的软件项目300的一个节段的每一个所选版本,接收器140从通过所述地址信息标识出的位置下载(或者访问或以其他方式获得)该所选版本。
在步骤S818处,接收器140使用在步骤S816处(并且可能还在步骤S814处)获得的软件项目300的各个节段的所选版本形成意图用于该接收器140的软件项目300的版本。这可以按照前面参照图6的步骤S612描述的方式来实施。分发器120可以为接收器140提供(或者使其能够访问)计算机程序,所述计算机程序被配置成从接收器140已获得的软件项目300的各个节段的各个版本形成意图用于接收器140的软件项目300的版本。
虽然步骤S810被图示为是响应于分发器120接收到来自接收器140的请求而实施的,但是应当认识到,可以在无须接收到来自接收器140的请求的情况下实施步骤S810(例如在预期会接收到接收器的请求140的情况下实施)。因此,可以在步骤S806和S808之前实施步骤S810。此外,在本发明的一些实施例中,可以省略步骤S806和S808,例如在其中分发器120向接收器140提供自动软件下载(例如软件更新)的实施例中。
在一些实施例中,取代由软件来源110在步骤S802和S804处向分发器120提供软件项目300的各个节段的所有生成的版本(即版本Ci,j(i=1,...,N和j=1,...,Mi)以及如果存在的话还有D),步骤S802和S804可以涉及由软件来源110向分发器120提供对应于软件项目300的各个节段的其中一些或所有生成的版本的地址信息(即版本Ci,j(i=1,...,N和j=1,...,Mi)以及如果存在的话还有D当中的一些或全部),也就是说分发器不一定需要存储软件项目300的各个节段的所生成的版本,而是可以将其中的一些或全部存储在另一位置处(其甚至可以是软件来源110本身)。实际上,任何软件分发基础设施都可以被用于这一目的,比如对等网络。
图9是示意性地示出了用于实施图5的方法500的根据本发明的一个实施例的另一种方法900的流程图。
在步骤S902处,软件来源110实施前面参照图4描述的方法400。软件来源110向分发器120提供软件项目300的各个节段的所有生成的版本(即版本Ci,j(i=1,...,N和j=1,...,Mi)以及如果存在的话还有D)。
在步骤S904处,分发器120例如将所接收到的版本存储在数据库中。
在步骤S906处,分发器120对为之生成了多个版本的软件项目300的那些节段Ci的每一个版本Ci,j进行加密。还可以对残留节段D(或者其中一些或所有其子部分D1,D2,...)进行加密。每一个版本Ci,j(并且如果将对残留节段D进行加密的话可能还有残留节段D)被与其他版本不同地加密。具体来说,被用来对一个Ci,j进行加密的密码密钥和/或加密算法不同于被用来对其他版本Cs,t(对于(s,t)≠(i,j))进行加密的密码密钥和/或加密算法——换句话说,没有两个版本Ci,j和Cs,t是利用相同的密码密钥和相同的加密算法来加密的。设版本Ci,j的已加密形式被表示为E(Ci,j)。对于软件项目300的某一节段的每一个已加密版本E(Ci,j)(i=1,...,N和j=1,...,Mi),分发器120存储可以被用来对已加密版本E(Ci,j)进行解密的相应的解密信息Ki,j(比如解密算法的解密密钥和/或标识)。如果残留节段D也被加密,则分发器120存储可以被用来对已加密残留节段E(D)进行解密的相应的解密信息KD(比如解密算法的解密密钥和/或标识)。
在步骤S908处,分发器120形成包含所有已加密版本E(Ci,j)连同残留节段D(如果存在的话)或者残留节段的已加密版本E(D)(如果其存在并且被加密的话)的软件项目300的版本。将参照图10a对此进行简短地描述。
在步骤S910处,接收器140向分发器120发送请求,从而请求软件项目300的某一拷贝或版本。
在步骤S912处,分发器120接收到请求。
在步骤S914处,分发器120实施图5的步骤S504,以便对于软件项目300的多个节段Ci(并且如果存在的话可能还有D)当中的每一个选择将由接收器140使用的该节段的对应版本(即以及如果存在的话还有D),这一选择被设置成使得可以从所选版本的集合识别出从其处接收到所述请求的接收器140。
在步骤S916处,分发器120向接收器140传送(或者传输或提供)在步骤S908处形成的软件项目的版本连同解密数据K,所述解密数据K包括对应于在步骤S914处选择的各个节段的已加密版本(即以及如果存在的话还有D)的解密信息(如果残留节段D存在并且已被加密的话还有KD)。
可以通过安全的方式将解密数据K传送到接收器140,从而使得只有接收器140能够访问解密信息(如果残留节段D存在并且已被加密的话还有KD)。举例来说,分发器120可以利用与接收器140相关联的公共密钥对解密数据K进行加密,并且随后将该已加密的解密数据K发送到接收器140。通过这种方式,只有意定的接收器140(其具有对应于所述公共密钥的私有/秘密密钥)能够对已加密的解密数据K进行解密。
由于在步骤S908处形成的软件项目可以对于所有接收器140(或者其特定集合)都是共同的,因此其可以被预先生成并且预先加密。接收器140需要解密数据K来获得所述软件项目的特定的可工作并且加有指纹的版本。因此,解密数据K的提供可以利用比起在步骤S908处形成的软件项目的分发更加受信任的分发机制——因此,分发器120可以包括用于提供在步骤S908处形成的软件项目的第一分发机制,以及用于向接收器140提供解密数据K的更加安全的第二分发机制。
可以将解密数据K与在步骤S908处形成的软件项目的版本相组合(例如从而成为发送到接收器140的软件项目版本的某一数据节段的一部分)。或者可以将解密数据K与在步骤S908处形成的软件项目版本分开地传送到接收器140。
在步骤S918处,接收器140接收在步骤S908处形成的软件项目版本,连同对应于在步骤S914处选择的各个节段的已加密版本(即以及如果存在的话还有D)的解密信息(如果残留节段D存在并且已被加密的话还有KD)。接收器140随后可以使用所述解密信息(如果残留节段D存在并且已被加密的话还有KD)来对相应的已加密版本(如果残留节段D存在并且已被加密的话还有E(D))进行解密,以便获得特定于该接收器140的软件项目300的版本。应当提到的是,接收器140无法解密软件项目300的各个节段的任何其他版本,从而使得接收器140无法形成软件项目300的不同版本。
为了促进前面的解密,密钥信息K可以包含对于每一个已加密的所选版本(如果残留节段D存在并且已被加密的话还有E(D))表明所述已加密的所选版本在步骤S908处形成的软件项目的版本内的位置的数据,从而使得接收器140知道其接收在步骤S908处形成的软件项目版本的哪一个(哪些)部分来进行解密。这一位置信息例如可以包括针对每一个已加密的所选版本的起始和结束位置的指示,以及/或者针对每一个已加密的所选版本的起始位置和长度数值的指示,以及/或者其他位置数据。
可以通过多种方式在接收器140处实施所选的已加密版本(如果残留节段D存在并且已被加密的话还有E(D))的已加密版本的解密。举例来说,接收器140可以执行实施解密处理的特定应用。或者由接收器140运行的软件加载器可以被设置成实施解密处理。或者在步骤S908处形成的软件项目版本可以自身包含(在未加密部分中,例如在残留节段D中)用以实施解密处理的功能,从而使得在运行时间实施解密处理。
虽然步骤S914被图示为是响应于分发器120接收到来自接收器140的请求而实施的,但是应当认识到,可以在无须接收到来自接收器140的请求的情况下实施步骤S914(例如在预期会接收到接收器的请求140的情况下实施)。因此,可以在步骤S910和S912之前实施步骤S914。此外,在本发明的一些实施例中,可以省略步骤S910和S912,例如在其中分发器120向接收器140提供自动软件下载(例如软件更新)的实施例中。
前面的方法900可能有各种变型。举例来说,步骤S904可以被省略——具体来说,分发器120可以作为一项处理对于在步骤S902处接收到的软件项目300的各个节段的版本进行加密并且形成所述软件项目版本(步骤S908),从而使得仅有在步骤S908处形成的软件项目版本随后实际由分发器120存储。或者软件来源110或某一其他实体(而不是分发器120)可以在将已加密版本(而不是明文版本)发送到分发器120(连同相关联的解密信息Ki,j)之前对软件项目300的各个节段的版本实施加密。或者软件来源110或某一其他实体(而不是分发器120)可以在将该版本发送到分发器120(连同相关联的解密信息Ki,j)之前对软件项目300的各个节段的版本实施加密并且还形成所述软件项目版本(步骤S908)。在这种情况下,分发器120可以在向接收器140发送所得到的软件项目之前自身对已加密的所选版本(如果残留节段D存在并且已被加密的话还有E(D))实施解密——通过这种方式,接收器140自身不需要实施任何解密处理。
应当认识到,取代在步骤S908处形成单一软件项目,在步骤S908处可以形成多个此类软件项目,其中每一个对应于接收器140的群体的一个对应子集或者与之相关联。随后在步骤S916处,分发器120可以向发出请求的接收器140传送对应于该发出请求的接收器140所属的接收器群组的软件项目。
图10a示意性地示出了根据本发明的一个实施例的可以在图9的步骤S908处形成的软件项目300的版本或拷贝1000。该例是基于图3中示出的示例性软件项目300,并且为之所选择的版本序列例如是(v1,v2,v3,v4)=(1,4,2,1)。
如图10a中所示,软件项目300的版本1000包含处于已加密形式的软件项目300的每一个所选节段Ci的每一个版本Ci,j,也就是说软件项目300的版本1000包含E(Ci,j)(对应于i=1,...,N和j=1,...,Mi)。在图10a中,残留节段D以未加密形式存在于软件项目300的版本1000中,但是应当认识到,残留节段D也可以按照已加密形式存在于软件项目300的版本1000中,即作为E(D)。
虽然在图10a中示出的软件项目300的版本1000将大于图7中示出的软件项目300的版本700,但是该特定版本1000的一个优点在于,其对于所有接收器140(或者至少其一个子集)都是相同的。换句话说,版本1000是可以分发到所有接收器140(或者至少其一个子集)的通用版本。被传送到接收器140的特定于该特定接收器140的仅有的信息是特定于该接收器140的相对少量的解密数据K。这样就减少了分发器120处的处理量。
图10b示意性地示出了根据本发明的一个实施例的可以在图9的步骤S918处形成的软件项目300的版本或拷贝1002。具体来说,图10b中示出的版本1002对应于图10a中示出的版本1000,此时接收器140已经利用对应于该接收器140的解密数据K对按照已加密形式包含在版本1000内的为该接收器选择的软件项目300的各个节段的版本实施了解密。由于示例性的所选版本序列例如是(v1,v2,v3,v4)=(1,4,2,1),因此传送到接收器140的解密数据K包括解密信息K1,1、K2,4、K3,2、K4,1,并且因此版本C1,1、C2,4、C3,2、C4,1被解密(并且从而可供接收器140使用),而任何其他已加密版本则在版本1002中保持被加密。
一些实施例可以通过组合图7和10a的格式(并且从而组合方法600、800和900的相应功能)来操作。图11示意性地示出了这样的组合格式1100的一个实例。具体来说,软件项目300的各个节段的其中一些所选版本(即对应于第一和第三节段C1和C3以及残留节段D的所选版本C1,1、C3,2和D)被包含在软件项目300的版本1100中——这遵循图7的格式(并且相关联的方法600和800可以类似地适用)。具体来说,对于这些节段C1和C3,其他版本C1,2和C3,1未被包含在版本1100内。但是对于其他节段C2和C4,软件项目300的版本1100包含那些节段的所有已加密版本——这遵循图10的格式(并且相关联的方法900可以类似地适用——具体来说,对应于特定的所选版本C2,4和C4,1的相应的解密信息K2,4和K4,1被提供到接收器140)。
应当认识到,生成特定于请求了初始软件项目300的某一版本的接收器140的软件项目(如前面所阐述的那样)可以涉及在所生成的软件项目内相对于各个函数或规程在初始软件项目300内最初所处的位置移动那些函数或规程(也就是说其存储器地址发生改变)。其他处理或数据流程可能类似地受到影响。举例来说,在图7中所示的版本700中使用节段Ci的一个版本Ci,j可能导致具有特定入口/出口地址的函数,而在图7中所示的版本700中使用该节段Ci的不同版本Ci,k则可能导致具有不同的入口/出口地址的函数。当对应于某一节段Ci的各个版本Ci,j具有不同尺寸时特别会出现这种情况。此外,图10a、10b和11中示出的所生成的软件项目1000、1002、1100的具体形式可以涉及相同函数或规程的多个版本的存在(尽管是按照已加密形式)——于是取决于对于特定接收器140解密哪一个已加密节段E(Ci,j),处理流程对于一个接收器140可能需要进入或离开一个经过解密的已加密节段E(Ci,j),而对于另一个接收器140则可能需要进入或离开不同的经过解密的已加密节段E(Ci,k)。举例来说,节段C3可以包含函数H。对于第一接收器140,对于第一接收器140所选的C3的版本可以是C3,2,并且因此被解密并且可由第一接收器140访问的是C3,2。因此,如果软件项目的执行需要调用函数H,则处理流程需要在C3,2内的某一地址处继续。但是对于第二接收器140,对于第二接收器140所选的C3的版本可以是C3,1,并且因此被解密并且可由第二接收器140访问的是C3,1。因此,如果软件项目的执行需要调用函数H,则处理流程需要在C3,1内的某一地址处而不是在C3,2内的某一地址处继续。
本发明的实施例可以通过利用所谓的“分支表”来应对前面的问题。分支表是众所周知的,并且除了对于理解其与本发明的实施例的使用所必要的部分之外,在这里将不做详细描述。具体来说,分支表充当将函数或规程与其在软件项目内的地址相关联的查找表。分支表可以被用作一个间接层级。具体来说,取代由软件项目内的指令或代码段直接调用函数或规程,该指令或代码段访问分支表以便查找与该函数相关联的地址,从而可以随后将处理流程和处理控制重定向到该地址。因此,如果初始软件项目300尚未利用分支表,则初始软件项目300可以被重新配置成利用分支表,从而在形成特定于特定接收器140的软件项目时使得其可以利用具有反映出其各个函数和规程的地址的适当地址信息的适当分支表。因此,所生成并且提供到接收器140的软件项目可以包括分支表(在图7、10a、10b或11中未示出)。
因此,如果生成特定于请求了初始软件项目300的某一版本的接收器140的软件项目(如前面所阐述的那样)涉及在所生成的软件项目内相对于某一函数或规程在初始软件项目300内最初所处的位置移动该函数或规程(也就是说其地址已发生改变),则可以用新的地址信息相应地更新分支表,从而可以发生正确地寻址的函数调用和规程调用。
类似地,如前所述,图10a、10b和11中示出的所生成的软件项目1000、1002、1100的具体形式可以涉及某一函数或规程的多个版本的存在(尽管是按照已加密形式)——于是取决于对于特定接收器140解密哪一个已加密节段E(Ci,j),处理流程对于一个接收器140可能需要进入或离开一个经过解密的已加密节段E(Ci,j),但是对于另一个接收器140则可能需要进入或离开不同的经过解密的已加密节段E(Ci,j)。通过使用分支表可以解决这一问题,正如后面所阐述的那样。第一种方法可以是简单地使得分发器120在将分支表提供到接收器140之前对其进行修改,从而使得分支表反映出对应于某一函数或规程的地址,其中所述函数或规程在对于该接收器140解密特定的已加密节段E(Ci,j)(其包含该函数或规程)时将是相关的。或者如果函数或规程F出现在节段Ci中,则分支表可以包含对应于出现在所述节段的每一个版本Ci,j中的函数F的地址。当然,对于任何给定的接收器140将仅仅使用(即解密)所述节段的其中一个版本Ci,j,并且因此将需要由该给定接收器140使用该分支表中的适当条目,其中所述适当条目对应于函数F在所述节段的该特定版本Ci,j内的地址。这可以通过将软件项目1000、1002、1100设置成利用解密数据K来选择分支表中的对应于函数F的适当条目来实现。解密数据K可以明确地标识出对于函数F将使用分支表中的哪一个条目;或者例如可以从解密信息Ki,j导出分支表中的条目。举例来说,分支表可以包含以下条目:
条目编号 地址
... ...
322 0x12472551(=对应于C2,1内的函数F的地址)
323 0x12478252(=对应于C2,2内的函数F的地址)
324 0x12484213(=对应于C2,3内的函数F的地址)
325 0x12489669(=对应于C2,4内的函数F的地址)
... ...
如果对应于特定接收器的v2的数值是2,则对应于函数F(其存在于节段C2中,并且因此存在于C2,1、C2,2、C2,3和C2,4当中的每一项中)的所需地址是对应于版本C2,2中的函数F的地址。解密数据K可以包括相关的条目(在这种情形下,当v2=2时是编号323),从而使得软件项目1000、1002和1100可以查找对应于版本C2,2中的函数F的正确地址。或者,软件项目1000、1002、1100可以被设置成在解密数据K(比如解密信息K2,2)上实施一项或更多项测试或操作,以便确定分支表中的相关条目。举例来说,取代具有从中选择适当条目的固定分支表,由加载器或软件本身实施的解密处理可以提供分支表中的适当数值,以便使得软件能够正确地运作。这意味着可以在解密步骤期间完成分支表。取代直接修改分支表条目,所述解密处理可以插入在运行时间期间修改分支表的代码。
在一些实施例中,使得节段Ci的各个版本Ci,j都具有相同的尺寸(例如通过在必要时使用填充)。这样使得更容易构造对应于接收器140的软件项目版本(例如于是可以更容易串连各个版本,或者在把残留节段D视为可以将不同版本插入到其中的模板时将各个版本插入到模板中)。
应当认识到,所描述的方法被显示为按照特定顺序实施的各个单独的步骤。但是本领域技术人员将认识到,可以对这些步骤进行组合或者按照不同顺序来实施,同时仍然实现所期望的结果。
应当认识到,可以利用多种不同的信息处理系统来实施本发明的实施例。具体来说,虽然附图及其讨论提供了示例性的计算系统和方法,但是这些示例性系统和方法仅仅是为了在讨论本发明的各个方面时提供有用的参考而给出的。本发明的实施例可以被实施在任何适当的数据处理设备上,比如个人计算机、膝上型计算机、个人数字助理、移动电话、机顶盒、电视、服务器计算机等等。当然,已出于讨论的目的简化了对于所述系统和方法的描述,并且其仅仅是可以被用于本发明的实施例的许多不同类型的系统和方法的其中之一。应当认识到,各个逻辑方框之间的边界仅仅是说明性的,并且替换的实施例可以合并各个逻辑方框或元件,或者可以在各个逻辑方框或元件上施加替换的功能分解。
应当认识到,前面提到的功能和处理步骤可以被实施为硬件和/或软件。举例来说,前面提到的功能和处理步骤可以被实施为用于由系统的处理器执行的一个或更多软件组件。或者前面提到的功能和处理步骤可以被实施为硬件,比如在一个或更多现场可编程门阵列(FPGA)以及/或者一个或更多专用集成电路(ASIC)以及/或者一个或更多数字信号处理器(DSP)以及/或者其他硬件设置上。
应当认识到,在通过计算机程序来实施本发明的实施例的情况下,载送计算机程序的存储介质和传输介质形成本发明的各个方面。所述计算机程序可以具有一条或更多条程序指令或程序代码,其在由计算机执行时实施本发明的一个实施例。这里所使用的术语“程序”可以是被设计用于在计算机系统上执行的指令序列,并且可以包括子例程、函数、规程、对象方法、对象实现方式、可执行应用、小应用程序、小服务器程序、源代码、对象代码、共享库、动态链接库以及/或者被设计用于在计算机系统上执行的其他指令序列。所述存储介质可以是磁盘(比如硬盘驱动器或软盘)、光盘(比如CD-ROM、DVD-ROM或BluRay(蓝光)盘)或者存储器(比如ROM、RAM、EEPROM、EPROM、闪存或者便携式/可移除存储器设备)等等。所述传输介质可以是通信信号、数据广播、两台或更多台计算机之间的通信链路等等。

Claims (27)

1.一种为接收器提供初始软件项目的某一版本的方法,所述方法包括:
对于共同形成初始软件项目的初始软件项目的多个节段当中的每一个,获得该节段的一个或更多对应的版本,其中对于至少其中一个节段获得该节段的对应的多个不同版本;
对于初始软件项目的多个节段当中的每一个,选择将由接收器使用的该节段的对应版本,所述选择被设置成使得可以从所选版本的集合识别接收器;以及
通过使得接收器能够访问初始软件项目的各个节段的所选版本,为接收器提供初始软件项目的某一版本。
2.权利要求1所述的方法,其中,对于为之获得该节段的对应的多个不同版本的初始软件项目的每一个节段,所述对应的多个不同版本是该节段的被不同地加水印的版本。
3.权利要求1和2中任一项所述的方法,其中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:
从初始软件项目的各个节段的所选版本形成初始软件项目的所述版本;以及
将初始软件项目的所形成的版本传送到接收器。
4.权利要求1和2中任一项所述的方法,其中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:
对于初始软件项目的各个节段的一个或更多所述所选版本当中的每一个,向接收器标识出接收器可以从其处获得该所选版本的相应地址。
5.权利要求4所述的方法,其中,对于初始软件项目的某一节段的至少一个版本,获得初始软件项目的所述节段的所述版本包括获得一个地址,其中接收器可以从该地址获得初始软件项目的所述节段的该版本。
6.权利要求1和2中任一项所述的方法,其中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:
形成第二软件项目,所述第二软件项目包括:
  (a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的至少一个节段的至少其中之一,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的至少一个节段的所述至少其中之一当中的每一个,该节段的不同版本被彼此不同地加密;以及
  (b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应的所选版本;
将第二软件项目传送到接收器;以及
为接收器提供解密数据,以使得接收器能够解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本。
7.权利要求6所述的方法,其中,所述获得包括:(a)获得所述已加密版本;或者(b)通过对相应的未加密版本进行加密而生成所述已加密版本。
8.权利要求1和2中任一项所述的方法,其中,
所述获得包括获得第二软件项目,所述第二软件项目包括:
  (a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的所述至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及
  (b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应版本;并且
其中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:
将第二软件项目传送到接收器;以及
为接收器提供解密数据,以使得接收器能够解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本。
9.权利要求1和2中任一项所述的方法,其中,
所述获得包括获得第二软件项目,所述第二软件项目包括:
  (a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之获得该节段的对应的多个不同版本的所述至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之获得该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及
  (b)对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段,该节段的对应版本;并且
其中,使得接收器能够访问初始软件项目的各个节段的所选版本包括:
通过解密在第二软件项目内被加密的初始软件项目的某一节段的每一个所选版本,从第二软件项目形成所述软件项目的版本;以及
将软件项目的所形成的版本传送到接收器。
10.权利要求5到9中任一项所述的方法,其中,第二软件项目包括用以允许所述解密的功能。
11.权利要求5到10中任一项所述的方法,其中,如果两个不同版本是利用不同的加密密钥和/或不同的加密算法进行加密,则其被不同地加密。
12.在前权利要求中任一项所述的方法,其中,所述使得接收器能够访问初始软件项目的各个节段的所选版本是响应于接收到来自接收器的针对初始软件项目的某一版本的请求而实施的。
13.在前权利要求中任一项所述的方法,其中,所述对于初始软件项目的多个节段当中的每一个选择将由接收器使用的该节段的对应版本是响应于接收到来自接收器的针对初始软件项目的某一版本的请求而实施的。
14.在前权利要求中任一项所述的方法,其中,对于为之获得该节段的对应的多个不同版本的初始软件项目的每一个节段,该节段的不同版本被设置成使得分别利用该节段的不同版本的初始软件项目的各个版本将在被供应相同的输入数据时生成相同的输出数据。
15.在前权利要求中任一项所述的方法,其包括识别出共同形成初始软件项目的初始软件项目的多个节段。
16.权利要求15所述的方法,其中,所述获得包括:对于所述至少其中一个节段当中的每一个,生成该节段的所述多个不同版本。
17.在前权利要求中任一项所述的方法,其中,被提供到接收器的初始软件项目的版本包括分支表,以便在初始软件项目的所述版本由接收器执行时促进处理流程的控制。
18.权利要求17所述的方法,当从属于权利要求9时,其中,所述分支表至少部分地由第二软件项目生成。
19.一种用于为接收器提供初始软件项目的某一版本的方法,所述方法包括:
识别出共同形成初始软件项目的初始软件项目的多个节段;
对于所述多个节段的至少其中之一,生成该节段的对应的多个不同版本;以及
将所述多个节段的至少其中之一的所生成的版本连同除了所述多个节段的至少其中之一之外的所述多个节段当中的其他任何节段提供到软件分发系统,所述软件分发系统被设置成实施根据在前权利要求中任一项的方法。
20.权利要求19所述的方法,其中,所述提供包括为软件分发系统提供一个地址,接收器可以从所述地址获得所述多个节段的至少其中之一的其中一个或更多所生成的版本,并且/或者接收器可以从所述地址获得除了所述多个节段的至少其中之一之外的所述多个节段当中的其中一个或更多任何其他节段。
21.权利要求19所述的方法,其中,所述提供包括:
对于多个节段的所述至少其中之一当中的一个或更多个,对该节段的所述对应的多个不同版本进行加密,其中该节段的所述对应的多个不同版本被彼此不同地加密;
将所述已加密版本提供到软件分发系统;以及
为软件分发系统提供解密数据以允许对所述已加密版本进行解密。
22.权利要求19所述的方法,其中,所述提供包括:
形成第二软件项目,所述第二软件项目包括:
  (a)对于初始软件项目的多个节段当中的一个或更多个,其中包括为之生成该节段的对应的多个不同版本的至少一个节段,该节段的所述或每一个版本的已加密版本,其中对于为之生成该节段的对应的多个不同版本的所述至少一个节段当中的每一个,该节段的不同版本被彼此不同地加密;以及
  (b)除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的其他每一个节段;
将所述第二软件项目提供到所述软件分发系统;以及
为软件分发系统提供解密数据以允许对所述已加密版本进行解密。
23.一种对应于初始软件项目的数据结构,所述数据结构包括:
对于共同形成初始软件项目的初始软件项目的多个节段当中的一个或更多节段当中的每一个,该节段的至少一个已加密版本,存在至少一个节段,其数据结构包括该节段的对应的多个已加密的不同版本,该节段的不同版本被彼此不同地加密;以及
对于除了初始软件项目的多个节段当中的所述一个或更多个之外的初始软件项目的多个节段当中的其他每一个节段,该节段的对应版本。
24.权利要求23所述的数据结构,其还包括解密数据,以便允许数据结构的接收方对数据结构内的初始软件项目的某一节段的一个或更多已加密版本进行解密。
25.一种设备,其包括处理器并且被配置成使得所述处理器实施根据权利要求1到22中任一项的方法。
26.一种计算机程序,其在由处理器执行时使得处理器实施根据权利要求1到22中任一项的方法。
27.一种计算机可读介质,其存储根据权利要求26的计算机程序或者根据权利要求23或24的数据结构。
CN201280073363.7A 2012-03-23 2012-03-23 软件加指纹 Pending CN104303187A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2012/055193 WO2013139398A1 (en) 2012-03-23 2012-03-23 Software fingerprinting

Publications (1)

Publication Number Publication Date
CN104303187A true CN104303187A (zh) 2015-01-21

Family

ID=45926551

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280073363.7A Pending CN104303187A (zh) 2012-03-23 2012-03-23 软件加指纹

Country Status (5)

Country Link
US (1) US20150121073A1 (zh)
EP (1) EP2828782A1 (zh)
CN (1) CN104303187A (zh)
WO (1) WO2013139398A1 (zh)
ZA (1) ZA201206179B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107261502A (zh) * 2017-05-10 2017-10-20 珠海金山网络游戏科技有限公司 一种基于网络协议的在线游戏反外挂系统及方法

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8874924B2 (en) * 2012-11-07 2014-10-28 The Nielsen Company (Us), Llc Methods and apparatus to identify media
US9455833B2 (en) * 2014-04-28 2016-09-27 Nxp B.V. Behavioral fingerprint in a white-box implementation
US9767283B2 (en) 2014-06-27 2017-09-19 Mcafee, Inc. System and method to mitigate malicious calls
EP3278259B1 (en) 2015-03-30 2020-12-23 Irdeto B.V. Data protection
US10223511B2 (en) * 2016-03-30 2019-03-05 Nxp B.V. Watermarking input and output of a white-box implementation
US11520877B2 (en) * 2018-12-12 2022-12-06 Raytheon Company Resilient multi-variant execution verification
US11669600B2 (en) * 2019-05-29 2023-06-06 International Business Machines Comporation Controlling a use of shared demo assets using a digital watermark
GB2612217B (en) * 2019-08-01 2024-04-03 Sky Cp Ltd Secure media delivery
KR102337677B1 (ko) * 2020-07-16 2021-12-09 (주)휴먼스케이프 디지털 검증 지문 삽입 시스템 및 그 방법
US12001523B2 (en) * 2020-09-29 2024-06-04 International Business Machines Corporation Software access through heterogeneous encryption

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999001815A1 (en) * 1997-06-09 1999-01-14 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US20030190054A1 (en) * 2000-10-03 2003-10-09 Lidror Troyansky Method and system for distributing digital content with embedded message
US20050262165A1 (en) * 2001-12-17 2005-11-24 Oracle Corporation Data storage system
US20090319227A1 (en) * 2008-06-20 2009-12-24 International Business Machines Corporation Adaptive traitor tracing

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2350029A1 (en) 2001-06-08 2002-12-08 Cloakware Corporation Sustainable digital watermarking via tamper-resistant software
WO2008084433A2 (en) 2007-01-11 2008-07-17 Koninklijke Philips Electronics N.V. Tracing copies of an implementation
US8365279B2 (en) * 2008-10-31 2013-01-29 Sandisk Technologies Inc. Storage device and method for dynamic content tracing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999001815A1 (en) * 1997-06-09 1999-01-14 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US20030190054A1 (en) * 2000-10-03 2003-10-09 Lidror Troyansky Method and system for distributing digital content with embedded message
US20050262165A1 (en) * 2001-12-17 2005-11-24 Oracle Corporation Data storage system
US20090319227A1 (en) * 2008-06-20 2009-12-24 International Business Machines Corporation Adaptive traitor tracing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107261502A (zh) * 2017-05-10 2017-10-20 珠海金山网络游戏科技有限公司 一种基于网络协议的在线游戏反外挂系统及方法

Also Published As

Publication number Publication date
ZA201206179B (en) 2014-10-29
EP2828782A1 (en) 2015-01-28
WO2013139398A1 (en) 2013-09-26
US20150121073A1 (en) 2015-04-30

Similar Documents

Publication Publication Date Title
CN104303187A (zh) 软件加指纹
CN101790865B (zh) 更新密码密钥数据
KR101560131B1 (ko) 데이터를 보호할 때 적용되는 프로그램 가능한 프로세싱 단계들을 정의하기위한 시스템 및 방법
CN101401348B (zh) 用于使密码函数模糊的方法和系统
CN107580765B (zh) 用于保护流媒体和其它数据流的混淆
CN101884195B (zh) 内容的密码处理
CN102047220B (zh) 生成软件应用程序的白盒实现的系统和方法
CN102160071B (zh) 使用组权利的内容管理技术
CN102016871A (zh) 密码系统
CN101578813A (zh) 跟踪实现的拷贝
CN107005402A (zh) 提供对内容的访问
CN105024803A (zh) 白箱实现中的行为指纹
CN105721135A (zh) 在加密实施中的替换盒
JP6146476B2 (ja) 情報処理装置及び情報処理方法
CN111512307B (zh) 编译设备和方法
CN105007256A (zh) 用于在非信任平台上执行安全功能的安全模块
CN103229449A (zh) 通过加注水印保护要呈现的原始音频或者视频数据对抗未授权使用的方法和系统
CN114091103A (zh) 联邦学习模型的训练方法和调用方法以及联邦学习系统
CN107273724A (zh) 为白盒实施方案的输入和输出加水印
CN105574441A (zh) 一种嵌入式固件保护的方法和装置
WO2015149826A1 (en) Protecting an item of software
KR101325096B1 (ko) 불법 복제 방지 시스템 및 불법 복제 방지 방법
CN105281893A (zh) 用于引入白箱实现对串集合的依赖性的方法
CN104868992A (zh) 从发送器向接收器安全地提供保密数据
CN105281895B (zh) 一种数字媒体内容保护方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150121

WD01 Invention patent application deemed withdrawn after publication