一种对程序执行器的程序信息的保护方法

文档序号:6564038阅读:217来源:国知局
专利名称:一种对程序执行器的程序信息的保护方法
技术领域
本发明涉及一种对程序执行器的程序信息的保护方法,可适用于通称为微控制器(MCU)、微处理器(μP或MPU)、数字信号处理器(DSP)、中央处理器(CPU)、图形处理器(GPU)的程序执行器,以及用于片上系统(System On Chip)的嵌入式程序执行器。
背景技术
目前各种程序执行器得到了广泛的应用,如微控制器(MCU)、微处理器(μP或MPU)、数字信号处理器(DSP)、中央处理器(CPU)、图形处理器(GPU)以及用于片上系统(System On Chip)的嵌入式微处理器。通常在这些程序执行器的应用中,需要利用非挥发的存储器如掩膜只读存储器(Mask ROM)、可编程只读存储器(PROM)、一次可编程只读存储器(OTP ROM)、电可擦写只读存储器(EEPROM)、闪存(Flash)或磁盘、光盘、磁带等来存放程序执行器读取的机器码形式的程序信息。非挥发的存储器存放机器码程序的优点是这些信息在掉电的情况下可以长期保存而不丢失。
图1示出了现有技术中客户在程序执行器上开发程序的流程。请参见图1,S11客户从芯片制造商或者供应商处获得程序执行器;S12客户在计算机上编写的源程序在计算机中被编译成机器码程序,该源程序可以是汇编程序或C程序等;S13客户将机器码程序写入上述程序执行器的非挥发存储器中,该非挥发存储器可以设计在程序执行器芯片内部,也可以设置在片外与该执行器电性连接。经过上述步骤,机器码程序就能在程序执行器上顺利运行了。接着参见图2A和图2B,图1所示的流程以框图的形式示出。其中图2A示出了客户程序存储器设计在片内的框图结构,图2B示出了客户程序存储器设计在片外的框图结构。
但是,不管非挥发存储器设计在片内还是片外,最终总是实现在某种物理材料上的(如硅片),所以任何具有相关技术背景的技术人员都能借助某些物理或化学的方法,以较低的成本读出非挥发存储器中存放的程序信息。为了描述方便,下文中把在未获授权情况下企图读取他人程序执行器产品中程序信息的人称为破解者。
如果破解者读出存储于存储器22A或22B(图2A或图2B中示出)中的机器码程序,即可通过采购相同的程序执行器并写入该机器码程序来实现快速仿制。而且,汇编指令集和该程序执行器的机器码指令集之间的转换方式是公开且通用的,因此破解者还可以通过反汇编他人的机器码程序来获取对应的汇编程序,从而获得程序的设计思想和算法,也可进一步在此基础上对程序进行改进。
为此,人们开发了很多对机器码程序信息的保护方法,这些方法的指导思想都是采用各种手段防止机器码程序从存储器22A或22B(图2A或图2B中示出)中被读出或加大破解者读出机器码程序的时间和成本。例如,设置加密位进行保护,在完成向存储器写入机器码程序后使能加密位以防止信息被读出。一个简单的方法即可令该保护机制失效破解者可以打开集成电路封装,然后用某些特定的方法(如聚焦离子束(FIB))控制加密位信号,从而达到读取机器码程序的目的。因此,采用加密位的方法增加的破解成本不大,防止破解的效果一般。

发明内容
本发明的目的在于解决上述问题,提供了一种对程序执行器的程序信息的保护方法,它不依赖于防止客户的程序信息被读出,很大程度上增加了破解成本,也大大延长了破解所需的时间,能有效地防止客户的程序信息在脱离制造商和客户控制的情况下被轻易破解。
本发明的技术方案为一种对程序执行器的程序信息的保护方法,用于在所述程序执行器脱离制造商和客户控制的情况下保护客户基于所述程序执行器开发的程序信息,其中,所述保护方法包括(1)在所述程序执行器中增设编译标识区,所述编译标识区中存储对应不同编译方法的编译标识,并通过技术手段确保任何客户无法在编译标识区中写入其他客户的编译标识;(2)所述编译标识确定一种与之对应的由汇编程序到机器码程序的编译方法,且该编译方法无须公开,可仅由制造商和对应的客户掌握;(3)所述程序执行器根据编译标识读取、解释并执行客户的机器码程序,且所述读取或解释方法与步骤(2)中的编译方法匹配。类似的,该读取或解释方法也无须公开,可仅由制造商和对应的客户掌握。
上述的对程序执行器的程序信息的保护方法,其中,步骤(1)中,所述技术手段是指所述编译标识区采用一次可编程只读存储器实现,由制造商在所述编译标识区预设客户对应的编译标识。
上述的对程序执行器的程序信息的保护方法,其中,步骤(1)中,所述技术手段是指,由程序执行器内的随机数发生器电路生成随机数作为编译标识存入编译标识区。
上述的对程序执行器的程序信息的保护方法,其中,步骤(1)中,所述技术手段是指,首先由制造商提供给客户对应的编译标识配置号或由客户自己生成编译标识配置号,再由客户自行向程序执行器写入该编译标识配置号,所述编译标识配置号经程序执行器处理后生成编译标识并存入所述编译标识区。该处理功能的具体内容无须公开可仅由制造商掌握,而提供给每个客户的编译标识配置号可仅由制造商和对应的客户掌握。
上述的对程序执行器的程序信息的保护方法,其中,所述处理功能包括具备一定复杂度的校验、运算、或者校验与运算的组合以增加破解的难度,而实现该处理功能的主体可以是在程序执行器中新增的一块硬件电路或内嵌的一段程序或者它们的组合。
上述的对程序执行器的程序信息的保护方法,其中,步骤(2)中,所述编译方法是指由客户开发的汇编程序生成机器码程序的方法,若客户的原始程序设计采用的是高级程序语言,则需先将其转换成汇编程序再编译得到机器码程序。
上述的对程序执行器的程序信息的保护方法,其中,步骤(2)中,所述编译方法既可以是指编译到与编译标识对应的特定的机器码指令集,也可以是指按编译标识确定的地址译码次序排序各条机器码指令,以得到与编译标识对应的机器码程序。
上述的对程序执行器的程序信息的保护方法,其中,步骤(2)中,所述由汇编程序到机器码程序的编译过程既可由客户完成,也可由客户与程序执行器联合完成,或由程序执行器单独完成。
上述的对程序执行器的程序信息的保护方法,其中,步骤(3)中,所述程序执行器根据编译标识或由编译标识还原得到的编译标识配置号读取、解释并执行客户的机器码程序,实现由编译标识生成相应编译标识配置号的主体可以是一块新增电路或者一段内嵌程序。
上述的对程序执行器的程序信息的保护方法,其中,步骤(3)中,所述程序执行器按照编译标识确定的机器码指令集解释及执行程序,或按照编译标识确定的地址译码次序读取及执行程序,执行该特定解释或读取功能的主体可以是一块新增的译码电路,所述译码电路根据不同的编译标识表现出不同的译码功能。所述译码电路的具体内容由制造商保密。
上述的对程序执行器的程序信息的保护方法,其中,所述编译方法和对应的读取、解释方法既可以是静态的,编译和读取、解释的行为不随时间的变化而变化;也可以是动态的,编译和读取、解释的行为在不同的条件下是不同的。
本发明对比现有技术有如下的有益效果本发明通过编译标识来控制机器码程序的编译和读取、解释方式。破解者即使读出编译标识和机器码程序,由于无法向程序执行器写入他人的编译标识,因此无法获得可执行该机器码程序的程序执行器,也不可能实现快速仿制。又由于无法获得与编译标识对应的编译或者读取、解释方法,因此也无法读懂这些机器码程序或对机器码程序进行反汇编,也无法获取他人的设计思想和算法,当然也不可能对该机器码程序进行改进。


图1是现有技术的客户开发程序的流程图。
图2A是现有技术的客户开发程序一个实施例的框图。
图2B是现有技术的客户开发程序另一实施例的框图。
图3是本发明中客户开发程序的一个实施例的流程图。
图4是图3所示实施例中一译码电路实施例的逻辑电路图。
图5是本发明中客户开发程序的另一实施例的流程图。
图6是图5所示实施例中一译码电路实施例的逻辑电路图。
图7是本发明中客户程序存储器位于片外时客户开发程序的一个实施例的流程图。
图8是图7所示实施例的电路框图。
图9是本发明中客户程序存储器位于片内时客户开发程序的另一实施例的流程图。
图10是图9所示实施例的电路框图。
图11是本发明中采用了动态编译及解释方案下客户开发程序的又一实施例的流程图。
图12是图11所示实施例的电路框图。
具体实施例方式
下面结合附图和实施例对本发明作进一步的描述。
图3示出了一种简单的采用了本发明的程序执行器的方案及客户在该程序执行器平台上进行程序开发的一个实施例的流程。该方案在现有程序执行器的基础上新增一块译码电路,它将来自客户程序存储器的机器码程序译码后再交给程序执行器。下面结合图3对该流程进行详细描述。
步骤S31客户A从制造商或供应商处获得程序执行器,该程序执行器的编译标识区未经配置,即编译标识区为缺省值。程序执行器新增了一块编译标识硬件加密电路,该硬件加密电路的功能仅由制造商掌握,其输出端连接编译标识区的输入端。同时由制造商提供给客户A对应的编译标识配置号,该编译标识配置号具有唯一性且仅有制造商和客户A两者知道。客户A在拿到程序执行器后向程序执行器写入该编译标识配置号,该编译标识配置号通过所述新增的编译标识硬件加密电路的校验和运算后形成编译标识并存储至编译标识区中。其中编译标识配置号和编译标识可以是一个二进制串,而所述硬件加密电路的运算操作以二进制串的位运算为主,可以是取反运算、与或运算、重新排序等。因为编译标识区的信息只能通过所述硬件加密电路来输入修改,且硬件加密电路的功能是保密的,编译标识配置号也仅有制造商和客户两者才知道,所以即使破解者读出编译标识区上的编译标识,但由于不知道所述硬件加密电路的功能,就无法倒推出对应的编译标识配置号,也就无法向程序执行器的编译标识区写入想要的编译标识。举例来说,制造商分配给客户A的编译标识配置号是“1010”,客户A将该标识号输入至编译标识硬件加密电路,该硬件加密电路的功能是将输入的二进制串首末位互换后再重复6次后输出,于是该硬件加密电路将“1010”转换成编译标识“001100110011001100110011”并存入客户A的编译标识区中。
应理解,上述的硬件加密电路并不是必须的,由程序执行器执行一段程序,该程序的功能与上述硬件加密电路的功能相同,也可以起到将编译标识配置号转换成编译标识的作用。或者将一硬件电路和一程序组合起来实现同样的功能。只要能起到相同作用的实现方法,都应包含在本发明的保护范围内。
步骤S32客户A在计算机上开发的源程序在计算机中被编译成通用的机器码程序。一般来说,客户开发的源程序是汇编程序或者C语言程序等高级语言程序。汇编程序是基于汇编指令集来编写的,这些汇编指令集中包括常用的ADD、MOV、LOAD等指令。但是机器本身无法识别这些汇编指令,机器只能识别由0和1组成的二进制序列,也即机器码指令。所以对某一种程序执行器,存在汇编指令集和机器码指令集的对应关系,根据这种对应关系,可以将汇编程序转换成机器可以识别的机器码程序。比如,在8086芯片中,其二进制指令格式是16位的,一条汇编语句“MOV AX,BX”被解释成“1000101111000011”的机器码指令。如果源程序是汇编程序,则可在计算机上根据汇编指令集与通用机器码指令集之间的对应关系,将汇编程序编译成机器码程序。如果源程序是C语言或者其他高级语言编写的,则需先将其编译成汇编程序,再将汇编程序编译成机器码程序。这一步骤属于现有技术,同图1的步骤S12是一样的。
步骤S33根据客户A的编译标识确定一种转换方式,以该转换方式将上一步骤中得到的通用机器码程序转换成客户A的专用机器码程序。这种转换方式与步骤S35中译码电路的译码功能互为逆过程。步骤S33的这种转换方式是步骤S31中的通用机器码指令集与客户A的专用机器码指令集的一种对应关系。仍以步骤S31中客户A的编译标识“001100110011001100110011”为例,该编译标识说明在步骤S35中,程序执行器的解释方法是先将客户A的机器码指令的前两位取反。明显地,其逆处理是将原来的通用机器码程序的每条指令的前两位取反,因此本步骤中相应的转换方式也是将原来的通用机器码程序的每条指令的前两位取反以生成客户A的专用机器码程序。仍以汇编语句“MOV AX,BX”为例,经步骤S32后被解释成“1000101111000011”的机器码指令,经上述的转换方式转换后,生成“0100101111000011”的机器码指令。在这里,转换方式是制造商提供给客户A并由制造商和客户A保密,可以是一种对该转换方式的文字描述,也可以是两套机器码指令集的对应表,也可以将该转换方式实现成一个程序模块。客户A在作转换时,可以根据上述转换方式的文字描述或者两套机器码指令集的对应表手工转换,也可以使用上述程序模块在计算机上进行自动转换。应理解,不应对具体的转换方法进行限制。
步骤S34转换为客户A的专用机器码程序被写入程序执行器的非挥发存储器中,该非挥发存储器可以设计在程序执行器芯片的片内,也可以设置在片外与该执行器电性连接。一般而言,该非挥发存储器是只读存储器(ROM)。这一步骤也是现有技术,与图1中的步骤S13是相同的。经过上述的转换手段,破解者即使读出了存储在ROM中的客户A的专用机器码程序,也无法实现快速仿制或者反汇编成汇编程序。因为存储于ROM中的客户A的专用机器码程序已经是经过步骤S33转换处理过的,它与普通程序执行器中的机器码指令集并不兼容,也即不能被普通的程序执行器所识别,所以即使破解者去市场上采购同一型号的程序执行器,由于缺少了与转换操作对应的解释操作,也就无法运行该专用机器码程序,故不能实现快速仿制。又因为转换方式是客户A独有的,转换后的机器码指令和汇编指令之间的对应关系已经不是原来公开的通用的对应关系,破解者在无法知晓该转换方式的情况下,无法通过反汇编将此专用机器码程序转换成汇编程序。故破解者无法获知程序的设计思想和算法,对程序进行改进也就无从谈起了。
步骤S35客户A的专用机器码程序经一译码电路转换成原来的通用机器码程序。该步骤和步骤S33的转换过程是互逆的。给所有客户的程序执行器的译码电路都是一样的,但不同的编译标识可控制该译码电路表现出不同的译码功能。如上所述,经步骤S33转换之后的专用机器码程序与程序执行器核的通用机器码指令集无法兼容,不能被其识别。译码电路被客户A的编译标识配置成功能为将客户A的专用机器码程序再次转换成可与程序执行器核的通用机器码指令集兼容的通用机器码程序。仍以上述客户A的编译标识为例,汇编语句“MOV AX,BX”在编译转换之后成为“0100101111000011”的二进制机器码,但是该二进制机器码无法被程序执行器核所识别,译码电路根据客户A的编译标识配置成将机器码指令的前两位取反,因此经译码电路,机器码指令还原成“1000101111000011”,这就能被程序执行器核所识别。程序执行器会根据该机器码指令进行正确的操作将寄存器BX中的值移动至寄存器AX中。
译码电路以逻辑电路器件实现其特定功能,以上述将机器码指令的前两位取反这一功能为例,该译码电路的实现方式如图4所示的虚线框。在ROM 41连向程序执行器42的前两根位(bit)数据线上各设置一个反向器43A、43B,其余的位数据线上不设任何器件直接连接ROM 41和程序执行器42。当然,实际的译码电路并不只有一种设计方式,只要达到所需的译码功能,都包括在本发明的权利要求范围内。
图5示出了采用了本发明的程序执行器的另一方案及客户在该程序执行器平台上进行程序开发的另一实施例的流程。下面结合图5对该流程进行详细描述。
步骤S51该步骤和图3所示实施例的步骤S31是相同的。在此就不再重复描述。举例来说,制造商分配给客户B的编译标识配置号是“1101”,客户B将该编译标识配置号输入至硬件电路,该硬件电路将“1101”转换成编译标识“110111011101110111011101”并存入编译标识区中。
步骤S52设计一个存储汇编指令集和机器码指令集之间对应关系的库,该库中含有多张表,其中每张表对应一个客户的编译标识,存储汇编指令集和该客户所特有的机器码指令集之间的对应关系。举例来说,客户B具有一张汇编指令集和机器码指令集之间对应关系的表,客户B的编译标识“110111011101110111011101”是指将机器码指令的末两位交换,因此在表中汇编语句“MOV CL,55H”在该表中被解释成“1011000101010110”的机器码指令。
步骤S53编译源程序时,用编译标识区的编译标识所对应的编译方式将源程序编译成机器码程序。以客户B为例,将源程序编译到客户B的专用机器码指令集上。在编译过程中,找到客户B对应的那张表,汇编语句“MOV CL,55H”被直接编译成“1011000101010110”的机器码指令。此时实际上已经完成了机器码程序转换的过程,它与图3所示实施例的不同之处在于,图3的实施例会将“MOV CL,55H”先编译成通用的“1011000101010101”的机器码指令,然后根据末两位互换的方式转换成“1011000101010110”;而本实施例改变了编译的方式,直接将末两位互换的转换方式嵌入在编译过程中,也即在使用编译器对“MOV CL,55H”这一汇编语句进行编译后就直接形成了“1011000101010110”的机器码指令。
步骤S54将编译获得的客户B的专用机器码程序写入程序执行器的非挥发存储器中。
步骤S55客户B的专用机器码程序在程序执行器中解释执行。与图3所示实施例的区别在于,本实施例中的程序执行器具有多个机器码指令集,其中每个机器码指令集对应一个编译标识。程序执行器根据编译标识,选取对应的机器码指令集执行。以客户B为例,程序执行器根据客户B的编译标识,选取对应的机器码指令集后直接运行客户B的专用机器码程序。
应理解,步骤S55也可以采用图3实施例的步骤S35来实现,即增加一个将机器码指令的末两位互换的译码电路。译码电路以逻辑电路器件实现其特定功能,以上述将机器码指令的末两位互换这一功能为例,该译码电路的实现方式如图6所示的虚线框。在ROM 61连向程序执行器63的末两位(bit)数据线上设置一个能使两位信号互换的模块62,其余的位数据线上不设任何器件直接连接ROM 61和程序执行器63。其中位数据线64连在模块62的输入口A上,位数据线65连在模块62的输入口B上,经模块62处理之后,输出口C输出输入口B接收的信号,而输出口D输出输入口A接收的信号。当然,实际的译码电路并不只有一种设计方式,只要达到所需的译码功能,都包括在本发明的权利要求范围内。
图7示出了采用了本发明的程序执行器的另一方案及客户在该程序执行器平台上进行程序开发的另一实施例的流程。该方案在现有程序执行器的基础上增加了一块编译标识硬件加密电路、一块编译标识硬件解密电路和一块可配置译码电路,该译码电路将来自片外客户程序存储器的机器码程序译码后再交给程序执行器。下面结合图7对该流程进行详细描述。
步骤S71客户C从制造商或供应商处获得程序执行器,该程序执行器的编译标识区未经配置,即编译标识区为缺省值。同时制造商提供编译标识配置号和编译方法的对应关系,即如何由编译标识配置号获得对应的编译方法,以及如何由客户设计的编译方法推出相应的编译标识配置号。在本例中,制造商提供给客户C的编译标识配置号和编译方法的对应关系是先按通用的、公开的编译方法将客户的源程序编译成通用的机器码程序,再按编译标识配置号确定的转换方法逐条转换各条机器码指令,以得到与编译标识配置号对应的专用机器码程序;本例中的程序执行器的所有指令均为8Bit宽,来自片外客户程序存储器的每条指令的8Bit都会由一块新增的可配置译码电路依据编译标识配置号作重新排序后交给程序执行器核执行;编译标识配置号共24Bit,分为8组,每组3Bit各确定一个位置;客户可自行设计一种排序方法,对通用机器码程序的每条指令的8Bit按此方法重新排序,可得自己的专用机器码程序,然后再生成一个与此排序方法相匹配的编译标识配置号,它可令所述可配置译码电路对来自片外客户程序存储器的每条指令作相反的处理,以还原出原来的通用机器码指令,再交给程序执行器核。
步骤S72客户自行设计一种编译方法,并根据制造商提供的编译标识配置号和编译方法的对应关系,推出相应的编译标识配置号,再将该配置号输入程序执行器生成编译标识,完成对程序执行器的配置。在本例中,客户C设计的编译方法是将通用机器码程序的每条指令的8Bit(从高到低分别用<7>,<6>,<5>,<4>,<3>,<2>,<1>,<0>标记)按照<3>,<5>,<0>,<7>,<2>,<6>,<1>,<4>的次序重新排列以获得专用机器码程序。为了令所述可配置译码电路从专用机器码程序中还原出通用机器码程序来,根据步骤S71制造商提供的编译标识配置号和编译方法的对应关系,可推出相应的编译标识配置号可用8进制表示为“42607315”,它表示程序执行器核获得的指令的第7位到第0位分别来自于专用机器码程序的指令的第4位、第2位、第6位、第0位、第7位、第3位、第1位、第5位。显然地,客户应对自己的编译方法和编译标识配置号保密。
然后客户C将此编译标识配置号“42607315”(8进制)写入程序执行器芯片,经程序执行器片内新增的一块编译标识硬件加密电路处理后生成编译标识并存入所述编译标识区。该编译标识硬件加密电路的具体功能由制造商保密。在本例中,该硬件加密电路的具体功能是将客户输入的编译标识配置号的前12Bit取反并与末12Bit互换。因此最后写入编译标识区的客户C的编译标识为“73153517”(8进制)。因为编译标识区的信息只能通过所述新增的编译标识硬件加密电路来输入修改,而该加密电路的功能是保密的,所以即使破解者读出编译标识区内的编译标识,但由于不知道所述硬件加密电路的具体功能,就无法推出对应的编译标识配置号;而客户C也对自己的编译标识配置号和编译方法保密,所以破解者无法向程序执行器的编译标识区写入客户C的编译标识。破解者还可能尝试向程序执行器写入不同的编译标识配置号,并记录下生成的存储于编译标识区的编译标识;在获得大量这样的”编译标识配置号--编译标识”对后,据此猜想编译标识硬件加密电路的具体功能。为增加这项破解工作的难度,可采取以下措施①编译标识硬件加密电路应具备一定复杂度;②编译标识区可采用一次可编程只读存储器(OTP ROM)实现;③编译标识区禁止读出,可通过在编译标识中增设校验位,由程序执行器输出编译标识校验结果来确认编译标识是否写入正确。
步骤S73客户完成源程序设计,并按通用的编译方法将其编译成通用的机器码程序。这一步骤属于现有技术,同图1的步骤S12是一样的。
步骤S74客户根据在步骤S72中自己设计的编译方法,对步骤S73中获得的通用机器码程序的机器码指令逐条作转换,以得到与自己的编译标识配置号对应的专用机器码程序。在本例中,具体转换方法是将通用机器码程序的每条指令的8 Bi t(从高到低分别用<7>,<6>,<5>,<4>,<3>,<2>,<1>,<0>标记)按照<3>,<5>,<0>,<7>,<2>,<6>,<1>,<4>的次序重新排列以获得专用机器码程序。
当然,步骤S73和S74亦可合并执行,即根据汇编指令集到通用机器码指令集的对应关系以及通用机器码指令集到客户的专用机器码指令集的对应关系,推出汇编指令集到客户的专用机器码指令集的对应关系,然后直接将客户的源程序编译成客户的专用机器码程序。所以,如权利要求6所述,也可以这样来理解这一过程客户C的编译标识配置号“42607315”确定了一套客户C专有的机器码指令集,直接将客户C的源程序编译到此机器码指令集上即可获得客户C的专用机器码程序。
步骤S75将客户专用机器码程序写入客户程序存储器中。在本例中,客户程序存储器在片外,因此可以通过通用的烧录器写入。这一步骤也是现有技术,与图1中的步骤S13是相同的。
完成这些步骤后,每次给程序执行器上电运行程序时,所述程序执行器会先根据编译标识还原出编译标识配置号。在本例中,实现由编译标识生成相应编译标识配置号的主体是一块新增的编译标识硬件解密电路,它的具体功能是将编译标识区的24Bit编译标识的后12Bit取反并与前12Bit互换。当然该功能制造商也是保密的。还原出的编译标识配置号被传递给可配置译码电路,所述可配置译码电路在每片程序执行器芯片中都一样,但它能根据不同的编译标识配置号表现出不同的译码功能。在本例中,所述可配置译码电路由8个8选1的多路选择器组成,它们将来自客户程序存储器的每条指令的8Bit重新排序后再交给程序执行器核。所述可配置译码电路根据客户C的编译标识配置号”42607315”(8进制)表现出的特定译码功能是将来自客户程序存储器的指令的第4位、第2位、第6位、第0位、第7位、第3位、第1位、第5位分别排在第7位到第0位再交给程序执行器核。结合步骤S74的转换处理,可知可配置译码电路正好还原出通用机器码指令。如果将所述可配置译码电路与程序执行器核合并起来看,该合并体表现为一个机器码指令集可配置的程序执行器核,具体配置结果由编译标识决定。如权利要求9所述,可以看作该合并体按照编译标识确定的机器码指令集解释及执行程序。而未采用本专利的现有程序执行器芯片都只有一套确定的机器码指令集。
由于有了步骤S74的转换,破解者即使读出了客户程序存储器中的客户C的专用机器码程序,也无法实现快速仿制或者反汇编成汇编程序。因为客户C的专用机器码程序已经是经过步骤S74处理过的,它与通用的机器码指令集并不兼容,也即不能被普通的程序执行器所识别,所以即使破解者去市场上采购同一型号的程序执行器,由于缺少了与S74转换操作对应的译码操作,也就无法运行该机器码程序,故不能实现快速仿制。又因为步骤S74的转换方法是保密的,转换后的客户专用机器码程序和汇编程序之间的对应关系已经不是原来的通用的、公开的对应关系,所以破解者在无法知晓该转换方法的情况下,无法将客户的专用机器码程序反汇编成汇编程序。故破解者无法获知程序的设计思想和算法,对程序进行改进也就无从谈起了。
图8为本例中的程序执行器的框图,其中虚线框内为可配置译码电路83。编译标识硬件加密电路84收到编译标识配置号后,生成编译标识,写入编译标识区85;然后编译标识传递给编译标识硬件解密电路86,还原出编译标识配置号,用于配置可配置译码电路83。可配置译码电路由8个8选1的多路选择器组成。编译标识配置号共24Bit,分为8组,每组3Bit各控制一个多路选择器,它们将来自客户程序存储器81的每条指令的8Bit重新排序后输出给程序执行器核82。当然,实际的可配置译码电路并不只有一种设计方式,只要达到所需的译码功能,都包括在本发明的权利要求范围内。
图9示出了采用了本发明的程序执行器的另一方案及客户在该程序执行器平台上进行程序开发的另一实施例的流程。下面结合图9对该流程进行详细描述。
步骤S91客户从制造商或供应商处获得程序执行器,该程序执行器的编译标识区未经配置,即编译标识区为缺省值。然后客户随机选择一个编译标识配置号,并将该编译标识配置号输入程序执行器以生成编译标识,完成对程序执行器的配置。比如,本例中要求编译标识配置号为30Bit,客户D选择的编译标识配置号可以用16进制表示为”3A73 FF5A”。客户D将此编译标识配置号”3A73 FF5A”写入程序执行器芯片,经程序执行器片内新增的一块编译标识硬件加密电路处理后生成编译标识并存入所述编译标识区。该编译标识硬件加密电路的具体功能由制造商保密。在本例中,该硬件加密电路的具体功能是将客户输入的编译标识配置号分为3个10Bit并相加,然后舍弃进位将10Bit加法运算结果取反,生成编译标识。以客户D的配置号”3A73 FF5A”为例,先分为3个1OBit”3A7”、”OFF”、”35A”,相加后得“800”,舍弃进位后末10Bit为”000”,取反得编译标识为”3FF”。因此最后写入编译标识区的客户D的编译标识为”3FF”。因为编译标识区的信息只能通过所述新增的编译标识硬件加密电路来输入修改,而该加密电路的功能是保密的,所以即使破解者读出编译标识区内的编译标识,但由于不知道所述硬件加密电路的具体功能,就无法推出对应的编译标识配置号;而客户D也对自己的编译标识配置号保密,所以破解者无法向程序执行器的编译标识区写入客户D的编译标识。
步骤S92该步骤和图7所示实施例的步骤S73是相同的,即客户完成源程序设计,并按通用的编译方法将其编译成通用的机器码程序。
步骤S93将步骤S92所得的通用机器码程序输入程序执行器,所述通用机器码程序由片内的一块新增的可配置译码电路处理后生成客户的专用机器码程序,再存入片内的客户程序存储器。完成由通用机器码程序到专用机器码程序的转换工作的是片内的可配置译码电路,因此可将此看作程序执行器芯片也部分地参与了从汇编程序到客户专用机器码程序的编译工作。
所述可配置译码电路处于片内客户程序存储器与程序执行器核之间,它的具体处理功能由编译标识区的编译标识配置决定。程序执行器上电运行时,该译码电路负责将片内客户程序存储器中的专用机器码程序还原为通用机器码程序再交给程序执行器核执行。在本例中,所述可配置译码电路由10个异或门组成,它们将程序执行器核发出的指令寻址地址总线与编译标识区的编译标识按位异或后驱动客户程序存储器的地址总线。片内客户程序存储器为1K字节(BYTE)容量,每字节(BYTE)存储一条指令,对应的地址总线也是10Bit宽。所以该可配置译码电路经客户D的编译标识”3FF”配置后,表现出的译码功能是将程序执行器核发出的指令寻址地址总线按位取反后再驱动客户程序存储器的地址总线。当然,在客户向程序执行器输入通用机器码程序时,客户程序存储器的地址总线也是被可配置译码电路按相同的规则处理过的,所以程序执行器运行时获得的将是正确的通用机器码程序。可以让可配置译码电路在客户从程序执行器芯片中读出程序时也起作用,这样客户可以获得原来输入的通用机器码程序,以验证程序写入是否正确。当然这样设计有一定的危险性——要是破解者也能执行从程序执行器芯片中读取程序的话,他将直接获得客户D的通用机器码程序。可以考虑采取以下措施来阻止这种情况的发生,同时又允许客户D验证其程序写入是否正确①每次从程序执行器片内的客户程序存储器读出程序时须先输入编译标识配置号,经与编译标识区内的编译标识核对匹配后才允许读出;②禁止任何读出程序的操作,通过在程序末尾添加校验位,由程序执行器执行校验来验证程序写入是否正确。
如上所述,通用机器码程序被输入程序执行器时,每条指令都被指向了新的地址,然后在片内客户程序存储器形成了专用机器码程序。该项转换操作由可配置译码电路具体执行。因此破解者即使读出了客户程序存储器中的客户D的专用机器码程序,在无法知晓客户D的可配置译码电路的具体功能的情况下,也无法得到正确顺序的通用机器码程序或反汇编出正确顺序的汇编程序。破解者也可以去市场上采购同一型号的程序执行器并输入客户D的专用机器码程序,即使有客户D的编译标识“3FF”的辅助,最终写入客户程序存储器的仍然会是一个杂乱的程序。只得到客户D的专用机器码程序是不够的,因为无法将它不被改变地写入片内客户程序存储器,且包括客户D本人在内亦无法读懂它;得到客户D的通用机器码程序才是有意义的。
破解者要从客户D的专用机器码程序得到通用机器码程序,必须先分析出可配置译码电路经客户D的编译标识配置后表现出的具体功能。比如破解者可以向写有客户D的编译标识的程序执行器输入一些特定的机器码程序,然后与最终在片内客户程序存储器上产生的机器码程序作对比,以猜测可配置译码电路的具体功能。为了增加这项破解工作的难度,可以考虑再采用以下措施①片内客户程序存储器采用一次可编程只读存储器(OTP ROM)实现;②每次向程序执行器写入程序时须先输入编译标识配置号,经与编译标识区内的编译标识核对匹配后才允许写入;③可配置译码电路应具备一定的复杂度,并应尽可能地与程序执行器核电路混合设计在一起。
图10为本例中的程序执行器的框图,其中虚线框内为可配置译码电路103。编译标识硬件加密电路104收到编译标识配置号后,生成编译标识,写入编译标识区105;然后编译标识传递给可配置译码电路103。可配置译码电路由10个异或门组成,它们将程序执行器核发出的指令寻址地址总线与编译标识按位异或后驱动客户程序存储器的地址总线。
上述两个实施例中,编译和读取、解释的方式都是静态的,即相同的编译和读取、解释方法适用于整个编译过程。为了增加破解的成本,提高破解的复杂度,也可以将编译和读取、解释的方式设置为动态的。所谓动态是指可以设置一个条件,在不同的情况下,进行不同的编译和读取、解释操作。再举一个实施例来予以说明。图11示出了采用了本发明的程序执行器的另一方案及客户在该程序执行器平台上进行程序开发的另一实施例的流程。下面结合图11对该流程进行详细描述。
步骤S111客户从制造商或供应商处获得程序执行器,该程序执行器的编译标识区未经配置,即编译标识区为缺省值。
步骤S112客户完成源程序设计,并按通用的编译方法将其编译成通用的机器码程序。
步骤S113将上一步骤所得的通用机器码程序输入程序执行器,输入时所述程序执行器内一块新增的随机数发生器电路将先产生一个随机数并作为编译标识存入编译标识区,同时该编译标识亦用于配置片内的另一块新增的可配置译码电路;输入的通用机器码程序由该可配置译码电路处理后生成客户的专用机器码程序,并存入片内的客户程序存储器。
与图9所示实施例相比,本实施例用一块随机数发生器替代了由客户输入编译标识配置号的操作,使得从客户的角度看来,本实施例的流程与图1所示的现有技术中客户在程序执行器上开发程序的流程完全一致。但结局是不同的,本例中最后存入程序执行器片内客户程序存储器的不是客户输入的通用机器码程序,而是经过了转换的专用机器码程序。包括客户本人在内亦无法读懂该专用机器码程序,但它可以被程序执行器正确地还原及执行。前两个实施例中的写入编译标识配置号、由通用机器码程序转换到专用机器码程序的操作在本例中都由程序执行器片内的新增电路完成,而无须客户干预。
下面具体讲述本例中的程序执行器是如何运作的。比如,客户E向程序执行器输入通用机器码程序时①片内一块新增的随机数发生器电路先产生一个48Bi t随机数,可用16进制表示为“E80B 44C7 9A15”,该随机数被作为编译标识存入编译标识区;②片内的另一块新增的可配置译码电路经编译标识区的编译标识”E80B 44C7 9A15”配置后,表现出的具体功能为对地址属于000到3FF(16进制)的1K条机器码指令,执行每条指令的前两位取反;对接下来的地址属于400到7FF(16进制)的1K条机器码指令,执行每条指令的末两位互换;然后重复上述过程(这就是所称的动态编译方法);③客户E输入的通用机器码程序经所述可配置译码电路处理后生成专用机器码程序,并存入片内的客户程序存储器。完成这些步骤后,以后每次程序执行器上电运行时,它的可配置译码电路会先从编译标识区读出编译标识”E80B 44C7 9A15”用以配置自身,然后对来自客户程序存储器的指令作相同的处理对地址属于第一个1K、第三个1K、第五个1K......的指令执行每条指令的前两位取反,对地址属于第二个1K、第四个1K、第六个1K......的指令执行每条指令的末两位互换,处理后的指令再交给程序执行器核执行。可见,程序执行器上电运行时,它的可配置译码电路正好还原出了原来客户E输入的通用机器码程序。
在本例中,被写入了程序的程序执行器禁止程序读出。因为本例中程序执行器的编译标识由程序执行器自己随机生成,所以它无法甄别合法的客户E与非法的破解者,只能一律禁止程序读出。为了让客户E能够验证程序写入是否正确,可以在程序末尾添加校验位,由程序执行器执行校验来验证程序写入是否正确。
在本例中,制造商对可配置译码电路的具体功能仍是保密的。所以即使破解者读出了客户E的专用机器码程序,也无法从中还原出通用机器码程序。如果破解者企图向客户E的程序执行器写入一些特殊设计的程序以猜测其中的可配置译码电路的具体功能,也是徒劳的,因为写入时程序执行器片内的随机数发生器将产生新的编译标识来覆盖掉原来的编译标识,从而也改变了可配置译码电路的具体功能。即使是向程序执行器写入同一个机器码程序,每次写入时随机数发生器生成的编译标识也是不一样的。本例中随机数发生器生成的编译标识有48Bit,可以提供262144G(1G≈10亿)种组合。这意味着随机数发生器两次生成的编译标识相同的概率只有1/262144G。如果不停地作这项尝试,以1秒钟尝试一次为例,把这个概率提高到1‰需要的时间约为8925年。所以如果有人想让随机数发生器生成某个特定的编译标识的话,他需要特别耐心。从这个意义上讲,可以认为任何客户都无法在编译标识区中写入其他客户的编译标识。
图12为本例中的程序执行器的框图,其中虚线框内为可配置译码电路123,它由两个子模块123A、123B和一个2选1多路选择器123C组成。客户E写入通用机器码程序时,随机数发生器124生成一个随机数”E8OB 44C7 9A15”作为编译标识,写入编译标识区125;然后编译标识传递给可配置译码电路123。在该编译标识配置下,123A的功能为对每条指令的前两位取反,123B的功能为对每条指令的末两位互换,123C的功能为当程序执行器核122发出的指令寻址地址属于第一个1K、第三个1K、第五个1K......时选择123A的输出给122,当程序执行器核122发出的指令寻址地址属于第二个1K、第四个1K、第六个1K......时选择123B的输出给122。
应理解,本实施例中用一块随机数发生器替代由客户输入编译标识配置号的方法也可用于在前述实施例中生成编译标识,同样前述实施例中生成编译标识的方法亦可用于本实施例。另外,如权利要求2所述,这些实施例中的编译标识还可以采用另一种方式来实现,即制造商在程序执行器出厂前就根据客户信息在编译标识区中预先写入相应的编译标识,该编译标识区采用一次可编程只读存储器(OTP ROM)实现。也就是说,程序执行器一旦出厂,其内部的编译标识区就无法擦写。
应理解,本发明的重点在于通过以客户独有的编译方式编译获得将存储于客户程序存储器上的机器码程序,使得破解者即使获得这些机器码程序也无法直接使用或反汇编。上述提到的具体指令、具体的编译解释方式、可配置译码电路的具体实现等仅作为示例,并不用来限制本发明。
上述实施例是提供给本领域普通技术人员来实现或使用本发明的,本领域普通技术人员可在不脱离本发明的发明思想的情况下,对上述实施例做出种种修改或变化,因而本发明的保护范围并不被上述实施例所限,而应该是符合权利要求书提到的创新性特征的最大范围。
权利要求
1一种对程序执行器的程序信息的保护方法,用于在所述程序执行器脱离制造商和客户控制的情况下保护客户基于所述程序执行器开发的程序信息,其特征在于,所述保护方法包括(1)在所述程序执行器中增设编译标识区,所述编译标识区中存储对应不同编译方法的编译标识,并通过技术手段确保任何客户无法在编译标识区中写入其他客户的编译标识;(2)所述编译标识确定一种与之对应的由汇编程序到机器码程序的编译方法;(3)所述程序执行器根据编译标识读取、解释并执行客户的机器码程序,且所述读取或解释方法与步骤(2)中的编译方法匹配。
2根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(1)中,所述技术手段是指所述编译标识区采用一次可编程只读存储器实现,由制造商在所述编译标识区预设客户对应的编译标识。
3根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(1)中,所述技术手段是指,由程序执行器内的随机数发生器电路生成随机数作为编译标识存入编译标识区。
4根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(1)中,所述技术手段是指,首先由制造商提供给客户对应的编译标识配置号或由客户自己生成编译标识配置号,再由客户自行向程序执行器写入该编译标识配置号,所述编译标识配置号经程序执行器处理后生成编译标识并存入所述编译标识区。
5根据权利要求4所述的对程序执行器的程序信息的保护方法,其特征在于,所述处理功能包括具备一定复杂度的校验、运算、或者校验与运算的组合以增加破解的难度,而实现该处理功能的主体可以是在程序执行器中新增的一块硬件电路或内嵌的一段程序或者它们的组合。
6根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(2)中,所述编译方法既可以是指编译到与编译标识对应的特定的机器码指令集,也可以是指按编译标识确定的地址译码次序排序各条机器码指令,以得到与编译标识对应的机器码程序。
7根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(2)中,所述由汇编程序到机器码程序的编译过程既可由客户完成,也可由客户与程序执行器联合完成,或由程序执行器单独完成。
8根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(3)中,所述程序执行器根据编译标识或由编译标识还原得到的编译标识配置号读取、解释并执行客户的机器码程序,实现由编译标识生成相应编译标识配置号的主体可以是一块新增电路或者一段内嵌程序。
9根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,步骤(3)中,所述程序执行器按照编译标识确定的机器码指令集解释及执行程序,或按照编译标识确定的地址译码次序读取及执行程序,执行该特定解释或读取功能的主体可以是一块新增的译码电路,所述译码电路根据不同的编译标识表现出不同的译码功能。
10根据权利要求1所述的对程序执行器的程序信息的保护方法,其特征在于,所述编译方法和对应的读取、解释方法既可以是静态的,编译和读取、解释的行为不随时间的变化而变化;也可以是动态的,编译和读取、解释的行为在不同的条件下是不同的。
全文摘要
本发明公开了一种对程序执行器的程序信息的保护方法,它不依赖于防止客户的程序信息被读出,增加了破解成本,延长了破解所需时间,有效防止客户的程序信息被轻易破解。其技术方案为(1)在程序执行器中增设编译标识区,编译标识区中存储对应不同编译方法的编译标识,并通过技术手段确保任何客户无法在编译标识区中写入其他客户的编译标识;(2)所述编译标识确定一种与之对应的由汇编程序到机器码程序的编译方法;(3)程序执行器根据编译标识读取、解释并执行客户的机器码程序,且所述读取或解释方法与步骤(2)中的编译方法匹配。本发明可应用于保护程序执行器的程序信息。
文档编号G06F9/45GK1975753SQ20061016287
公开日2007年6月6日 申请日期2006年11月27日 优先权日2006年4月26日
发明者何波, 王涛 申请人:何波, 王涛
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1