專利名稱:一種直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機安全領(lǐng)域,尤其涉及到計算機軟件版權(quán)保護的加密鎖。
背景技術(shù):
在現(xiàn)今的信息化時代,以計算機為核心的信息處理技術(shù)處于絕對的領(lǐng)導(dǎo)地位,對人類社會的發(fā)展、國民經(jīng)濟的提高和人們生活的改變影響十分巨大。而計算機軟件又是計算機系統(tǒng)的靈魂,控制和指揮機器的各種操作。
自從有軟件誕生以來,軟件盜版便與此同生,嚴重損害了勞動者的正當利益,擾亂了社會經(jīng)濟秩序。與此同時,與軟件盜版相抗爭的軟件版權(quán)保護產(chǎn)品也相應(yīng)而生,主要是最開始的純軟件加密和后來的加密鎖。加密鎖隨著技術(shù)的不斷進步和發(fā)展在很大程度上有力打擊了軟件盜版,有效地保護了勞動者的知識產(chǎn)權(quán)和合法利益。
加密鎖是插在計算機串口、并口或USB口上的一個硬件設(shè)備,用于與被保護軟件通訊以確定軟件是否合法,以此來決定軟件是否繼續(xù)運行。加密鎖的發(fā)展大致經(jīng)歷了邏輯電路加密鎖、存儲器加密鎖、邏輯電路加存儲器加密鎖、可編程加密鎖、智能卡加密鎖五個階段。時至今日,可編程和智能卡相結(jié)合的技術(shù)在相當?shù)某潭壬媳Wo了軟件的安全,極大地提高了解密者的難度,相對以前來說具有質(zhì)的突破,代表著當前的主流技術(shù)。該技術(shù)的特征是把被保護軟件中進行算術(shù)運算和邏輯運算的代碼分離到智能卡中,利用智能卡存儲空間大、運算能力強和安全的特點,在與系統(tǒng)相對獨立的智能卡內(nèi)進行處理,這樣使解密者無法進行跟蹤和分析。
這一技術(shù)在計算機軟件版權(quán)保護領(lǐng)域沿用了很長時間,由于該技術(shù)本身存在的缺陷以及人們長期的使用,仍發(fā)現(xiàn)該技術(shù)當前主要存在以下不足1、只能從被保護軟件中分離算術(shù)運算代碼和邏輯運算代碼到加密鎖。但是大多數(shù)軟件很少具有純運算的代碼,就是有也可以被解密者使用軟件進行防真或模擬;2、需要軟件作者花費大量的時間去學(xué)習(xí)和掌握加密鎖的使用方法和軟件加密技術(shù)。
3、采用該技術(shù)的加密鎖所提供的開發(fā)環(huán)境接口并不完全支持現(xiàn)今市面上各種各樣的程序開發(fā)環(huán)境。
發(fā)明內(nèi)容
為了克服軟件加密鎖技術(shù)當前存在的嚴重不足,本發(fā)明提出了一種“時間范圍和動態(tài)代碼注入相結(jié)合”的技術(shù),能夠直接從可執(zhí)行文件中任意分離代碼到加密鎖,完全不需要軟件開發(fā)者學(xué)習(xí)和掌握加密鎖的使用方法和軟件加密技術(shù),能從根本上很好地解決當前加密鎖技術(shù)存在的不足。
本發(fā)明所采用的技術(shù)方案是直接把可執(zhí)行文件中的任意代碼分離到智能卡加密鎖內(nèi),在智能卡加密鎖內(nèi)設(shè)置一個時鐘計時器、隨機數(shù)發(fā)生器,在可執(zhí)行文件中被分離代碼后的空白處填充與加密鎖進行通訊的交互代碼;加密鎖在運行時把分離到鎖內(nèi)的一段需要連續(xù)執(zhí)行的代碼采用特定的協(xié)議和算法進行動態(tài)地分解、加密和保護,產(chǎn)生若干個小塊,并根據(jù)一個小塊在正常執(zhí)行時所需的時間范圍來決定向外釋放相鄰的下一個小塊,若向加密鎖發(fā)出的索取相鄰下一個小塊的請求在正常的時間范圍內(nèi)到達,則加密鎖向外釋放有效信息,否則向外釋放無效信息;并且在加密鎖與交互代碼之間加入一層加密鎖過濾驅(qū)動程序,由加密鎖、交互代碼和過濾驅(qū)動程序共同采用特定的協(xié)議和算法對通訊數(shù)據(jù)進行安全保護處理,以防止通訊數(shù)據(jù)在通訊鏈路以及在系統(tǒng)內(nèi)存中被非法監(jiān)控和截取。
這樣,該技術(shù)方案從根本上阻擊了解密者的靜態(tài)分析和動態(tài)跟蹤,因為代碼被分離到加密鎖內(nèi)使解密者沒有分析對象;因為解密者分析一段代碼所需的時間遠遠超過這段代碼的執(zhí)行時間,當加密鎖判斷請求在指定的時間范圍內(nèi)沒有到達時則會向外釋放無效信息,以此,極大地阻止了解密者使用各種動態(tài)跟蹤調(diào)試工具對軟件的破解。
本發(fā)明的有益效果是,極大地提高了加密鎖的加密強度、抗破解能力和易用性,與當前技術(shù)特征相比具有本質(zhì)的提高。
圖1表示的是把程序文件中的代碼任意分離到智能卡加密鎖內(nèi)實現(xiàn)軟件版權(quán)保護的原理圖;圖2表示的是智能卡加密鎖內(nèi)的“分離代碼處理引擎”如何對分離代碼進行處理,并與程序文件中填充的“交互代碼”交互,以向外釋放源代碼并執(zhí)行的原理圖。
具體實施例方式
下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細地說明本發(fā)明所提出的智能卡加密鎖L在原有基礎(chǔ)上增加了時鐘計時器和隨機數(shù)發(fā)生器,主要包含有CPU、RAM、EEPROM、FLASH、I/O、時鐘計時器和隨機數(shù)發(fā)生器。其中,時鐘計時器的功能用于計算加密鎖把當前一塊代碼釋放后到相鄰的需要連續(xù)執(zhí)行的下一塊代碼索取請求到達之間所用的時間;隨機數(shù)產(chǎn)生器的功能用于產(chǎn)生隨機數(shù)。
在圖1中,一個程序文件F通常是由數(shù)據(jù)段、堆棧段和代碼段構(gòu)成,把代碼段中的全部或部分代碼分離出來,并根據(jù)功能的不同劃分成各個功能模塊即初始化模塊A、事件處理模塊B、C和D,再把各模塊保存到智能卡加密鎖L內(nèi)的EEPROM中。并且,在被分離出代碼的程序文件G的空白處填充與加密鎖通訊的交互代碼使其成為受保護的程序文件H,并在各個模塊的入口點填充與加密鎖交互的通訊代碼,當程序文件H運行時,通訊代碼A、B、C、D就會相應(yīng)地被調(diào)用,這樣由通訊代碼向加密鎖發(fā)出請求,經(jīng)過加密鎖過濾驅(qū)動程序到達加密鎖,以加載并執(zhí)行相應(yīng)的源代碼。
在加密鎖的EEPROM中保存有分離代碼處理引擎和分解后的功能模塊A、B、C、D,當加密鎖工作時,分離代碼處理引擎和功能模塊A、B、C、D加載到RAM,分離代碼處理引擎中的分析模塊、分解模塊、通訊模塊、保護模塊、加解密模塊根據(jù)特定的協(xié)議和算法對功能模塊A、B、C、D進行動態(tài)地分解、加密、保護和釋放,分解后產(chǎn)生小塊的個數(shù)、小塊的大小和對小塊的加密算法都是隨機確定的,分解模塊對各個小塊正常執(zhí)行時間的范圍進行確定和記錄,隨機數(shù)產(chǎn)生器產(chǎn)生與小塊相對應(yīng)的一系列隨機數(shù),最后由釋放模塊釋放,通過加密鎖過濾驅(qū)動程序?qū)用苕i和交互代碼之間的通訊數(shù)據(jù)在通訊鏈路上進行安全保護處理后,再交給交互代碼讀入內(nèi)存并執(zhí)行。釋放模塊從釋放一個小塊后開始計時,直到相鄰的下一個小塊索取請求到達為止,以此記錄一塊代碼的實際運行時間。
在圖2中,受保護的程序文件H在填充的交互代碼處有通訊代碼A、B、C、D,分別對應(yīng)于被分離的功能模塊A、B、C、D。在程序文件H運行時,與功能模塊對應(yīng)的通訊代碼A、B、C、D會被相應(yīng)地調(diào)用,通訊代碼通過提供智能卡加密鎖L的密碼、動態(tài)內(nèi)存單元、隨機數(shù)、模塊號這些參數(shù)創(chuàng)建一個請求,發(fā)送到智能卡加密鎖L,以獲取源代碼并執(zhí)行。
在智能卡加密鎖L中,首先,分離代碼處理引擎中的分析模塊根據(jù)請求所提供的參數(shù)以及先前確定的小塊正常執(zhí)行時間范圍和對應(yīng)的隨機數(shù)系列,對密碼、動態(tài)內(nèi)存單元、隨機數(shù)、時間范圍進行分析驗證,檢查提供的加密鎖操作密碼是否正確、檢查隨機數(shù)產(chǎn)生器記載的小塊代碼實際運行時間是否在正常時間范圍內(nèi)、檢查和小塊對應(yīng)的隨機數(shù)是否正確、檢查指定的動態(tài)內(nèi)存單元的值是否正確,若全部檢查通過則確定請求合法,向外釋放有效信息,否則向外釋放無效信息。
其中,密碼是指智能卡加密鎖L的操作密碼,向加密鎖發(fā)出請求時必須提供正確的密碼;動態(tài)內(nèi)存單元是指加密鎖與交互代碼在正常、安全的運行環(huán)境下,系統(tǒng)內(nèi)存中的數(shù)據(jù)在正常的運行狀態(tài)下某指定存儲單元的值,加密者事先知道該內(nèi)存單元的地址及其值;隨機數(shù)是分解模塊在把一段代碼分解成若干小塊后調(diào)用隨機數(shù)產(chǎn)生器產(chǎn)生的一系列和小塊對應(yīng)的隨機數(shù)值,一段代碼每執(zhí)行一次就產(chǎn)生新的一系列隨機數(shù),每發(fā)出一個小塊索取請求必需提供和該小塊相應(yīng)的隨機數(shù);時間范圍很關(guān)鍵,正常執(zhí)行時間是指小塊代碼事先在一個正常、安全的環(huán)境下運行所需的時間,實際運行時間是小塊代碼在實際運行中所占用的時間,釋放模塊從釋放一個小塊后開始計時,直到相鄰的下一個小塊索取請求到達為止,以此記錄一塊代碼的實際運行時間。
若請求非法則調(diào)用釋放模塊向外釋放垃圾代碼。
若請求合法則調(diào)用分解模塊,把相應(yīng)的功能模塊中在執(zhí)行時需要連續(xù)的代碼動態(tài)地分解成若干個小塊a1、a2等等,分解成小塊的個數(shù)及其大小是隨機的。然后,通訊模塊在每個小塊的后面加上與智能卡加密鎖L交互的通訊代碼以獲取相鄰的下一個小塊;再調(diào)用保護模塊,在前基礎(chǔ)上再加上自清除代碼,自清除代碼用于清除已執(zhí)行的小塊,以保證小塊在執(zhí)行完畢后毀滅;再調(diào)用加解密模塊,對當前的小塊進行加密,并在加密鎖內(nèi)記錄該小塊所對應(yīng)的解密信息,所采用的加密算法是隨機的。最后,調(diào)用釋放模塊把經(jīng)過保護和加密的小塊a1、a2等等釋放出去,再經(jīng)過加密鎖過濾驅(qū)動程序在通訊鏈路進行安全保護處理,以此作為對請求的應(yīng)答。
在實際運用中,對分解后的小塊并不一定都加密,可以有的加密有的不加密;加密鎖釋放的解密代碼可以只對當前小塊解密,也可對相鄰的下一小塊或多個小塊全部解密;釋放模塊在釋放一系列小塊時可隨機交叉釋放若干無效信息。
以上所述具體實施方式
僅為本發(fā)明的優(yōu)選實施例,本發(fā)明不限于上述實施例,對于本領(lǐng)域的一般技術(shù)人員而言,在不背離本發(fā)明原理即“直接把可執(zhí)行文件中的任意代碼分離到智能卡加密鎖內(nèi),在智能卡加密鎖內(nèi)設(shè)置一個時鐘計時器、隨機數(shù)發(fā)生器,在可執(zhí)行文件中被分離代碼后的空白處填充與加密鎖進行通訊的交互代碼;加密鎖在運行時把分離到鎖內(nèi)的一段需要連續(xù)執(zhí)行的代碼采用特定的協(xié)議和算法進行動態(tài)地分解、加密和保護,產(chǎn)生若干個小塊,并根據(jù)一個小塊在正常執(zhí)行時所需的時間范圍來決定向外釋放相鄰的下一個小塊,若向加密鎖發(fā)出的索取相鄰下一個小塊的請求在正常的時間范圍內(nèi)到達,則加密鎖向外釋放有效信息,否則向外釋放無效信息;并且在加密鎖與交互代碼之間加入一層加密鎖過濾驅(qū)動程序,由加密鎖、交互代碼和過濾驅(qū)動程序共同采用特定的協(xié)議和算法對通訊數(shù)據(jù)進行安全保護處理,以防止通訊數(shù)據(jù)在通訊鏈路以及在系統(tǒng)內(nèi)存中被非法監(jiān)控和截取。”的基礎(chǔ)上所作的任何顯而易見的改動,都屬于本發(fā)明的構(gòu)思和所附權(quán)利要求的保護范圍。
權(quán)利要求
1.一種直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是直接把可執(zhí)行文件中的任意代碼分離到智能卡加密鎖內(nèi),在智能卡加密鎖內(nèi)設(shè)置一個時鐘計時器、隨機數(shù)發(fā)生器,在可執(zhí)行文件中被分離代碼后的空白處填充與加密鎖進行通訊的交互代碼;加密鎖在運行時把分離到鎖內(nèi)的一段需要連續(xù)執(zhí)行的代碼采用特定的協(xié)議和算法進行動態(tài)地分解、加密和保護,產(chǎn)生若干個小塊,并根據(jù)一個小塊在正常執(zhí)行時所需的時間范圍來決定向外釋放相鄰的下一個小塊,若向加密鎖發(fā)出的索取相鄰下一個小塊的請求在正常的時間范圍內(nèi)到達,則加密鎖向外釋放有效信息,否則向外釋放無效信息;并且在加密鎖與交互代碼之間加入一層加密鎖過濾驅(qū)動程序,由加密鎖、交互代碼和過濾驅(qū)動程序共同采用特定的協(xié)議和算法對通訊數(shù)據(jù)進行安全保護處理,以防止通訊數(shù)據(jù)在通訊鏈路以及在系統(tǒng)內(nèi)存中被非法監(jiān)控和截取。
2.根據(jù)權(quán)利要求1所述的直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是直接把可執(zhí)行文件中的任意代碼分離到智能卡加密鎖內(nèi),任意代碼是指全部代碼或部分代碼,或者不僅只是具有算術(shù)運算和邏輯運算功能的代碼,而且還可以是具有其它任何功能的代碼。
3.根據(jù)權(quán)利要求1所述的直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是在智能卡加密鎖內(nèi)設(shè)置一個時鐘計時器、隨機數(shù)發(fā)生器,時鐘計時器的功能用于計算加密鎖把當前一塊代碼釋放后到相鄰的需要連續(xù)執(zhí)行的下一塊代碼索取請求到達之間所用的時間,隨機數(shù)產(chǎn)生器的功能用于產(chǎn)生隨機數(shù)。
4.根據(jù)權(quán)利要求1所述的直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是加密鎖在運行時把分離到鎖內(nèi)的一段需要連續(xù)執(zhí)行的代碼采用特定的協(xié)議和算法進行動態(tài)地分解、加密和保護,產(chǎn)生若干個小塊,采用以下協(xié)議和算法1)、被分解的一段代碼在執(zhí)行時必須是連續(xù)的,不具有人機交互或其它運行時間不確定的操作;2)、分解成小塊的個數(shù)是隨機的;3)、分解后小塊的大小是隨機的;4)、對小塊采用的加密算法是隨機的;5)、在小塊中添加自清除代碼,自清除代碼用于清除已執(zhí)行的小塊,以保證小塊在執(zhí)行完畢后毀滅;
5.根據(jù)權(quán)利要求1所述的直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是加密鎖事先確定并記錄一塊代碼在正常系統(tǒng)環(huán)境下運行所占用的時間范圍,在運行時由時鐘計時器記錄從釋放這塊代碼開始到加密鎖接收到索取相鄰的需要連續(xù)執(zhí)行的下一塊代碼的請求為止所占用的實際運行時間,若請求在正常時間范圍內(nèi)到達,則加密鎖向外釋放有效信息,否則向外釋放無效信息。
6.根據(jù)權(quán)利要求1所述的直接從軟件中任意分離代碼到加密鎖實現(xiàn)軟件版權(quán)保護的方法,其特征是在加密鎖與交互代碼之間加入一層加密鎖過濾驅(qū)動程序,由加密鎖、交互代碼和過濾驅(qū)動程序共同采用特定的協(xié)議和算法對通訊數(shù)據(jù)進行安全保護處理,以防止通訊數(shù)據(jù)在通訊鏈路以及在系統(tǒng)內(nèi)存中被非法監(jiān)控和截取,采用以下協(xié)議和算法1)、加密鎖隨機地向外釋放無效數(shù)據(jù);2)、加密鎖過濾驅(qū)動程序向交互代碼或加密鎖隨機發(fā)送無效數(shù)據(jù);3)、加密鎖過濾驅(qū)動程序修改通訊數(shù)據(jù)的傳輸?shù)刂罚?)、向加密鎖發(fā)出請求時,必須提供密碼、隨機數(shù)和動態(tài)內(nèi)存單元;密碼是指智能卡加密鎖L的操作密碼;動態(tài)內(nèi)存單元是指加密鎖與交互代碼在正常、安全的運行環(huán)境下,系統(tǒng)內(nèi)存中的數(shù)據(jù)在正常的運行狀態(tài)下某指定存儲單元的值,加密者事先知道該內(nèi)存單元的地址及其值;隨機數(shù)是分解模塊在把一段代碼分解成若干小塊后調(diào)用隨機數(shù)產(chǎn)生器產(chǎn)生的一系列和小塊對應(yīng)的隨機數(shù)值,一段代碼每執(zhí)行一次就產(chǎn)生新的一系列隨機數(shù),每發(fā)出一個小塊索取請求必需提供和該小塊相應(yīng)的隨機數(shù)。
全文摘要
本發(fā)明提出了一種“時間范圍和動態(tài)代碼注入相結(jié)合”的技術(shù),能夠直接從可執(zhí)行文件中任意分離代碼到加密鎖,完全不需要軟件開發(fā)者學(xué)習(xí)和掌握加密鎖的使用方法和軟件加密技術(shù),能從根本上很好地解決當前加密鎖技術(shù)存在的不足。本發(fā)明所采用的技術(shù)方案是直接把可執(zhí)行文件中的任意代碼分離到智能卡加密鎖內(nèi),在智能卡加密鎖內(nèi)設(shè)置一個時鐘計時器、隨機數(shù)發(fā)生器,在可執(zhí)行文件中被分離代碼后的空白處填充與加密鎖進行通訊的交互代碼;加密鎖在運行時把分離到鎖內(nèi)的一段需要連續(xù)執(zhí)行的代碼采用特定的協(xié)議和算法進行動態(tài)地分解、加密和保護,產(chǎn)生若干個小塊,并根據(jù)一個小塊在正常執(zhí)行時所需的時間范圍來決定向外釋放相鄰的下一個小塊,若交互代碼向加密鎖發(fā)出的索取相鄰下一個小塊的請求在正常的時間范圍內(nèi)到達,則加密鎖向外釋放有效信息,否則向外釋放無效信息;并且,在加密鎖與交互代碼之間加入一層加密鎖過濾驅(qū)動程序,由加密鎖、交互代碼和過濾驅(qū)動程序共同采用特定的協(xié)議和算法對通訊數(shù)據(jù)進行安全保護處理,以防止通訊數(shù)據(jù)在通訊鏈路以及在系統(tǒng)內(nèi)存中被非法監(jiān)控和截取。
文檔編號G06F21/22GK101038615SQ200710086459
公開日2007年9月19日 申請日期2007年3月12日 優(yōu)先權(quán)日2007年3月12日
發(fā)明者吳曉棟 申請人:吳曉棟