專利名稱:一種對程序執(zhí)行器的程序信息的保護方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對程序執(zhí)行器的程序信息的保護方法,可適用于通稱為微控制器(MCU)、微處理器(μP或MPU)、數(shù)字信號處理器(DSP)、中央處理器(CPU)、圖形處理器(GPU)的程序執(zhí)行器,以及用于片上系統(tǒng)(System On Chip)的嵌入式程序執(zhí)行器。
背景技術(shù):
目前各種程序執(zhí)行器得到了廣泛的應用,如微控制器(MCU)、微處理器(μP或MPU)、數(shù)字信號處理器(DSP)、中央處理器(CPU)、圖形處理器(GPU)以及用于片上系統(tǒng)(System On Chip)的嵌入式微處理器。通常在這些程序執(zhí)行器的應用中,需要利用非揮發(fā)的存儲器如掩膜只讀存儲器(Mask ROM)、可編程只讀存儲器(PROM)、一次可編程只讀存儲器(OTP ROM)、電可擦寫只讀存儲器(EEPROM)、閃存(Flash)或磁盤、光盤、磁帶等來存放程序執(zhí)行器讀取的機器碼形式的程序信息。非揮發(fā)的存儲器存放機器碼程序的優(yōu)點是這些信息在掉電的情況下可以長期保存而不丟失。
圖1示出了現(xiàn)有技術(shù)中客戶在程序執(zhí)行器上開發(fā)程序的流程。請參見圖1,S11客戶從芯片制造商或者供應商處獲得程序執(zhí)行器;S12客戶在計算機上編寫的源程序在計算機中被編譯成機器碼程序,該源程序可以是匯編程序或C程序等;S13客戶將機器碼程序?qū)懭肷鲜龀绦驁?zhí)行器的非揮發(fā)存儲器中,該非揮發(fā)存儲器可以設計在程序執(zhí)行器芯片內(nèi)部,也可以設置在片外與該執(zhí)行器電性連接。經(jīng)過上述步驟,機器碼程序就能在程序執(zhí)行器上順利運行了。接著參見圖2A和圖2B,圖1所示的流程以框圖的形式示出。其中圖2A示出了客戶程序存儲器設計在片內(nèi)的框圖結(jié)構(gòu),圖2B示出了客戶程序存儲器設計在片外的框圖結(jié)構(gòu)。
但是,不管非揮發(fā)存儲器設計在片內(nèi)還是片外,最終總是實現(xiàn)在某種物理材料上的(如硅片),所以任何具有相關(guān)技術(shù)背景的技術(shù)人員都能借助某些物理或化學的方法,以較低的成本讀出非揮發(fā)存儲器中存放的程序信息。為了描述方便,下文中把在未獲授權(quán)情況下企圖讀取他人程序執(zhí)行器產(chǎn)品中程序信息的人稱為破解者。
如果破解者讀出存儲于存儲器22A或22B(圖2A或圖2B中示出)中的機器碼程序,即可通過采購相同的程序執(zhí)行器并寫入該機器碼程序來實現(xiàn)快速仿制。而且,匯編指令集和該程序執(zhí)行器的機器碼指令集之間的轉(zhuǎn)換方式是公開且通用的,因此破解者還可以通過反匯編他人的機器碼程序來獲取對應的匯編程序,從而獲得程序的設計思想和算法,也可進一步在此基礎(chǔ)上對程序進行改進。
為此,人們開發(fā)了很多對機器碼程序信息的保護方法,這些方法的指導思想都是采用各種手段防止機器碼程序從存儲器22A或22B(圖2A或圖2B中示出)中被讀出或加大破解者讀出機器碼程序的時間和成本。例如,設置加密位進行保護,在完成向存儲器寫入機器碼程序后使能加密位以防止信息被讀出。一個簡單的方法即可令該保護機制失效破解者可以打開集成電路封裝,然后用某些特定的方法(如聚焦離子束(FIB))控制加密位信號,從而達到讀取機器碼程序的目的。因此,采用加密位的方法增加的破解成本不大,防止破解的效果一般。
發(fā)明內(nèi)容
本發(fā)明的目的在于解決上述問題,提供了一種對程序執(zhí)行器的程序信息的保護方法,它不依賴于防止客戶的程序信息被讀出,很大程度上增加了破解成本,也大大延長了破解所需的時間,能有效地防止客戶的程序信息在脫離制造商和客戶控制的情況下被輕易破解。
本發(fā)明的技術(shù)方案為一種對程序執(zhí)行器的程序信息的保護方法,用于在所述程序執(zhí)行器脫離制造商和客戶控制的情況下保護客戶基于所述程序執(zhí)行器開發(fā)的程序信息,其中,所述保護方法包括(1)在所述程序執(zhí)行器中增設編譯標識區(qū),所述編譯標識區(qū)中存儲對應不同編譯方法的編譯標識,并通過技術(shù)手段確保任何客戶無法在編譯標識區(qū)中寫入其他客戶的編譯標識;(2)所述編譯標識確定一種與之對應的由匯編程序到機器碼程序的編譯方法,且該編譯方法無須公開,可僅由制造商和對應的客戶掌握;(3)所述程序執(zhí)行器根據(jù)編譯標識讀取、解釋并執(zhí)行客戶的機器碼程序,且所述讀取或解釋方法與步驟(2)中的編譯方法匹配。類似的,該讀取或解釋方法也無須公開,可僅由制造商和對應的客戶掌握。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(1)中,所述技術(shù)手段是指所述編譯標識區(qū)采用一次可編程只讀存儲器實現(xiàn),由制造商在所述編譯標識區(qū)預設客戶對應的編譯標識。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(1)中,所述技術(shù)手段是指,由程序執(zhí)行器內(nèi)的隨機數(shù)發(fā)生器電路生成隨機數(shù)作為編譯標識存入編譯標識區(qū)。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(1)中,所述技術(shù)手段是指,首先由制造商提供給客戶對應的編譯標識配置號或由客戶自己生成編譯標識配置號,再由客戶自行向程序執(zhí)行器寫入該編譯標識配置號,所述編譯標識配置號經(jīng)程序執(zhí)行器處理后生成編譯標識并存入所述編譯標識區(qū)。該處理功能的具體內(nèi)容無須公開可僅由制造商掌握,而提供給每個客戶的編譯標識配置號可僅由制造商和對應的客戶掌握。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,所述處理功能包括具備一定復雜度的校驗、運算、或者校驗與運算的組合以增加破解的難度,而實現(xiàn)該處理功能的主體可以是在程序執(zhí)行器中新增的一塊硬件電路或內(nèi)嵌的一段程序或者它們的組合。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(2)中,所述編譯方法是指由客戶開發(fā)的匯編程序生成機器碼程序的方法,若客戶的原始程序設計采用的是高級程序語言,則需先將其轉(zhuǎn)換成匯編程序再編譯得到機器碼程序。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(2)中,所述編譯方法既可以是指編譯到與編譯標識對應的特定的機器碼指令集,也可以是指按編譯標識確定的地址譯碼次序排序各條機器碼指令,以得到與編譯標識對應的機器碼程序。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(2)中,所述由匯編程序到機器碼程序的編譯過程既可由客戶完成,也可由客戶與程序執(zhí)行器聯(lián)合完成,或由程序執(zhí)行器單獨完成。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(3)中,所述程序執(zhí)行器根據(jù)編譯標識或由編譯標識還原得到的編譯標識配置號讀取、解釋并執(zhí)行客戶的機器碼程序,實現(xiàn)由編譯標識生成相應編譯標識配置號的主體可以是一塊新增電路或者一段內(nèi)嵌程序。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,步驟(3)中,所述程序執(zhí)行器按照編譯標識確定的機器碼指令集解釋及執(zhí)行程序,或按照編譯標識確定的地址譯碼次序讀取及執(zhí)行程序,執(zhí)行該特定解釋或讀取功能的主體可以是一塊新增的譯碼電路,所述譯碼電路根據(jù)不同的編譯標識表現(xiàn)出不同的譯碼功能。所述譯碼電路的具體內(nèi)容由制造商保密。
上述的對程序執(zhí)行器的程序信息的保護方法,其中,所述編譯方法和對應的讀取、解釋方法既可以是靜態(tài)的,編譯和讀取、解釋的行為不隨時間的變化而變化;也可以是動態(tài)的,編譯和讀取、解釋的行為在不同的條件下是不同的。
本發(fā)明對比現(xiàn)有技術(shù)有如下的有益效果本發(fā)明通過編譯標識來控制機器碼程序的編譯和讀取、解釋方式。破解者即使讀出編譯標識和機器碼程序,由于無法向程序執(zhí)行器寫入他人的編譯標識,因此無法獲得可執(zhí)行該機器碼程序的程序執(zhí)行器,也不可能實現(xiàn)快速仿制。又由于無法獲得與編譯標識對應的編譯或者讀取、解釋方法,因此也無法讀懂這些機器碼程序或?qū)C器碼程序進行反匯編,也無法獲取他人的設計思想和算法,當然也不可能對該機器碼程序進行改進。
圖1是現(xiàn)有技術(shù)的客戶開發(fā)程序的流程圖。
圖2A是現(xiàn)有技術(shù)的客戶開發(fā)程序一個實施例的框圖。
圖2B是現(xiàn)有技術(shù)的客戶開發(fā)程序另一實施例的框圖。
圖3是本發(fā)明中客戶開發(fā)程序的一個實施例的流程圖。
圖4是圖3所示實施例中一譯碼電路實施例的邏輯電路圖。
圖5是本發(fā)明中客戶開發(fā)程序的另一實施例的流程圖。
圖6是圖5所示實施例中一譯碼電路實施例的邏輯電路圖。
圖7是本發(fā)明中客戶程序存儲器位于片外時客戶開發(fā)程序的一個實施例的流程圖。
圖8是圖7所示實施例的電路框圖。
圖9是本發(fā)明中客戶程序存儲器位于片內(nèi)時客戶開發(fā)程序的另一實施例的流程圖。
圖10是圖9所示實施例的電路框圖。
圖11是本發(fā)明中采用了動態(tài)編譯及解釋方案下客戶開發(fā)程序的又一實施例的流程圖。
圖12是圖11所示實施例的電路框圖。
具體實施例方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步的描述。
圖3示出了一種簡單的采用了本發(fā)明的程序執(zhí)行器的方案及客戶在該程序執(zhí)行器平臺上進行程序開發(fā)的一個實施例的流程。該方案在現(xiàn)有程序執(zhí)行器的基礎(chǔ)上新增一塊譯碼電路,它將來自客戶程序存儲器的機器碼程序譯碼后再交給程序執(zhí)行器。下面結(jié)合圖3對該流程進行詳細描述。
步驟S31客戶A從制造商或供應商處獲得程序執(zhí)行器,該程序執(zhí)行器的編譯標識區(qū)未經(jīng)配置,即編譯標識區(qū)為缺省值。程序執(zhí)行器新增了一塊編譯標識硬件加密電路,該硬件加密電路的功能僅由制造商掌握,其輸出端連接編譯標識區(qū)的輸入端。同時由制造商提供給客戶A對應的編譯標識配置號,該編譯標識配置號具有唯一性且僅有制造商和客戶A兩者知道??蛻鬉在拿到程序執(zhí)行器后向程序執(zhí)行器寫入該編譯標識配置號,該編譯標識配置號通過所述新增的編譯標識硬件加密電路的校驗和運算后形成編譯標識并存儲至編譯標識區(qū)中。其中編譯標識配置號和編譯標識可以是一個二進制串,而所述硬件加密電路的運算操作以二進制串的位運算為主,可以是取反運算、與或運算、重新排序等。因為編譯標識區(qū)的信息只能通過所述硬件加密電路來輸入修改,且硬件加密電路的功能是保密的,編譯標識配置號也僅有制造商和客戶兩者才知道,所以即使破解者讀出編譯標識區(qū)上的編譯標識,但由于不知道所述硬件加密電路的功能,就無法倒推出對應的編譯標識配置號,也就無法向程序執(zhí)行器的編譯標識區(qū)寫入想要的編譯標識。舉例來說,制造商分配給客戶A的編譯標識配置號是“1010”,客戶A將該標識號輸入至編譯標識硬件加密電路,該硬件加密電路的功能是將輸入的二進制串首末位互換后再重復6次后輸出,于是該硬件加密電路將“1010”轉(zhuǎn)換成編譯標識“001100110011001100110011”并存入客戶A的編譯標識區(qū)中。
應理解,上述的硬件加密電路并不是必須的,由程序執(zhí)行器執(zhí)行一段程序,該程序的功能與上述硬件加密電路的功能相同,也可以起到將編譯標識配置號轉(zhuǎn)換成編譯標識的作用?;蛘邔⒁挥布娐泛鸵怀绦蚪M合起來實現(xiàn)同樣的功能。只要能起到相同作用的實現(xiàn)方法,都應包含在本發(fā)明的保護范圍內(nèi)。
步驟S32客戶A在計算機上開發(fā)的源程序在計算機中被編譯成通用的機器碼程序。一般來說,客戶開發(fā)的源程序是匯編程序或者C語言程序等高級語言程序。匯編程序是基于匯編指令集來編寫的,這些匯編指令集中包括常用的ADD、MOV、LOAD等指令。但是機器本身無法識別這些匯編指令,機器只能識別由0和1組成的二進制序列,也即機器碼指令。所以對某一種程序執(zhí)行器,存在匯編指令集和機器碼指令集的對應關(guān)系,根據(jù)這種對應關(guān)系,可以將匯編程序轉(zhuǎn)換成機器可以識別的機器碼程序。比如,在8086芯片中,其二進制指令格式是16位的,一條匯編語句“MOV AX,BX”被解釋成“1000101111000011”的機器碼指令。如果源程序是匯編程序,則可在計算機上根據(jù)匯編指令集與通用機器碼指令集之間的對應關(guān)系,將匯編程序編譯成機器碼程序。如果源程序是C語言或者其他高級語言編寫的,則需先將其編譯成匯編程序,再將匯編程序編譯成機器碼程序。這一步驟屬于現(xiàn)有技術(shù),同圖1的步驟S12是一樣的。
步驟S33根據(jù)客戶A的編譯標識確定一種轉(zhuǎn)換方式,以該轉(zhuǎn)換方式將上一步驟中得到的通用機器碼程序轉(zhuǎn)換成客戶A的專用機器碼程序。這種轉(zhuǎn)換方式與步驟S35中譯碼電路的譯碼功能互為逆過程。步驟S33的這種轉(zhuǎn)換方式是步驟S31中的通用機器碼指令集與客戶A的專用機器碼指令集的一種對應關(guān)系。仍以步驟S31中客戶A的編譯標識“001100110011001100110011”為例,該編譯標識說明在步驟S35中,程序執(zhí)行器的解釋方法是先將客戶A的機器碼指令的前兩位取反。明顯地,其逆處理是將原來的通用機器碼程序的每條指令的前兩位取反,因此本步驟中相應的轉(zhuǎn)換方式也是將原來的通用機器碼程序的每條指令的前兩位取反以生成客戶A的專用機器碼程序。仍以匯編語句“MOV AX,BX”為例,經(jīng)步驟S32后被解釋成“1000101111000011”的機器碼指令,經(jīng)上述的轉(zhuǎn)換方式轉(zhuǎn)換后,生成“0100101111000011”的機器碼指令。在這里,轉(zhuǎn)換方式是制造商提供給客戶A并由制造商和客戶A保密,可以是一種對該轉(zhuǎn)換方式的文字描述,也可以是兩套機器碼指令集的對應表,也可以將該轉(zhuǎn)換方式實現(xiàn)成一個程序模塊??蛻鬉在作轉(zhuǎn)換時,可以根據(jù)上述轉(zhuǎn)換方式的文字描述或者兩套機器碼指令集的對應表手工轉(zhuǎn)換,也可以使用上述程序模塊在計算機上進行自動轉(zhuǎn)換。應理解,不應對具體的轉(zhuǎn)換方法進行限制。
步驟S34轉(zhuǎn)換為客戶A的專用機器碼程序被寫入程序執(zhí)行器的非揮發(fā)存儲器中,該非揮發(fā)存儲器可以設計在程序執(zhí)行器芯片的片內(nèi),也可以設置在片外與該執(zhí)行器電性連接。一般而言,該非揮發(fā)存儲器是只讀存儲器(ROM)。這一步驟也是現(xiàn)有技術(shù),與圖1中的步驟S13是相同的。經(jīng)過上述的轉(zhuǎn)換手段,破解者即使讀出了存儲在ROM中的客戶A的專用機器碼程序,也無法實現(xiàn)快速仿制或者反匯編成匯編程序。因為存儲于ROM中的客戶A的專用機器碼程序已經(jīng)是經(jīng)過步驟S33轉(zhuǎn)換處理過的,它與普通程序執(zhí)行器中的機器碼指令集并不兼容,也即不能被普通的程序執(zhí)行器所識別,所以即使破解者去市場上采購同一型號的程序執(zhí)行器,由于缺少了與轉(zhuǎn)換操作對應的解釋操作,也就無法運行該專用機器碼程序,故不能實現(xiàn)快速仿制。又因為轉(zhuǎn)換方式是客戶A獨有的,轉(zhuǎn)換后的機器碼指令和匯編指令之間的對應關(guān)系已經(jīng)不是原來公開的通用的對應關(guān)系,破解者在無法知曉該轉(zhuǎn)換方式的情況下,無法通過反匯編將此專用機器碼程序轉(zhuǎn)換成匯編程序。故破解者無法獲知程序的設計思想和算法,對程序進行改進也就無從談起了。
步驟S35客戶A的專用機器碼程序經(jīng)一譯碼電路轉(zhuǎn)換成原來的通用機器碼程序。該步驟和步驟S33的轉(zhuǎn)換過程是互逆的。給所有客戶的程序執(zhí)行器的譯碼電路都是一樣的,但不同的編譯標識可控制該譯碼電路表現(xiàn)出不同的譯碼功能。如上所述,經(jīng)步驟S33轉(zhuǎn)換之后的專用機器碼程序與程序執(zhí)行器核的通用機器碼指令集無法兼容,不能被其識別。譯碼電路被客戶A的編譯標識配置成功能為將客戶A的專用機器碼程序再次轉(zhuǎn)換成可與程序執(zhí)行器核的通用機器碼指令集兼容的通用機器碼程序。仍以上述客戶A的編譯標識為例,匯編語句“MOV AX,BX”在編譯轉(zhuǎn)換之后成為“0100101111000011”的二進制機器碼,但是該二進制機器碼無法被程序執(zhí)行器核所識別,譯碼電路根據(jù)客戶A的編譯標識配置成將機器碼指令的前兩位取反,因此經(jīng)譯碼電路,機器碼指令還原成“1000101111000011”,這就能被程序執(zhí)行器核所識別。程序執(zhí)行器會根據(jù)該機器碼指令進行正確的操作將寄存器BX中的值移動至寄存器AX中。
譯碼電路以邏輯電路器件實現(xiàn)其特定功能,以上述將機器碼指令的前兩位取反這一功能為例,該譯碼電路的實現(xiàn)方式如圖4所示的虛線框。在ROM 41連向程序執(zhí)行器42的前兩根位(bit)數(shù)據(jù)線上各設置一個反向器43A、43B,其余的位數(shù)據(jù)線上不設任何器件直接連接ROM 41和程序執(zhí)行器42。當然,實際的譯碼電路并不只有一種設計方式,只要達到所需的譯碼功能,都包括在本發(fā)明的權(quán)利要求范圍內(nèi)。
圖5示出了采用了本發(fā)明的程序執(zhí)行器的另一方案及客戶在該程序執(zhí)行器平臺上進行程序開發(fā)的另一實施例的流程。下面結(jié)合圖5對該流程進行詳細描述。
步驟S51該步驟和圖3所示實施例的步驟S31是相同的。在此就不再重復描述。舉例來說,制造商分配給客戶B的編譯標識配置號是“1101”,客戶B將該編譯標識配置號輸入至硬件電路,該硬件電路將“1101”轉(zhuǎn)換成編譯標識“110111011101110111011101”并存入編譯標識區(qū)中。
步驟S52設計一個存儲匯編指令集和機器碼指令集之間對應關(guān)系的庫,該庫中含有多張表,其中每張表對應一個客戶的編譯標識,存儲匯編指令集和該客戶所特有的機器碼指令集之間的對應關(guān)系。舉例來說,客戶B具有一張匯編指令集和機器碼指令集之間對應關(guān)系的表,客戶B的編譯標識“110111011101110111011101”是指將機器碼指令的末兩位交換,因此在表中匯編語句“MOV CL,55H”在該表中被解釋成“1011000101010110”的機器碼指令。
步驟S53編譯源程序時,用編譯標識區(qū)的編譯標識所對應的編譯方式將源程序編譯成機器碼程序。以客戶B為例,將源程序編譯到客戶B的專用機器碼指令集上。在編譯過程中,找到客戶B對應的那張表,匯編語句“MOV CL,55H”被直接編譯成“1011000101010110”的機器碼指令。此時實際上已經(jīng)完成了機器碼程序轉(zhuǎn)換的過程,它與圖3所示實施例的不同之處在于,圖3的實施例會將“MOV CL,55H”先編譯成通用的“1011000101010101”的機器碼指令,然后根據(jù)末兩位互換的方式轉(zhuǎn)換成“1011000101010110”;而本實施例改變了編譯的方式,直接將末兩位互換的轉(zhuǎn)換方式嵌入在編譯過程中,也即在使用編譯器對“MOV CL,55H”這一匯編語句進行編譯后就直接形成了“1011000101010110”的機器碼指令。
步驟S54將編譯獲得的客戶B的專用機器碼程序?qū)懭氤绦驁?zhí)行器的非揮發(fā)存儲器中。
步驟S55客戶B的專用機器碼程序在程序執(zhí)行器中解釋執(zhí)行。與圖3所示實施例的區(qū)別在于,本實施例中的程序執(zhí)行器具有多個機器碼指令集,其中每個機器碼指令集對應一個編譯標識。程序執(zhí)行器根據(jù)編譯標識,選取對應的機器碼指令集執(zhí)行。以客戶B為例,程序執(zhí)行器根據(jù)客戶B的編譯標識,選取對應的機器碼指令集后直接運行客戶B的專用機器碼程序。
應理解,步驟S55也可以采用圖3實施例的步驟S35來實現(xiàn),即增加一個將機器碼指令的末兩位互換的譯碼電路。譯碼電路以邏輯電路器件實現(xiàn)其特定功能,以上述將機器碼指令的末兩位互換這一功能為例,該譯碼電路的實現(xiàn)方式如圖6所示的虛線框。在ROM 61連向程序執(zhí)行器63的末兩位(bit)數(shù)據(jù)線上設置一個能使兩位信號互換的模塊62,其余的位數(shù)據(jù)線上不設任何器件直接連接ROM 61和程序執(zhí)行器63。其中位數(shù)據(jù)線64連在模塊62的輸入口A上,位數(shù)據(jù)線65連在模塊62的輸入口B上,經(jīng)模塊62處理之后,輸出口C輸出輸入口B接收的信號,而輸出口D輸出輸入口A接收的信號。當然,實際的譯碼電路并不只有一種設計方式,只要達到所需的譯碼功能,都包括在本發(fā)明的權(quán)利要求范圍內(nèi)。
圖7示出了采用了本發(fā)明的程序執(zhí)行器的另一方案及客戶在該程序執(zhí)行器平臺上進行程序開發(fā)的另一實施例的流程。該方案在現(xiàn)有程序執(zhí)行器的基礎(chǔ)上增加了一塊編譯標識硬件加密電路、一塊編譯標識硬件解密電路和一塊可配置譯碼電路,該譯碼電路將來自片外客戶程序存儲器的機器碼程序譯碼后再交給程序執(zhí)行器。下面結(jié)合圖7對該流程進行詳細描述。
步驟S71客戶C從制造商或供應商處獲得程序執(zhí)行器,該程序執(zhí)行器的編譯標識區(qū)未經(jīng)配置,即編譯標識區(qū)為缺省值。同時制造商提供編譯標識配置號和編譯方法的對應關(guān)系,即如何由編譯標識配置號獲得對應的編譯方法,以及如何由客戶設計的編譯方法推出相應的編譯標識配置號。在本例中,制造商提供給客戶C的編譯標識配置號和編譯方法的對應關(guān)系是先按通用的、公開的編譯方法將客戶的源程序編譯成通用的機器碼程序,再按編譯標識配置號確定的轉(zhuǎn)換方法逐條轉(zhuǎn)換各條機器碼指令,以得到與編譯標識配置號對應的專用機器碼程序;本例中的程序執(zhí)行器的所有指令均為8Bit寬,來自片外客戶程序存儲器的每條指令的8Bit都會由一塊新增的可配置譯碼電路依據(jù)編譯標識配置號作重新排序后交給程序執(zhí)行器核執(zhí)行;編譯標識配置號共24Bit,分為8組,每組3Bit各確定一個位置;客戶可自行設計一種排序方法,對通用機器碼程序的每條指令的8Bit按此方法重新排序,可得自己的專用機器碼程序,然后再生成一個與此排序方法相匹配的編譯標識配置號,它可令所述可配置譯碼電路對來自片外客戶程序存儲器的每條指令作相反的處理,以還原出原來的通用機器碼指令,再交給程序執(zhí)行器核。
步驟S72客戶自行設計一種編譯方法,并根據(jù)制造商提供的編譯標識配置號和編譯方法的對應關(guān)系,推出相應的編譯標識配置號,再將該配置號輸入程序執(zhí)行器生成編譯標識,完成對程序執(zhí)行器的配置。在本例中,客戶C設計的編譯方法是將通用機器碼程序的每條指令的8Bit(從高到低分別用<7>,<6>,<5>,<4>,<3>,<2>,<1>,<0>標記)按照<3>,<5>,<0>,<7>,<2>,<6>,<1>,<4>的次序重新排列以獲得專用機器碼程序。為了令所述可配置譯碼電路從專用機器碼程序中還原出通用機器碼程序來,根據(jù)步驟S71制造商提供的編譯標識配置號和編譯方法的對應關(guān)系,可推出相應的編譯標識配置號可用8進制表示為“42607315”,它表示程序執(zhí)行器核獲得的指令的第7位到第0位分別來自于專用機器碼程序的指令的第4位、第2位、第6位、第0位、第7位、第3位、第1位、第5位。顯然地,客戶應對自己的編譯方法和編譯標識配置號保密。
然后客戶C將此編譯標識配置號“42607315”(8進制)寫入程序執(zhí)行器芯片,經(jīng)程序執(zhí)行器片內(nèi)新增的一塊編譯標識硬件加密電路處理后生成編譯標識并存入所述編譯標識區(qū)。該編譯標識硬件加密電路的具體功能由制造商保密。在本例中,該硬件加密電路的具體功能是將客戶輸入的編譯標識配置號的前12Bit取反并與末12Bit互換。因此最后寫入編譯標識區(qū)的客戶C的編譯標識為“73153517”(8進制)。因為編譯標識區(qū)的信息只能通過所述新增的編譯標識硬件加密電路來輸入修改,而該加密電路的功能是保密的,所以即使破解者讀出編譯標識區(qū)內(nèi)的編譯標識,但由于不知道所述硬件加密電路的具體功能,就無法推出對應的編譯標識配置號;而客戶C也對自己的編譯標識配置號和編譯方法保密,所以破解者無法向程序執(zhí)行器的編譯標識區(qū)寫入客戶C的編譯標識。破解者還可能嘗試向程序執(zhí)行器寫入不同的編譯標識配置號,并記錄下生成的存儲于編譯標識區(qū)的編譯標識;在獲得大量這樣的”編譯標識配置號--編譯標識”對后,據(jù)此猜想編譯標識硬件加密電路的具體功能。為增加這項破解工作的難度,可采取以下措施①編譯標識硬件加密電路應具備一定復雜度;②編譯標識區(qū)可采用一次可編程只讀存儲器(OTP ROM)實現(xiàn);③編譯標識區(qū)禁止讀出,可通過在編譯標識中增設校驗位,由程序執(zhí)行器輸出編譯標識校驗結(jié)果來確認編譯標識是否寫入正確。
步驟S73客戶完成源程序設計,并按通用的編譯方法將其編譯成通用的機器碼程序。這一步驟屬于現(xiàn)有技術(shù),同圖1的步驟S12是一樣的。
步驟S74客戶根據(jù)在步驟S72中自己設計的編譯方法,對步驟S73中獲得的通用機器碼程序的機器碼指令逐條作轉(zhuǎn)換,以得到與自己的編譯標識配置號對應的專用機器碼程序。在本例中,具體轉(zhuǎn)換方法是將通用機器碼程序的每條指令的8 Bi t(從高到低分別用<7>,<6>,<5>,<4>,<3>,<2>,<1>,<0>標記)按照<3>,<5>,<0>,<7>,<2>,<6>,<1>,<4>的次序重新排列以獲得專用機器碼程序。
當然,步驟S73和S74亦可合并執(zhí)行,即根據(jù)匯編指令集到通用機器碼指令集的對應關(guān)系以及通用機器碼指令集到客戶的專用機器碼指令集的對應關(guān)系,推出匯編指令集到客戶的專用機器碼指令集的對應關(guān)系,然后直接將客戶的源程序編譯成客戶的專用機器碼程序。所以,如權(quán)利要求6所述,也可以這樣來理解這一過程客戶C的編譯標識配置號“42607315”確定了一套客戶C專有的機器碼指令集,直接將客戶C的源程序編譯到此機器碼指令集上即可獲得客戶C的專用機器碼程序。
步驟S75將客戶專用機器碼程序?qū)懭肟蛻舫绦虼鎯ζ髦?。在本例中,客戶程序存儲器在片外,因此可以通過通用的燒錄器寫入。這一步驟也是現(xiàn)有技術(shù),與圖1中的步驟S13是相同的。
完成這些步驟后,每次給程序執(zhí)行器上電運行程序時,所述程序執(zhí)行器會先根據(jù)編譯標識還原出編譯標識配置號。在本例中,實現(xiàn)由編譯標識生成相應編譯標識配置號的主體是一塊新增的編譯標識硬件解密電路,它的具體功能是將編譯標識區(qū)的24Bit編譯標識的后12Bit取反并與前12Bit互換。當然該功能制造商也是保密的。還原出的編譯標識配置號被傳遞給可配置譯碼電路,所述可配置譯碼電路在每片程序執(zhí)行器芯片中都一樣,但它能根據(jù)不同的編譯標識配置號表現(xiàn)出不同的譯碼功能。在本例中,所述可配置譯碼電路由8個8選1的多路選擇器組成,它們將來自客戶程序存儲器的每條指令的8Bit重新排序后再交給程序執(zhí)行器核。所述可配置譯碼電路根據(jù)客戶C的編譯標識配置號”42607315”(8進制)表現(xiàn)出的特定譯碼功能是將來自客戶程序存儲器的指令的第4位、第2位、第6位、第0位、第7位、第3位、第1位、第5位分別排在第7位到第0位再交給程序執(zhí)行器核。結(jié)合步驟S74的轉(zhuǎn)換處理,可知可配置譯碼電路正好還原出通用機器碼指令。如果將所述可配置譯碼電路與程序執(zhí)行器核合并起來看,該合并體表現(xiàn)為一個機器碼指令集可配置的程序執(zhí)行器核,具體配置結(jié)果由編譯標識決定。如權(quán)利要求9所述,可以看作該合并體按照編譯標識確定的機器碼指令集解釋及執(zhí)行程序。而未采用本專利的現(xiàn)有程序執(zhí)行器芯片都只有一套確定的機器碼指令集。
由于有了步驟S74的轉(zhuǎn)換,破解者即使讀出了客戶程序存儲器中的客戶C的專用機器碼程序,也無法實現(xiàn)快速仿制或者反匯編成匯編程序。因為客戶C的專用機器碼程序已經(jīng)是經(jīng)過步驟S74處理過的,它與通用的機器碼指令集并不兼容,也即不能被普通的程序執(zhí)行器所識別,所以即使破解者去市場上采購同一型號的程序執(zhí)行器,由于缺少了與S74轉(zhuǎn)換操作對應的譯碼操作,也就無法運行該機器碼程序,故不能實現(xiàn)快速仿制。又因為步驟S74的轉(zhuǎn)換方法是保密的,轉(zhuǎn)換后的客戶專用機器碼程序和匯編程序之間的對應關(guān)系已經(jīng)不是原來的通用的、公開的對應關(guān)系,所以破解者在無法知曉該轉(zhuǎn)換方法的情況下,無法將客戶的專用機器碼程序反匯編成匯編程序。故破解者無法獲知程序的設計思想和算法,對程序進行改進也就無從談起了。
圖8為本例中的程序執(zhí)行器的框圖,其中虛線框內(nèi)為可配置譯碼電路83。編譯標識硬件加密電路84收到編譯標識配置號后,生成編譯標識,寫入編譯標識區(qū)85;然后編譯標識傳遞給編譯標識硬件解密電路86,還原出編譯標識配置號,用于配置可配置譯碼電路83??膳渲米g碼電路由8個8選1的多路選擇器組成。編譯標識配置號共24Bit,分為8組,每組3Bit各控制一個多路選擇器,它們將來自客戶程序存儲器81的每條指令的8Bit重新排序后輸出給程序執(zhí)行器核82。當然,實際的可配置譯碼電路并不只有一種設計方式,只要達到所需的譯碼功能,都包括在本發(fā)明的權(quán)利要求范圍內(nèi)。
圖9示出了采用了本發(fā)明的程序執(zhí)行器的另一方案及客戶在該程序執(zhí)行器平臺上進行程序開發(fā)的另一實施例的流程。下面結(jié)合圖9對該流程進行詳細描述。
步驟S91客戶從制造商或供應商處獲得程序執(zhí)行器,該程序執(zhí)行器的編譯標識區(qū)未經(jīng)配置,即編譯標識區(qū)為缺省值。然后客戶隨機選擇一個編譯標識配置號,并將該編譯標識配置號輸入程序執(zhí)行器以生成編譯標識,完成對程序執(zhí)行器的配置。比如,本例中要求編譯標識配置號為30Bit,客戶D選擇的編譯標識配置號可以用16進制表示為”3A73 FF5A”??蛻鬌將此編譯標識配置號”3A73 FF5A”寫入程序執(zhí)行器芯片,經(jīng)程序執(zhí)行器片內(nèi)新增的一塊編譯標識硬件加密電路處理后生成編譯標識并存入所述編譯標識區(qū)。該編譯標識硬件加密電路的具體功能由制造商保密。在本例中,該硬件加密電路的具體功能是將客戶輸入的編譯標識配置號分為3個10Bit并相加,然后舍棄進位將10Bit加法運算結(jié)果取反,生成編譯標識。以客戶D的配置號”3A73 FF5A”為例,先分為3個1OBit”3A7”、”O(jiān)FF”、”35A”,相加后得“800”,舍棄進位后末10Bit為”000”,取反得編譯標識為”3FF”。因此最后寫入編譯標識區(qū)的客戶D的編譯標識為”3FF”。因為編譯標識區(qū)的信息只能通過所述新增的編譯標識硬件加密電路來輸入修改,而該加密電路的功能是保密的,所以即使破解者讀出編譯標識區(qū)內(nèi)的編譯標識,但由于不知道所述硬件加密電路的具體功能,就無法推出對應的編譯標識配置號;而客戶D也對自己的編譯標識配置號保密,所以破解者無法向程序執(zhí)行器的編譯標識區(qū)寫入客戶D的編譯標識。
步驟S92該步驟和圖7所示實施例的步驟S73是相同的,即客戶完成源程序設計,并按通用的編譯方法將其編譯成通用的機器碼程序。
步驟S93將步驟S92所得的通用機器碼程序輸入程序執(zhí)行器,所述通用機器碼程序由片內(nèi)的一塊新增的可配置譯碼電路處理后生成客戶的專用機器碼程序,再存入片內(nèi)的客戶程序存儲器。完成由通用機器碼程序到專用機器碼程序的轉(zhuǎn)換工作的是片內(nèi)的可配置譯碼電路,因此可將此看作程序執(zhí)行器芯片也部分地參與了從匯編程序到客戶專用機器碼程序的編譯工作。
所述可配置譯碼電路處于片內(nèi)客戶程序存儲器與程序執(zhí)行器核之間,它的具體處理功能由編譯標識區(qū)的編譯標識配置決定。程序執(zhí)行器上電運行時,該譯碼電路負責將片內(nèi)客戶程序存儲器中的專用機器碼程序還原為通用機器碼程序再交給程序執(zhí)行器核執(zhí)行。在本例中,所述可配置譯碼電路由10個異或門組成,它們將程序執(zhí)行器核發(fā)出的指令尋址地址總線與編譯標識區(qū)的編譯標識按位異或后驅(qū)動客戶程序存儲器的地址總線。片內(nèi)客戶程序存儲器為1K字節(jié)(BYTE)容量,每字節(jié)(BYTE)存儲一條指令,對應的地址總線也是10Bit寬。所以該可配置譯碼電路經(jīng)客戶D的編譯標識”3FF”配置后,表現(xiàn)出的譯碼功能是將程序執(zhí)行器核發(fā)出的指令尋址地址總線按位取反后再驅(qū)動客戶程序存儲器的地址總線。當然,在客戶向程序執(zhí)行器輸入通用機器碼程序時,客戶程序存儲器的地址總線也是被可配置譯碼電路按相同的規(guī)則處理過的,所以程序執(zhí)行器運行時獲得的將是正確的通用機器碼程序??梢宰尶膳渲米g碼電路在客戶從程序執(zhí)行器芯片中讀出程序時也起作用,這樣客戶可以獲得原來輸入的通用機器碼程序,以驗證程序?qū)懭胧欠裾_。當然這樣設計有一定的危險性——要是破解者也能執(zhí)行從程序執(zhí)行器芯片中讀取程序的話,他將直接獲得客戶D的通用機器碼程序??梢钥紤]采取以下措施來阻止這種情況的發(fā)生,同時又允許客戶D驗證其程序?qū)懭胧欠裾_①每次從程序執(zhí)行器片內(nèi)的客戶程序存儲器讀出程序時須先輸入編譯標識配置號,經(jīng)與編譯標識區(qū)內(nèi)的編譯標識核對匹配后才允許讀出;②禁止任何讀出程序的操作,通過在程序末尾添加校驗位,由程序執(zhí)行器執(zhí)行校驗來驗證程序?qū)懭胧欠裾_。
如上所述,通用機器碼程序被輸入程序執(zhí)行器時,每條指令都被指向了新的地址,然后在片內(nèi)客戶程序存儲器形成了專用機器碼程序。該項轉(zhuǎn)換操作由可配置譯碼電路具體執(zhí)行。因此破解者即使讀出了客戶程序存儲器中的客戶D的專用機器碼程序,在無法知曉客戶D的可配置譯碼電路的具體功能的情況下,也無法得到正確順序的通用機器碼程序或反匯編出正確順序的匯編程序。破解者也可以去市場上采購同一型號的程序執(zhí)行器并輸入客戶D的專用機器碼程序,即使有客戶D的編譯標識“3FF”的輔助,最終寫入客戶程序存儲器的仍然會是一個雜亂的程序。只得到客戶D的專用機器碼程序是不夠的,因為無法將它不被改變地寫入片內(nèi)客戶程序存儲器,且包括客戶D本人在內(nèi)亦無法讀懂它;得到客戶D的通用機器碼程序才是有意義的。
破解者要從客戶D的專用機器碼程序得到通用機器碼程序,必須先分析出可配置譯碼電路經(jīng)客戶D的編譯標識配置后表現(xiàn)出的具體功能。比如破解者可以向?qū)懹锌蛻鬌的編譯標識的程序執(zhí)行器輸入一些特定的機器碼程序,然后與最終在片內(nèi)客戶程序存儲器上產(chǎn)生的機器碼程序作對比,以猜測可配置譯碼電路的具體功能。為了增加這項破解工作的難度,可以考慮再采用以下措施①片內(nèi)客戶程序存儲器采用一次可編程只讀存儲器(OTP ROM)實現(xiàn);②每次向程序執(zhí)行器寫入程序時須先輸入編譯標識配置號,經(jīng)與編譯標識區(qū)內(nèi)的編譯標識核對匹配后才允許寫入;③可配置譯碼電路應具備一定的復雜度,并應盡可能地與程序執(zhí)行器核電路混合設計在一起。
圖10為本例中的程序執(zhí)行器的框圖,其中虛線框內(nèi)為可配置譯碼電路103。編譯標識硬件加密電路104收到編譯標識配置號后,生成編譯標識,寫入編譯標識區(qū)105;然后編譯標識傳遞給可配置譯碼電路103??膳渲米g碼電路由10個異或門組成,它們將程序執(zhí)行器核發(fā)出的指令尋址地址總線與編譯標識按位異或后驅(qū)動客戶程序存儲器的地址總線。
上述兩個實施例中,編譯和讀取、解釋的方式都是靜態(tài)的,即相同的編譯和讀取、解釋方法適用于整個編譯過程。為了增加破解的成本,提高破解的復雜度,也可以將編譯和讀取、解釋的方式設置為動態(tài)的。所謂動態(tài)是指可以設置一個條件,在不同的情況下,進行不同的編譯和讀取、解釋操作。再舉一個實施例來予以說明。圖11示出了采用了本發(fā)明的程序執(zhí)行器的另一方案及客戶在該程序執(zhí)行器平臺上進行程序開發(fā)的另一實施例的流程。下面結(jié)合圖11對該流程進行詳細描述。
步驟S111客戶從制造商或供應商處獲得程序執(zhí)行器,該程序執(zhí)行器的編譯標識區(qū)未經(jīng)配置,即編譯標識區(qū)為缺省值。
步驟S112客戶完成源程序設計,并按通用的編譯方法將其編譯成通用的機器碼程序。
步驟S113將上一步驟所得的通用機器碼程序輸入程序執(zhí)行器,輸入時所述程序執(zhí)行器內(nèi)一塊新增的隨機數(shù)發(fā)生器電路將先產(chǎn)生一個隨機數(shù)并作為編譯標識存入編譯標識區(qū),同時該編譯標識亦用于配置片內(nèi)的另一塊新增的可配置譯碼電路;輸入的通用機器碼程序由該可配置譯碼電路處理后生成客戶的專用機器碼程序,并存入片內(nèi)的客戶程序存儲器。
與圖9所示實施例相比,本實施例用一塊隨機數(shù)發(fā)生器替代了由客戶輸入編譯標識配置號的操作,使得從客戶的角度看來,本實施例的流程與圖1所示的現(xiàn)有技術(shù)中客戶在程序執(zhí)行器上開發(fā)程序的流程完全一致。但結(jié)局是不同的,本例中最后存入程序執(zhí)行器片內(nèi)客戶程序存儲器的不是客戶輸入的通用機器碼程序,而是經(jīng)過了轉(zhuǎn)換的專用機器碼程序。包括客戶本人在內(nèi)亦無法讀懂該專用機器碼程序,但它可以被程序執(zhí)行器正確地還原及執(zhí)行。前兩個實施例中的寫入編譯標識配置號、由通用機器碼程序轉(zhuǎn)換到專用機器碼程序的操作在本例中都由程序執(zhí)行器片內(nèi)的新增電路完成,而無須客戶干預。
下面具體講述本例中的程序執(zhí)行器是如何運作的。比如,客戶E向程序執(zhí)行器輸入通用機器碼程序時①片內(nèi)一塊新增的隨機數(shù)發(fā)生器電路先產(chǎn)生一個48Bi t隨機數(shù),可用16進制表示為“E80B 44C7 9A15”,該隨機數(shù)被作為編譯標識存入編譯標識區(qū);②片內(nèi)的另一塊新增的可配置譯碼電路經(jīng)編譯標識區(qū)的編譯標識”E80B 44C7 9A15”配置后,表現(xiàn)出的具體功能為對地址屬于000到3FF(16進制)的1K條機器碼指令,執(zhí)行每條指令的前兩位取反;對接下來的地址屬于400到7FF(16進制)的1K條機器碼指令,執(zhí)行每條指令的末兩位互換;然后重復上述過程(這就是所稱的動態(tài)編譯方法);③客戶E輸入的通用機器碼程序經(jīng)所述可配置譯碼電路處理后生成專用機器碼程序,并存入片內(nèi)的客戶程序存儲器。完成這些步驟后,以后每次程序執(zhí)行器上電運行時,它的可配置譯碼電路會先從編譯標識區(qū)讀出編譯標識”E80B 44C7 9A15”用以配置自身,然后對來自客戶程序存儲器的指令作相同的處理對地址屬于第一個1K、第三個1K、第五個1K......的指令執(zhí)行每條指令的前兩位取反,對地址屬于第二個1K、第四個1K、第六個1K......的指令執(zhí)行每條指令的末兩位互換,處理后的指令再交給程序執(zhí)行器核執(zhí)行。可見,程序執(zhí)行器上電運行時,它的可配置譯碼電路正好還原出了原來客戶E輸入的通用機器碼程序。
在本例中,被寫入了程序的程序執(zhí)行器禁止程序讀出。因為本例中程序執(zhí)行器的編譯標識由程序執(zhí)行器自己隨機生成,所以它無法甄別合法的客戶E與非法的破解者,只能一律禁止程序讀出。為了讓客戶E能夠驗證程序?qū)懭胧欠裾_,可以在程序末尾添加校驗位,由程序執(zhí)行器執(zhí)行校驗來驗證程序?qū)懭胧欠裾_。
在本例中,制造商對可配置譯碼電路的具體功能仍是保密的。所以即使破解者讀出了客戶E的專用機器碼程序,也無法從中還原出通用機器碼程序。如果破解者企圖向客戶E的程序執(zhí)行器寫入一些特殊設計的程序以猜測其中的可配置譯碼電路的具體功能,也是徒勞的,因為寫入時程序執(zhí)行器片內(nèi)的隨機數(shù)發(fā)生器將產(chǎn)生新的編譯標識來覆蓋掉原來的編譯標識,從而也改變了可配置譯碼電路的具體功能。即使是向程序執(zhí)行器寫入同一個機器碼程序,每次寫入時隨機數(shù)發(fā)生器生成的編譯標識也是不一樣的。本例中隨機數(shù)發(fā)生器生成的編譯標識有48Bit,可以提供262144G(1G≈10億)種組合。這意味著隨機數(shù)發(fā)生器兩次生成的編譯標識相同的概率只有1/262144G。如果不停地作這項嘗試,以1秒鐘嘗試一次為例,把這個概率提高到1‰需要的時間約為8925年。所以如果有人想讓隨機數(shù)發(fā)生器生成某個特定的編譯標識的話,他需要特別耐心。從這個意義上講,可以認為任何客戶都無法在編譯標識區(qū)中寫入其他客戶的編譯標識。
圖12為本例中的程序執(zhí)行器的框圖,其中虛線框內(nèi)為可配置譯碼電路123,它由兩個子模塊123A、123B和一個2選1多路選擇器123C組成。客戶E寫入通用機器碼程序時,隨機數(shù)發(fā)生器124生成一個隨機數(shù)”E8OB 44C7 9A15”作為編譯標識,寫入編譯標識區(qū)125;然后編譯標識傳遞給可配置譯碼電路123。在該編譯標識配置下,123A的功能為對每條指令的前兩位取反,123B的功能為對每條指令的末兩位互換,123C的功能為當程序執(zhí)行器核122發(fā)出的指令尋址地址屬于第一個1K、第三個1K、第五個1K......時選擇123A的輸出給122,當程序執(zhí)行器核122發(fā)出的指令尋址地址屬于第二個1K、第四個1K、第六個1K......時選擇123B的輸出給122。
應理解,本實施例中用一塊隨機數(shù)發(fā)生器替代由客戶輸入編譯標識配置號的方法也可用于在前述實施例中生成編譯標識,同樣前述實施例中生成編譯標識的方法亦可用于本實施例。另外,如權(quán)利要求2所述,這些實施例中的編譯標識還可以采用另一種方式來實現(xiàn),即制造商在程序執(zhí)行器出廠前就根據(jù)客戶信息在編譯標識區(qū)中預先寫入相應的編譯標識,該編譯標識區(qū)采用一次可編程只讀存儲器(OTP ROM)實現(xiàn)。也就是說,程序執(zhí)行器一旦出廠,其內(nèi)部的編譯標識區(qū)就無法擦寫。
應理解,本發(fā)明的重點在于通過以客戶獨有的編譯方式編譯獲得將存儲于客戶程序存儲器上的機器碼程序,使得破解者即使獲得這些機器碼程序也無法直接使用或反匯編。上述提到的具體指令、具體的編譯解釋方式、可配置譯碼電路的具體實現(xiàn)等僅作為示例,并不用來限制本發(fā)明。
上述實施例是提供給本領(lǐng)域普通技術(shù)人員來實現(xiàn)或使用本發(fā)明的,本領(lǐng)域普通技術(shù)人員可在不脫離本發(fā)明的發(fā)明思想的情況下,對上述實施例做出種種修改或變化,因而本發(fā)明的保護范圍并不被上述實施例所限,而應該是符合權(quán)利要求書提到的創(chuàng)新性特征的最大范圍。
權(quán)利要求
1一種對程序執(zhí)行器的程序信息的保護方法,用于在所述程序執(zhí)行器脫離制造商和客戶控制的情況下保護客戶基于所述程序執(zhí)行器開發(fā)的程序信息,其特征在于,所述保護方法包括(1)在所述程序執(zhí)行器中增設編譯標識區(qū),所述編譯標識區(qū)中存儲對應不同編譯方法的編譯標識,并通過技術(shù)手段確保任何客戶無法在編譯標識區(qū)中寫入其他客戶的編譯標識;(2)所述編譯標識確定一種與之對應的由匯編程序到機器碼程序的編譯方法;(3)所述程序執(zhí)行器根據(jù)編譯標識讀取、解釋并執(zhí)行客戶的機器碼程序,且所述讀取或解釋方法與步驟(2)中的編譯方法匹配。
2根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(1)中,所述技術(shù)手段是指所述編譯標識區(qū)采用一次可編程只讀存儲器實現(xiàn),由制造商在所述編譯標識區(qū)預設客戶對應的編譯標識。
3根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(1)中,所述技術(shù)手段是指,由程序執(zhí)行器內(nèi)的隨機數(shù)發(fā)生器電路生成隨機數(shù)作為編譯標識存入編譯標識區(qū)。
4根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(1)中,所述技術(shù)手段是指,首先由制造商提供給客戶對應的編譯標識配置號或由客戶自己生成編譯標識配置號,再由客戶自行向程序執(zhí)行器寫入該編譯標識配置號,所述編譯標識配置號經(jīng)程序執(zhí)行器處理后生成編譯標識并存入所述編譯標識區(qū)。
5根據(jù)權(quán)利要求4所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,所述處理功能包括具備一定復雜度的校驗、運算、或者校驗與運算的組合以增加破解的難度,而實現(xiàn)該處理功能的主體可以是在程序執(zhí)行器中新增的一塊硬件電路或內(nèi)嵌的一段程序或者它們的組合。
6根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(2)中,所述編譯方法既可以是指編譯到與編譯標識對應的特定的機器碼指令集,也可以是指按編譯標識確定的地址譯碼次序排序各條機器碼指令,以得到與編譯標識對應的機器碼程序。
7根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(2)中,所述由匯編程序到機器碼程序的編譯過程既可由客戶完成,也可由客戶與程序執(zhí)行器聯(lián)合完成,或由程序執(zhí)行器單獨完成。
8根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(3)中,所述程序執(zhí)行器根據(jù)編譯標識或由編譯標識還原得到的編譯標識配置號讀取、解釋并執(zhí)行客戶的機器碼程序,實現(xiàn)由編譯標識生成相應編譯標識配置號的主體可以是一塊新增電路或者一段內(nèi)嵌程序。
9根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,步驟(3)中,所述程序執(zhí)行器按照編譯標識確定的機器碼指令集解釋及執(zhí)行程序,或按照編譯標識確定的地址譯碼次序讀取及執(zhí)行程序,執(zhí)行該特定解釋或讀取功能的主體可以是一塊新增的譯碼電路,所述譯碼電路根據(jù)不同的編譯標識表現(xiàn)出不同的譯碼功能。
10根據(jù)權(quán)利要求1所述的對程序執(zhí)行器的程序信息的保護方法,其特征在于,所述編譯方法和對應的讀取、解釋方法既可以是靜態(tài)的,編譯和讀取、解釋的行為不隨時間的變化而變化;也可以是動態(tài)的,編譯和讀取、解釋的行為在不同的條件下是不同的。
全文摘要
本發(fā)明公開了一種對程序執(zhí)行器的程序信息的保護方法,它不依賴于防止客戶的程序信息被讀出,增加了破解成本,延長了破解所需時間,有效防止客戶的程序信息被輕易破解。其技術(shù)方案為(1)在程序執(zhí)行器中增設編譯標識區(qū),編譯標識區(qū)中存儲對應不同編譯方法的編譯標識,并通過技術(shù)手段確保任何客戶無法在編譯標識區(qū)中寫入其他客戶的編譯標識;(2)所述編譯標識確定一種與之對應的由匯編程序到機器碼程序的編譯方法;(3)程序執(zhí)行器根據(jù)編譯標識讀取、解釋并執(zhí)行客戶的機器碼程序,且所述讀取或解釋方法與步驟(2)中的編譯方法匹配。本發(fā)明可應用于保護程序執(zhí)行器的程序信息。
文檔編號G06F9/45GK1975753SQ20061016287
公開日2007年6月6日 申請日期2006年11月27日 優(yōu)先權(quán)日2006年4月26日
發(fā)明者何波, 王濤 申請人:何波, 王濤