加载格式的程序代码的产生以及可执行程序代码的提供的制作方法

文档序号:6553244阅读:284来源:国知局
专利名称:加载格式的程序代码的产生以及可执行程序代码的提供的制作方法
技术领域
本发明一般涉及便携式数据载体领域和用于这种数据载体的软件的创建。特别地,本发明涉及如下领域产生用于便携式数据载体的程序代码,将程序代码加载到数据载体中,并提供用于由数据载体的处理器执行的程序代码。为了本文的目的,便携式数据载体可以采取芯片卡(智能卡)或紧凑芯片模块的形式,并且在本发明的某些实施例中,还可以采取其他类构造的有限资源系统的形式。
背景技术
近年来,在连续的技术发展过程中,便携式数据载体已经变得日益功能强大。这对由硬件和存储空间构成可用的计算能力、以及由操作系统提供的功能都是确实的。现代便携式数据载体展现允许程序代码的后加载(即,在数据载体的运行期间加载程序代码)的功能(functionality)。应用程序可被后加载到的数据载体已经为人所知一段时间了。然而目前,数据载体还正在发展,其允许操作系统的部分例如驱动程序(driver)、库或函数模块(functionalmodule)的后加载。将期望这种后加载选项在未来将发展成用于便携式数据载体的灵活操作系统的重要部分。
通常,与便携式数据载体相关的重要因素是安全性和间谍保护方面,因为便携式数据载体经常被用于安全关键应用,并且未授权使用或窥探的结果可引起相当大的损害。允许程序代码的后加载的数据载体的特别问题在于,数据载体的内部工作必须尽可能不被暴露。特别地,必须确保要后加载的程序代码的外部开发者不需要或不能获得关于数据载体的内部结构和内部程序结构的信息。因此,例如数据载体的平台相关函数(function)必须尽可能地保持隐藏,即使要被后加载的程序代码最终使用这些函数。

发明内容
本发明的目的是全部或部分解决上述的问题。特别地,本发明旨在提供安全、保护隐私的技术,其允许产生用于便携式数据载体的加载格式的程序代码,并提供便携式数据载体中的可执行程序代码。
根据本发明,由具有权利要求1或权利要求4的特征的方法、具有权利要求16的特征的设备、以及具有权利要求17或权利要求18的特征的计算机程序产品,全部地或者部分地实现了该目的。各从属权利要求定义本发明的优选实施例。
本发明的基本原则是仅提供数据载体外部的伪库,该伪库与位于数据载体上的库的不同在于,位于数据载体上的库的至少某些内部工作在伪库中不存在或被隐藏或被屏蔽。只有伪库-并且可选地相关联的文件-需要对于外部程序开发者可访问。这样,信息可以保密,从所述信息第三方可能得出关于数据载体的内部工作的不期望的结论。这样,本发明允许保护甚至由第三方例如由独立软件公司或数据载体的产业用户开发可后加载的程序代码。
目标代码格式的程序代码被至少部分与伪库相关地链接。这意味着,特别在本发明的某些实施例中,加载格式的程序代码仍可以包括通常包括在目标代码格式中的类型的符号信息。在其他的实施例中,相反,与伪库相关的、完全链接的程序代码以加载格式产生。
进一步的链接过程发生在数据载体上,其在优选实施例中采取动态链接过程的形式。在不同实施例中,该链接过程可以发生在加载时、或运行时、或部分地在加载时部分地在运行时。在数据载体上执行的链接过程与位于数据载体上的私有库相关地发生。
在优选实施例中,数据载体外部执行的链接是与伪库的虚拟函数相关的虚拟链接。因此,在某些实施例中,加载格式的程序代码中的虚拟函数调用,可以由位于数据载体上的库的实际函数调用在数据载体内替换。
还提供了本发明的实施例,其中加载格式的程序代码具有分支表或引用表,其由仅在数据载体上链接时引用真实的库的表项填充。特别-但不仅-在这些实施例中规定虚拟函数调用在位于数据载体上的库中要被解决。这可以发生在加载时、或运行时、或部分地在加载时部分地在运行时。
在本发明的优选实施例中,伪库提供调用接口,其与位于数据载体上的库的调用接口不同。特别地,由伪库提供的调用接口可以是虚拟调用接口。
为了实现高等级的安全性,防止程序代码的破坏以及防止不期望地后加载未授权的程序代码,在优选实施例中创建了授权数据,并且在程序代码加载时检测该授权数据。
在优选实施例中,数据载体的操作系统和/或应用程序的后加载的程序代码的灵活和自动检测变得可能,这是由于由程序代码提供的函数被输入到数据载体的管理单元中。
产生并加载到数据载体中的程序代码可以是,例如应用程序或内核模块。在优选实施例中规定,程序代码是自然(native)程序代码。这里特别地,二进制码应该被认为是自然程序代码,所述二进制码是由数据载体的处理器可执行的,无需解释的中介并且无需虚拟机。
根据本发明的计算机程序产品包括用于实现根据本发明的方法的程序命令,或已由根据本发明的方法产生的程序命令。这样的计算机程序产品可以是物理媒体,例如,半导体存储器或软盘或CD-ROM。然而,计算机程序产品还可以是非物理媒体,例如,在计算机网络上传输的信号。特别地,计算机程序产品可以包括用于程序开发系统或便携式数据载体的软件,或与便携式数据载体的生产或初始化或个性化或操作相结合而使用。
根据本发明的设备可以具体为程序开发系统或便携式数据载体。在优选的进一步实施例中,计算机程序产品和/或设备包括对应于本说明书中提到的那些特征、和/或从属方法权利要求中提到的那些特征。


从下面示例性实施例以及多个作为替代的实施例的描述,本发明的其他的特征、目的和优点是明显的。在示意图中图1是根据本发明的示例性实施例的程序开发系统和数据载体中的数据结构和数据处理阶段的概念图;图2是在图1的程序开发系统中执行的、用于产生加载格式的程序代码的方法的流程图;图3是在图1的数据载体中执行的、用于提供可执行程序代码的方法的流程图,以及图4是位于数据载体上的库和伪库间的关系的示例性表示。
具体实施例方式
图1是程序开发系统10和便携式数据载体12的示意表示。程序开发系统10可以采取具有合适软件的传统个人计算机或工作站的形式。在本示例性实施例中,数据载体12是具有本身众所周知的硬件的芯片卡或芯片模块。特别地,数据载体12包含单芯片微控制器,其具有处理器、多个配置用于不同技术的存储器域(field)、以及用于有线或无线通信的接口电路。
在图1中所示的示例性实施例中,程序代码的产生从源文本14开始,其由编译器16转换至对应的目标代码格式的程序代码18。在程序开发系统10中,伪库20可用,其将在下面更详细的描述。从以目标代码格式呈现的程序代码18以及伪库20,链接器22产生至少部分链接的加载格式的程序代码24。
为了防止疏忽或恶意破坏而保护程序代码24,使用了授权发生器26,其产生授权数据28-例如,用于程序代码24的合适的校验和。由授权数据28保护的加载格式的程序代码30,形成借助于程序开发系统10执行的开发过程的结果。该程序代码30被存储,用于接下来的使用。
程序代码30可以在数据载体12运行期间被加载到其中。加载过程可以例如以终端客户的前提,或者结合数据载体12的产生或初始化或个性化发生。程序代码30在这种情形出现在程序开发系统10或初始化或个性化设备或终端用户的终端中,并且被传输至数据载体12。在加载过程中,数据载体12处于运行中。这应当被理解为意味着在加载过程期间,程序代码30被数据载体12的处理器积极地处理并修改。
图1用虚线箭头表示由加载程序32将加载格式的保护的程序代码30接收-可选地经由上述中介站之一-到数据载体12中。授权检验器34确保程序代码30不被破坏并且由授权的站提供授权数据28。如果通过检验,则加载格式的程序代码24由与存储在数据载体12中的库38相关的链接器36链接。由动态链接器执行的该过程将在下文更详细描述。
链接器36产生可执行程序代码40,然后其对由数据载体12的处理器执行可用。在某些实施例中,可执行程序代码40是用于数据载体12的应用程序(应用)。相反,在此描述的示例性实施例中,可执行程序代码40是数据载体12的内核模块,即,例如操作系统、驱动程序或库的一部分。内核模块可以例如提供用于存储器管理的驱动程序或秘库或用于与各种接口(例如,USB、无线以及TCP/IP)通信的功能。
可执行程序代码40的函数被提供至数据载体12的操作系统以及存储在数据载体12上的应用程序。在某些实施例中,产生加载功能的灵活检测。为此,可执行的程序代码40-特别地,如果它是内核模块-使得之前指定的接口可用。此外,此处描述的示例性实施例,通过数据载体12的管理单元中的注册程序42,为程序代码40的入口(entry)提供已提供的函数。该管理单元可以例如是注册文件(注册(registry))或数据载体12的另一数据结构。
图2再次表示程序开发系统10中的方法序列。步骤50中,程序代码18以目标代码格式产生。步骤52和与伪库20相关的程序代码18的链接有关,以便得到加载格式的未保护的程序代码24。步骤54中,授权数据28和加载格式的保护的程序代码30最终产生。
图3中所示的流程图总结数据载体12中执行的方法步骤。步骤56中输入保护的程序代码30和步骤58中授权检验后,接下来是步骤60中链接程序代码24与存储在数据载体12中的库38相关,以便得到可执行的程序代码40。提供可执行程序代码40用于在步骤62中执行,并且可选地将其输入数据载体12的管理单元中。
此处描述的示例性实施例的必要部分是步骤52和60中的两个链接过程。在步骤52由链接器22执行的第一链接过程中,使用了伪库20(哑(dummy)库)。伪库20与存储在数据载体12中的库38的不同具体在于伪库20不包含存储在数据载体12上的库38的实际函数,而仅有这里称为“虚拟函数”的函数。
数据载体12外部的链接过程因此虚拟地发生,即,与伪库20的虚拟函数相关,而不是与包含在数据载体12中的库38的实际函数相关。换句话说,链接发生与伪库20的虚拟调用接口相关,而不是与数据载体12中的库38的真实的调用接口相关。数据载体12的内部工作,即具体是库38的内部函数以及内部功能,因此保持隐藏。这些内部函数和功能即使通过对伪库20的分析也不可能确定。
刚刚描述的伪库20和包含在数据载体12中的库38之间的关系参照实例在图4中解释。伪库20为虚拟调用接口提供例如函数VirtFunc1、VirtFunc2和VirtFunc3。具有数据载体12的实际函数的库38的调用接口仅在数据载体12上存储。
包含在数据载体12中的库38的实际调用接口解决虚拟函数调用,并且提供例如内部函数Func1、Func2、Func3和Func4。步骤52中由链接器22的程序代码18的链接与伪库20相关地发生,这使得仅仅可用调用接口。相反,引用的实际解决在数据载体12上并不发生,直至步骤60。在这个过程期间,虚拟函数VirtFunc1-VirtFunc3由实际函数Func1-Func4替代。这在图4中以虚线箭头图示。
总而言之,因此确保在数据载体12上执行的程序代码40可以使用平台相关的和/或私有的函数。然而,通过伪库20的使用,为程序开发者所知的外部函数至平台相关的函数的变换并不需要展现,所述变换仅在数据载体12中发生。这种措施带来数据载体12的安全性的显著增加,即使后者允许自然程序代码的加载-例如,应用程序和驱动程序。
理所当然,上述的细节旨在仅作为本发明的可能的实施例的实例。进一步的变形,特别对于在数据载体12外部和数据载体12内部执行的链接过程52和60,以及对于伪库20和位于数据载体12中的库38各自的内容,对于本领域的技术人员是可能的并且明显的。
权利要求
1.一种产生加载格式的程序代码(24,30)的方法,该方法意图在于在便携式数据载体(12)运行期间被加载到其中并由所述数据载体(12)的处理器执行,以及,在所述执行期间,使用位于所述数据载体(12)上的库(38)的函数,所述方法具有在所述数据载体(12)外执行的下列步骤产生目标代码格式的程序代码(18),以及至少部分地与伪库(20)相关地链接目标代码格式的程序代码(18),以便获得加载格式的程序代码(24,30),所述伪库(20)与位于所述数据载体(12)上的库(38)的不同在于如下方式位于所述数据载体(12)上的库(38)的至少一些内部工作,在伪库(20)中不存在或被隐藏或被屏蔽。
2.如权利要求1所述的方法,其特征在于,所述链接是与所述伪库(20)的虚拟函数相关的虚拟链接。
3.如权利要求1或权利要求2所述的方法,其特征在于,创建授权数据(28)以便保护加载格式的所述程序代码(24,30),防止破坏。
4.一种在便携式数据载体(12)中提供可执行程序代码(40)的方法,所述可执行程序代码(40)被建立,以便在由所述数据载体(12)的处理器的执行期间,使用位于所述数据载体(12)上的库(38)的函数,所述方法具有由所述数据载体(12)的处理器执行的下列步骤在所述数据载体(12)的运行期间,加载加载格式的程序代码(24,30),所述加载格式的程序代码(24,30)已被至少部分地与伪库(20)相关地链接,其与位于所述数据载体(12)上的库(38)的不同在于如下方式位于所述数据载体(12)上的库(38)的至少一些内部工作,在所述伪库(20)中不存在或被隐藏或被屏蔽,以及与位于所述数据载体(12)上的库(38)相关地链接加载格式的所述程序代码(24,30),以便得到所述可执行的程序代码(40)。
5.如权利要求4所述的方法,其特征在于,所述链接是动态链接。
6.如权利要求4或权利要求5所述的方法,其特征在于,在链接期间,加载格式的所述程序代码(24,30)中的虚拟函数调用被位于所述数据载体(12)上的库(38)的实际函数调用代替。
7.如权利要求4至6中任一所述的方法,其特征在于,加载格式的所述程序代码(24,30)由授权数据(28)保护,并且在于,所述可执行的程序代码(40)仅在成功的授权检验后为执行提供。
8.如权利要求4至7中任一所述的方法,其特征在于,由所述可执行程序代码(40)提供的函数被输入到所述数据载体(12)的管理单元中。
9.如权利要求4至8中任一所述的方法,其特征在于,加载格式的所述程序代码(24,30)已经由根据权利要求1至3的任一方法产生。
10.如权利要求1至9中任一所述的方法,其特征在于,所述伪库(20)提供调用接口,其与位于所述数据载体上的库(38)的调用接口不同。
11.如权利要求10所述的方法,其特征在于,由所述伪库(20)提供的所述调用接口是虚拟调用接口。
12.如权利要求1至11中任一所述的方法,其特征在于,虚拟函数调用在位于所述数据载体(12)上的库(38)中被解决。
13.如权利要求1至12中任一所述的方法,其特征在于,所述程序代码(24,30,40)是应用程序。
14.如权利要求1至12中任一所述的方法,其特征在于,所述程序代码(24,30,40)是内核模块。
15.如权利要求1至14中任一所述的方法,其特征在于,所述程序代码(24,30,40)是自然程序代码。
16.一种装置,特别是程序开发系统(10)或便携式数据载体(12),其被建立以执行如权利要求1至15中任一所述的方法。
17.一种计算机程序产品,其包括多个程序命令,用于控制可编程设备,特别是程序开发系统(10)或便携式数据载体(12),所述程序命令被建立,以便使所述可编程设备执行如权利要求1至15中任一所述的方法。
18.一种具有程序代码(24,30,40)的计算机程序产品,其已由根据权利要求1至15中任一所述的方法产生。
全文摘要
本发明涉及一种用于为便携式数据载体(12)产生加载格式的程序代码(24,30)的方法。根据所述方法,使用伪库(20),其与存储在数据载体(12)中的库(38)的不同在于,存储在数据载体的库(38)中的至少某些内部功能,在伪库(12)中不存在或被隐藏或被编码。根据用于在便携式数据载体(12)中提供可执行程序代码(40)的所述方法,程序代码(24,30)以加载格式链接至存储在数据载体(12)中的库(38)。本发明还涉及具有相应特征的设备(10,12)以及计算机程序产品。本发明提供用来保密的保护技术,并且允许产生用于便携式数据载体(12)的加载格式的程序代码(24,30),并且提供便携式数据载体(12)中的可执行程序代码(40)。
文档编号G06F9/445GK101073054SQ200580041917
公开日2007年11月14日 申请日期2005年12月1日 优先权日2004年12月6日
发明者乌尔里克·科尔曾伯格, 斯蒂芬·斯皮茨, 沃尔夫冈·埃芬 申请人:德国捷德有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1