專利名稱:一種軟件版權(quán)保護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種軟件版權(quán)保護(hù)方法,特別涉及一種在程序文件基礎(chǔ)上加入軟件保護(hù)相關(guān)代碼來實(shí)現(xiàn)軟件版權(quán)保護(hù)的方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件行業(yè)也在不斷發(fā)展,軟件的功能不斷增強(qiáng),軟件數(shù)量也不斷增長(zhǎng),然而多年來軟件被盜版一直是困擾眾多軟件開發(fā)商的重大難題,所以許多軟件開發(fā)商不得不在軟件產(chǎn)品的開發(fā)過程中就投入精力去編制軟件保護(hù)功能模塊,尤其是那些售價(jià)相對(duì)較高,面向特定領(lǐng)域的行業(yè)軟件產(chǎn)品。但在一個(gè)產(chǎn)品的開發(fā)過程中投入精力去實(shí)現(xiàn)軟件保護(hù)功能并非總能達(dá)到預(yù)期的效果,畢竟與軟件保護(hù)及加密相關(guān)的功能的開發(fā)需要以一定的實(shí)踐經(jīng)驗(yàn)為基礎(chǔ),根據(jù)軟件產(chǎn)品的具體特點(diǎn),制定軟件保護(hù)方案,并在軟件開發(fā)的初期就著手保護(hù)方案的量身設(shè)計(jì)。
在目前眾多的軟件保護(hù)類產(chǎn)品中,智能密鑰裝置是被普遍使用的產(chǎn)品。智能密鑰裝置是一種帶有處理器和存儲(chǔ)器的小型硬件裝置,它可通過計(jì)算機(jī)的數(shù)據(jù)通訊接口與計(jì)算機(jī)連接,具有控制軟件運(yùn)行和限制軟件功能的功能。其內(nèi)部存有私鑰,可預(yù)置加密算法功能,同時(shí)也可后期自行定制部分算法功能。當(dāng)為一個(gè)軟件產(chǎn)品安裝了智能密鑰裝置對(duì)其進(jìn)行保護(hù)后,軟件產(chǎn)品與智能密鑰裝置硬件就被綁定在一起,離開智能密鑰裝置軟件就無法正常運(yùn)行。智能密鑰裝置內(nèi)置的私鑰具有對(duì)外不可見性,與密鑰相關(guān)的運(yùn)算完全在裝置內(nèi)部運(yùn)行,且智能密鑰裝置具有抗攻擊的特性,安全性極高。
目前基于智能密鑰裝置對(duì)軟件進(jìn)行保護(hù)的方式主要有兩種一是結(jié)合智能密鑰裝置生產(chǎn)商所提供的API接口,改造軟件功能,在源代碼中嵌入對(duì)智能密鑰裝置功能的訪問,使自己的軟件與鎖中的數(shù)據(jù)或算法相綁定。在程序運(yùn)行期間盡可能地使程序的重要模塊脫離智能密鑰裝置后就無法正常運(yùn)行,這樣即使存放在硬盤上的程序文件及數(shù)據(jù)文件被復(fù)制了,只要智能密鑰裝置沒被復(fù)制,那么軟件運(yùn)行時(shí)必然仍需要智能密鑰裝置的參與,因而軟件也就無法被盜版。其缺點(diǎn)是需要專業(yè)程序員來實(shí)施方案的開發(fā),開發(fā)周期長(zhǎng),保護(hù)強(qiáng)度可控性低,強(qiáng)度受限于開發(fā)者的經(jīng)驗(yàn)。
二是利用智能密鑰裝置生廠商所提供的工具軟件直接對(duì)開發(fā)環(huán)境所生成的程序文件進(jìn)行操作,從而使這個(gè)程序文件結(jié)合了保護(hù)功能模塊,即外殼加密。外殼加密主要是指對(duì)一個(gè)已經(jīng)由編譯器所生成的含有指令碼的程序文件的結(jié)構(gòu)進(jìn)行改造,使另一個(gè)或多個(gè)含有指令碼的二進(jìn)制文件片段能順利地與這個(gè)文件相結(jié)合,形成一個(gè)新的程序文件。外殼加密的缺點(diǎn)是同一外殼加密工具所保護(hù)的不同應(yīng)用軟件的破解過程存在相似性,被保護(hù)的內(nèi)容會(huì)在計(jì)算機(jī)的內(nèi)存中重現(xiàn)。應(yīng)用代碼與后期外殼加密工具插入的代碼聯(lián)系較為松散,理論上都可以進(jìn)行分離并最終被破解。
所謂程序文件是指經(jīng)編譯后所生成的含有二進(jìn)制指令代碼的可執(zhí)行的文件。
發(fā)明內(nèi)容
本發(fā)明旨在提供一種軟件版權(quán)保護(hù)的方法,此方法能夠通過在程序文件的基礎(chǔ)上以加入軟件保護(hù)相關(guān)代碼并結(jié)合智能密鑰裝置的方式解決上述軟件版權(quán)保護(hù)存在的問題。
一種軟件版權(quán)保護(hù)方法,在對(duì)程序文件實(shí)行保護(hù)的過程中修改程序文件,添加保護(hù)相關(guān)代碼,生成受保護(hù)的程序文件;在執(zhí)行受保護(hù)的程序文件的過程中,軟件保護(hù)相關(guān)代碼與智能密鑰裝置交互,依據(jù)交互結(jié)果決定執(zhí)行狀態(tài)。
對(duì)程序文件實(shí)行保護(hù)的過程包括如下操作1)處理程序文件;2)加入保護(hù)相關(guān)代碼;3)修改程序文件中的入口點(diǎn)信息,使執(zhí)行轉(zhuǎn)向所述保護(hù)相關(guān)代碼;以上操作不分先后。
執(zhí)行受保護(hù)的程序文件的過程包括如下操作1)加載受保護(hù)的程序文件,根據(jù)修改后的入口點(diǎn)信息,首先執(zhí)行保護(hù)相關(guān)代碼;2)所述保護(hù)相關(guān)代碼與智能密鑰裝置進(jìn)行交互;3)當(dāng)交互結(jié)果為成功時(shí),處理所述受保護(hù)的程序文件;當(dāng)交互結(jié)果為失敗時(shí),系統(tǒng)報(bào)錯(cuò)并結(jié)束操作或執(zhí)行受限操作。
所述處理可以是對(duì)程序文件進(jìn)行加密或解密,而加密或解密是通過智能密鑰裝置完成的。所述處理也可以是對(duì)程序文件進(jìn)行壓縮或解壓縮。
可以將受保護(hù)的程序文件傳入所述智能密鑰裝置內(nèi)進(jìn)行加密或解密,其中,傳入所述智能密鑰裝置的可以為整個(gè)程序文件,也可以是程序文件的一個(gè)或多個(gè)部分;也通過向智能密鑰裝置傳入隨機(jī)計(jì)算因子,獲得密鑰特征信息,利用所述密鑰特征信息對(duì)程序文件進(jìn)行加密或解密。
對(duì)程序文件實(shí)行保護(hù)的過程中的處理還可以是截取程序文件的部分函數(shù),將其存儲(chǔ)于智能密鑰裝置中。將所述截取的部分函數(shù)轉(zhuǎn)換成智能密鑰裝置可處理的格式后,再存儲(chǔ)于所述智能密鑰裝置中。
執(zhí)行受保護(hù)的程序文件的過程中的處理是接收獲取相應(yīng)函數(shù)運(yùn)行結(jié)果的請(qǐng)求,運(yùn)行相應(yīng)函數(shù)并返回運(yùn)行結(jié)果。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是本發(fā)明提供了一種在程序文件基礎(chǔ)上加入軟件保護(hù)相關(guān)代碼并結(jié)合硬件即智能密鑰裝置實(shí)現(xiàn)軟件版權(quán)保護(hù)的方法,本發(fā)明對(duì)于軟件開發(fā)商來說無需編寫程序即可完成對(duì)已有程序文件的版權(quán)保護(hù),操作簡(jiǎn)單,極大的縮短了軟件版權(quán)保護(hù)方案實(shí)施的周期,同時(shí)本發(fā)明利用了智能密鑰裝置,提高了保護(hù)強(qiáng)度,最大程度上保護(hù)了軟件開發(fā)商的利益。
圖1為對(duì)程序文件實(shí)行保護(hù)的原理圖;圖2為還原程序文件N使其可用的原理圖;圖3為對(duì)程序文件實(shí)行保護(hù)的流程圖;圖4為還原程序文件N使其可用的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行更詳細(xì)的描述。
圖1為對(duì)程序文件實(shí)行保護(hù)的原理圖。參照?qǐng)D1,其中程序文件d是未受到任何保護(hù)的能夠正常運(yùn)行的程序文件,這樣的程序文件很容易被軟件盜版者復(fù)制并且毫無限制的以低價(jià)出售,致使其所有權(quán)人的經(jīng)濟(jì)利益受到很大程度的侵害。為了保護(hù)程序文件d的版權(quán)不受侵害,采用本發(fā)明的保護(hù)方法進(jìn)行處理。
從圖1中可以看到工具文件T包含加密算法E、取密鑰接口GK填充代碼F和保護(hù)相關(guān)代碼M。其中,加密算法E可以是3DES、AES等,用來加密程序文件d;利用取密鑰接口GK能夠與智能密鑰裝置L相關(guān)聯(lián),向智能密鑰裝置L傳送隨機(jī)計(jì)算因子S,智能密鑰裝置L通過其內(nèi)置的算法f,利用隨機(jī)計(jì)算因子S和密鑰k得到密鑰特征信息K,即K=f(S,k)。
首先截取程序文件d的一個(gè)或幾個(gè)重要函數(shù)得到不完整的程序文件A,將截取的函數(shù)H轉(zhuǎn)換為智能密鑰裝置L可處理的格式得到轉(zhuǎn)換后函數(shù)W,并將轉(zhuǎn)換后函數(shù)W傳入智能密鑰裝置L,工具文件T用填充代碼F填充程序文件A不完整的部分得到程序文件B,再將程序文件B壓縮生成壓縮的程序文件C,然后工具文件T利用上述密鑰特征信息K通過上述加密算法E將壓縮的程序文件C加密成密文形式程序文件D,即D=E(C,K)。再將上述保護(hù)相關(guān)代碼M和隨機(jī)計(jì)算因子S加入加密后的程序文件D的尾部,并修改程序文件的入口點(diǎn)相關(guān)信息得到程序文件N,這樣就能實(shí)現(xiàn)當(dāng)加載程序文件N時(shí)首先執(zhí)行加入的保護(hù)相關(guān)代碼M。程序文件的入口點(diǎn)可以是整個(gè)程序的入口點(diǎn),也可以是程序文件的某個(gè)函數(shù)的入口點(diǎn),且修改的入口點(diǎn)信息始終為明文形式。此時(shí)的程序文件N是受到保護(hù)的程序文件,不能被任意訪問。至此工具文件T已經(jīng)完成其工作。
在具體實(shí)現(xiàn)時(shí),還可以將程序文件C或程序文件C的一個(gè)或多個(gè)部分發(fā)送到智能密鑰裝置L的內(nèi)部進(jìn)行加密,其原理同上所述。
圖2為還原程序文件N使其可用的原理圖。參照?qǐng)D2,保護(hù)相關(guān)代碼M包含解密算法,利用此算法可以解密程序文件D;保護(hù)相關(guān)代碼M中還包含取密鑰特征信息接口,利用此接口可與智能密鑰裝置L相關(guān)聯(lián),向智能密鑰裝置L傳送隨機(jī)計(jì)算因子S,智能密鑰裝置L通過其內(nèi)置的算法f,利用隨機(jī)計(jì)算因子S和密鑰k得到密鑰特征信息K,即K=f(S,k)。
保護(hù)相關(guān)代碼M利用上述密鑰特征信息K和解密算法M將程序文件D解密成程序文件C,即C=M(D,K),再將程序文件C解壓縮成程序文件B,當(dāng)程序文件B運(yùn)行至截取函數(shù)的位置時(shí),發(fā)送請(qǐng)求相應(yīng)函數(shù)處理結(jié)果的信息,由智能密鑰裝置L運(yùn)行存儲(chǔ)在其中的相應(yīng)函數(shù),并將運(yùn)行結(jié)果返回給程序文件B,程序文件B繼續(xù)運(yùn)行。
在具體實(shí)現(xiàn)時(shí),可以將加密的程序文件D或程序文件D的一個(gè)或多個(gè)部分發(fā)送到智能密鑰裝置L內(nèi)部進(jìn)行解密。
上述還原程序文件N的過程是在計(jì)算機(jī)內(nèi)存中進(jìn)行的。
圖3為對(duì)程序文件實(shí)行保護(hù)的流程圖,參照?qǐng)D3和圖1步驟301,開始操作;步驟302,工具文件T讀取程序d的信息;步驟303,工具文件T判斷程序文件d是否是可支持的文件類型,如果是可支持的文件類型則執(zhí)行步驟304,如果不是可支持的文件類型則由工具文件T執(zhí)行步驟315結(jié)束操作;步驟304,截取程序文件d的一個(gè)或多個(gè)重要函數(shù)H得到不完整的程序文件A;步驟305,工具文件T利用填充代碼F填充程序文件A不完整的部分得到程序文件B;步驟306,將一個(gè)或多個(gè)截取的函數(shù)H轉(zhuǎn)換成智能密鑰裝置L可處理的格式得到轉(zhuǎn)換后函數(shù)W,并將轉(zhuǎn)換后函數(shù)W傳入智能密鑰裝置L;步驟307,將填充后的程序文件B壓縮成程序文件C;步驟308,工具文件T向智能密鑰裝置L傳送隨機(jī)計(jì)算因子S;步驟309,在智能密鑰裝置L內(nèi),智能密鑰裝置L通過內(nèi)置的算法f,利用隨機(jī)計(jì)算因子S與密鑰k運(yùn)算得到密鑰特征信息K;步驟310,智能密鑰裝置L將密鑰特征信息K返回給工具文件T;步驟311,工具文件T讀取程序文件C的內(nèi)容;步驟312,利用工具文件T內(nèi)包含的加密算法E和密鑰特征信息K加密程序文件C,得到程序文件D;步驟313,工具文件T將保護(hù)相關(guān)代碼M連接到加密后的程序文件D的尾部,并將隨機(jī)計(jì)算因子S保存到程序文件D尾部;步驟314,工具文件T修改程序文件的入口點(diǎn)相關(guān)信息,使其執(zhí)行轉(zhuǎn)向保護(hù)相關(guān)代碼M得到程序文件N;步驟315結(jié)束操作。
在具體實(shí)現(xiàn)時(shí),也可以不執(zhí)行步驟308~310和313,而是將程序文件C或程序文件C的一個(gè)或多個(gè)部分發(fā)送到智能密鑰裝置L中進(jìn)行加密。
圖4為還原程序文件N使其可用的流程圖,參照?qǐng)D4和圖2步驟401,開始操作;步驟402,運(yùn)行保護(hù)相關(guān)代碼M;步驟403,保護(hù)相關(guān)代碼M調(diào)用智能密鑰裝置L驗(yàn)證用戶身份;步驟404,判斷用戶身份驗(yàn)證是否成功,如果驗(yàn)證失敗,則執(zhí)行步驟417提示錯(cuò)誤或執(zhí)行功能受限操作,之后執(zhí)行步驟418由保護(hù)相關(guān)代碼M結(jié)束操作,如果驗(yàn)證成功則執(zhí)行步驟405;步驟405,保護(hù)相關(guān)代碼M將所保存的隨機(jī)計(jì)算因子S傳入智能密鑰裝置L,智能密鑰裝置L通過其內(nèi)置的算法f,和隨機(jī)計(jì)算因子S以及密鑰k運(yùn)算得到密鑰特征信息K;步驟406,智能密鑰裝置L將密鑰特征信息K返回給保護(hù)相關(guān)代碼M;步驟407,保護(hù)相關(guān)代碼M讀取程序文件D的內(nèi)容;步驟408,保護(hù)相關(guān)代碼M利用其包含的解密算法和密鑰特征信息K解密程序文件D;步驟409,判斷解密是否成功,如果解密不成功則執(zhí)行步驟417提示錯(cuò)誤或執(zhí)行功能受限操作,然后執(zhí)行步驟418由保護(hù)相關(guān)代碼M結(jié)束操作,如果解密成功,即獲得程序文件C,則執(zhí)行步驟410;步驟410,解壓縮程序文件C;步驟411,判斷解壓縮是否成功,如果解壓縮不成功則執(zhí)行步驟417提示錯(cuò)誤或執(zhí)行功能受限操作,然后執(zhí)行步驟418由保護(hù)相關(guān)代碼M結(jié)束操作,如果解壓縮成功,即獲得程序文件B,則執(zhí)行步驟412;步驟412,運(yùn)行解壓縮后的程序文件B;步驟413,當(dāng)程序文件B運(yùn)行至截取函數(shù)H的位置時(shí),向智能密鑰裝置L發(fā)送相應(yīng)函數(shù)運(yùn)行結(jié)果的請(qǐng)求信息;步驟414,判斷發(fā)送信息是否成功,如果智能密鑰裝置L不存在或出現(xiàn)其他錯(cuò)誤情況,則步驟417提示錯(cuò)誤或執(zhí)行功能受限操作,然后執(zhí)行步驟418由保護(hù)相關(guān)代碼M結(jié)束操作,如果信息發(fā)送成功,則執(zhí)行步驟415;步驟415,由智能密鑰裝置L運(yùn)行存儲(chǔ)在其中的相應(yīng)函數(shù),并將運(yùn)行結(jié)果返回給程序文件B;步驟416,程序文件B繼續(xù)運(yùn)行,當(dāng)運(yùn)行至另一處截取函數(shù)的位置時(shí),重復(fù)步驟412~415;步驟418,結(jié)束操作。
在具體實(shí)現(xiàn)時(shí),也可以不執(zhí)行步驟405~408,直接將加密的程序文件D或程序文件D的一部分或多個(gè)部分傳入智能密鑰裝置L進(jìn)行解密。
從上述實(shí)施方式中可以看到,若想對(duì)程序文件加解密必須存在兩個(gè)前提條件,即加解密算法和密鑰特征信息K,算法包含在工具文件T或保護(hù)相關(guān)代碼M中,而密鑰特征信息K是通過向智能密鑰裝置L傳入隨機(jī)的計(jì)算因子S,在硬件內(nèi)通過與密鑰k相關(guān)的算法f計(jì)算得到的,也就是說只有智能密鑰裝置L連接到計(jì)算機(jī)上才能對(duì)程序文件進(jìn)行加解密,否則將不能完成本發(fā)明方法中所述的操作。同時(shí)密鑰k參與加解密時(shí)并沒有傳出到設(shè)備外,只是通過傳入隨機(jī)計(jì)算因子S來獲得密鑰k的特征信息K,因此不會(huì)將密鑰k暴露出來。這種結(jié)合智能密鑰裝置的保護(hù)方法使軟件保護(hù)更安全。
以上所述實(shí)施方式僅為本發(fā)明的優(yōu)選實(shí)施例,本發(fā)明不限于上述實(shí)施例,對(duì)于本領(lǐng)域一般技術(shù)人員而言,在不背離本發(fā)明原理的前提下對(duì)它所做的任何顯而易見的改動(dòng),都屬于本發(fā)明的構(gòu)思和所附權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種軟件版權(quán)保護(hù)方法,其特征在于在對(duì)程序文件實(shí)行保護(hù)的過程中修改程序文件,添加保護(hù)相關(guān)代碼,生成受保護(hù)的程序文件;在執(zhí)行受保護(hù)的程序文件的過程中,軟件保護(hù)相關(guān)代碼與智能密鑰裝置交互,依據(jù)交互結(jié)果決定執(zhí)行狀態(tài)。
2.如權(quán)利要求1所述的軟件版權(quán)保護(hù)方法,其特征在于對(duì)程序文件實(shí)行保護(hù)的過程包括如下操作1)處理程序文件;2)加入保護(hù)相關(guān)代碼;3)修改程序文件中的入口點(diǎn)信息,使執(zhí)行轉(zhuǎn)向所述保護(hù)相關(guān)代碼;以上操作不分先后。
3.如權(quán)利要求1所述的軟件版權(quán)保護(hù)方法,其特征在于執(zhí)行受保護(hù)的程序文件的過程包括如下操作1)加載受保護(hù)的程序文件,根據(jù)修改后的入口點(diǎn)信息,首先執(zhí)行保護(hù)相關(guān)代碼;2)所述保護(hù)相關(guān)代碼與智能密鑰裝置進(jìn)行交互;3)當(dāng)交互結(jié)果為成功時(shí),處理所述受保護(hù)的程序文件;當(dāng)交互結(jié)果為失敗時(shí),系統(tǒng)報(bào)錯(cuò)并結(jié)束操作或執(zhí)行受限操作。
4.如權(quán)利要求2或3所述的軟件版權(quán)保護(hù)方法,其特征在于所述處理是對(duì)程序文件的加密或解密。
5.如權(quán)利要求4所述的軟件版權(quán)保護(hù)方法,其特征在于所述加密或解密是通過智能密鑰裝置完成的。
6.如權(quán)利要求5所述的軟件版權(quán)保護(hù)方法,其特征在于將受保護(hù)的程序文件傳入所述智能密鑰裝置內(nèi)進(jìn)行加密或解密。
7.如權(quán)利要求6所述的軟件版權(quán)保護(hù)方法,其特征在于傳入所述智能密鑰裝置的可以為整個(gè)程序文件,也可以是程序文件的一個(gè)或多個(gè)部分。
8.如權(quán)利要求5所述的軟件版權(quán)保護(hù)方法,其特征在于通過向智能密鑰裝置傳入隨機(jī)計(jì)算因子,獲得密鑰特征信息,利用所述密鑰特征信息對(duì)程序文件進(jìn)行加密或解密。
9.如權(quán)利要求2或3所述的軟件版權(quán)保護(hù)方法,其特征在于所述處理是對(duì)程序文件的壓縮或解壓縮。
10.如權(quán)利要求2所述的軟件版權(quán)保護(hù)方法,其特征在于所述處理是截取程序文件的部分函數(shù),將其存儲(chǔ)于智能密鑰裝置中。
11.如權(quán)利要求10所述的軟件版權(quán)保護(hù)方法,其特征在于將所述截取的部分函數(shù)轉(zhuǎn)換成智能密鑰裝置可處理的格式后,再存儲(chǔ)于所述智能密鑰裝置中。
12.如權(quán)利要求3所述的軟件版權(quán)保護(hù)方法,其特征在于所述處理是接收獲取相應(yīng)函數(shù)運(yùn)行結(jié)果的請(qǐng)求,運(yùn)行相應(yīng)函數(shù)并返回運(yùn)行結(jié)果。
全文摘要
本發(fā)明公開了一種軟件版權(quán)保護(hù)的方法,特別是一種在程序文件中加入軟件保護(hù)相關(guān)代碼,通過其與智能密鑰裝置交互,實(shí)現(xiàn)軟件版權(quán)保護(hù)的方法。首先在程序文件中加入軟件保護(hù)相關(guān)代碼,然后修改程序文件的入口點(diǎn)信息,使得在加載程序文件時(shí),首先執(zhí)行軟件保護(hù)相關(guān)代碼,再通過軟件保護(hù)相關(guān)代碼與智能密鑰裝置交互處理程序文件,處理后執(zhí)行程序文件。本發(fā)明可以實(shí)現(xiàn)對(duì)程序文件的加密、解密、壓縮和解壓縮等操作。對(duì)于軟件開發(fā)商而言本發(fā)明無需編寫程序即可完成對(duì)已有程序文件的版權(quán)保護(hù),其操作簡(jiǎn)單,可極大的縮短軟件版權(quán)保護(hù)方案實(shí)施的周期,而且本發(fā)明利用了智能密鑰裝置,提高了保護(hù)強(qiáng)度,最大程度上保護(hù)了軟件開發(fā)商的利益。
文檔編號(hào)G06F21/24GK1877595SQ20061009920
公開日2006年12月13日 申請(qǐng)日期2006年7月19日 優(yōu)先權(quán)日2006年7月19日
發(fā)明者陸舟, 于華章 申請(qǐng)人:北京飛天誠信科技有限公司