一種軟件的保護方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種軟件的保護方法,一方面,該軟件的保護方法包括:確定將要發(fā)行的軟件的核心文件;根據(jù)預先配置的發(fā)行方的私鑰,對核心文件進行數(shù)字簽名,生成文件簽名;根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包;發(fā)行軟件數(shù)據(jù)包。另一方面,該軟件的保護方法包括:接收的軟件數(shù)據(jù)包;對軟件數(shù)據(jù)包進行分析,確定軟件數(shù)據(jù)包中包含的文件簽名;根據(jù)文件簽名,對軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證;在核心文件通過驗證的情況下,允許運行核心文件。本發(fā)明既保證了軟件的真實性和完整性,同時又有效的防止了病毒和木馬的攻擊,大大的提高了軟件的安全性。
【專利說明】一種軟件的保護方法和裝置
【技術領域】
[0001]本發(fā)明涉及軟件【技術領域】,具體來說,涉及一種軟件的保護方法和裝置以及虛擬機。
【背景技術】
[0002]Java語言是一種解釋型語言,其在實際應用時,是通過對Java源代碼進行編譯,生成字節(jié)碼文件,然后在將所生成的字節(jié)碼文件放在Java虛擬機中進行解釋執(zhí)行,以實現(xiàn)對應的功能。其中,由于是通過Java虛擬機這類運行機制來對Java的字節(jié)碼文件進行解釋執(zhí)行的,因此,在實際應用時,會容易導致Java源代碼被反編譯。而且,目前現(xiàn)有的反編譯工具有很多,且反編譯的效果也很好,從而使得任何使用Java軟件的用戶都可以很容易的反編譯和重構(gòu)產(chǎn)品的源代碼,進而使得所有基于Java語言的授權(quán)認證許可變得毫無意義,造成Java軟件存在很大的安全隱患,例如,非法用戶在對Java軟件進行反編譯和重構(gòu)時,在Java代碼中移植入木馬和/或病毒。
[0003]為解決上述情況,現(xiàn)有技術中開發(fā)出了一種Java混淆器,其可以對Java字節(jié)碼文件進行擾亂混淆,以使反編譯工具在反編譯還原操作后生成的Java源程序晦澀難懂,增加閱讀理解難度,在一定程度上實現(xiàn)對Java軟件的保護;然而,其仍然無法從本質(zhì)上阻止反編譯工具對Java字節(jié)碼的反向工程,進而依然無法保證Java軟件的安全性。
[0004]針對現(xiàn)有技術中的Java軟件的源代碼容易被反編譯和重構(gòu),進而造成Java軟件存在較大安全隱患的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0005]針對現(xiàn)有技術中的Java軟件的源代碼容易被反編譯和重構(gòu),進而造成Java軟件存在較大安全隱患的問題,本發(fā)明提出了一種軟件的保護方法和裝置以及虛擬機,既能夠保證軟件的真實性與完整性,又能夠有效的防止軟件被病毒或木馬攻擊,大大的提高了軟件的安全性。
[0006]本發(fā)明的技術方案是這樣實現(xiàn)的:
[0007]根據(jù)本發(fā)明的一方面,提供了一種軟件的保護方法,該軟件的保護方法用于在軟件發(fā)行的過程中對軟件進行保護,并且,該軟件的保護方法包括:
[0008]確定將要發(fā)行的軟件的核心文件;
[0009]根據(jù)預先配置的發(fā)行方的私鑰,對核心文件進行數(shù)字簽名,生成文件簽名;
[0010]根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包;
[0011]發(fā)行軟件數(shù)據(jù)包。
[0012]其中,在根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包時,可將文件簽名與核心文件綁定;并根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0013]另外,在根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包時,還可根據(jù)預先配置會話密鑰,對核心文件進行加密;并將加密后的核心文件與文件簽名進行綁定,再根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0014]此外,該軟件的保護方法還可包括:發(fā)行會話密鑰。
[0015]另外,該軟件的保護方法也可包括:根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰;并根據(jù)該公鑰,對會話密鑰進行加密,生成數(shù)字信封,形成授權(quán)文件;同時發(fā)行該授權(quán)文件。
[0016]在上述方案中,會話密鑰包括通過隨機數(shù)發(fā)生器生成的隨機數(shù)。
[0017]根據(jù)本發(fā)明的另一方面,提供了一種軟件的保護裝置,該軟件的保護裝置用于軟件發(fā)行的過程中對軟件進行保護,并且,該軟件的保護裝置包括:
[0018]文件確定模塊,用于確定將要發(fā)行的軟件的核心文件;
[0019]數(shù)字簽名模塊,用于根據(jù)預先配置的發(fā)行方的私鑰,對核心文件進行數(shù)字簽名,生成文件簽名;
[0020]數(shù)據(jù)生成模塊,用于根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包;
[0021 ] 數(shù)據(jù)發(fā)行模塊,用于發(fā)行軟件數(shù)據(jù)包。
[0022]其中,數(shù)據(jù)生成模塊可包括第一綁定子模塊和第一生成子模塊,其中,第一綁定子模塊,用于將文件簽名與核心文件綁定;第一生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0023]另外,數(shù)據(jù)生成模塊也可包括文件加密子模塊、第二綁定子模塊和第二生成子模塊,其中,文件加密子模塊,用于根據(jù)預先配置的會話密鑰,對核心文件進行加密;第二綁定子模塊,用于將加密后的核心文件與文件簽名進行綁定;第二生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0024]此外,該軟件的保護裝置還可包括:密鑰發(fā)行模塊,用于發(fā)行會話密鑰。
[0025]另外,該軟件的保護裝置也可包括:公鑰確定模塊、密鑰加密模塊以及授權(quán)發(fā)行模塊,其中,公鑰確定模塊,用于根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰;密鑰加密模塊,用于根據(jù)該公鑰,對會話密鑰進行加密,生成數(shù)字信封,形成授權(quán)文件;授權(quán)發(fā)行模塊,用于發(fā)行該授權(quán)文件。
[0026]在上述方案中,會話密鑰包括通過隨機數(shù)發(fā)生器生成的隨機數(shù)。
[0027]根據(jù)本發(fā)明的又一方面,提供了一種軟件的保護方法,該軟件的保護方法用于在軟件運行的過程中對軟件進行保護,并且,該軟件的保護方法包括:
[0028]接收的軟件數(shù)據(jù)包;
[0029]對軟件數(shù)據(jù)包進行分析,確定軟件數(shù)據(jù)包中包含的文件簽名;
[0030]根據(jù)文件簽名,對軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證;
[0031]在核心文件通過驗證的情況下,允許運行核心文件。
[0032]此外,該軟件的保護方法還可包括:在核心文件為加密的情況下,接收會話密鑰;并根據(jù)該會話密鑰,對核心文件進行解密。
[0033]另外,該軟件的保護方法也可包括:在核心文件為加密的情況下,接收授權(quán)文件;并根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對該授權(quán)文件進行解密,得到會話密鑰;并根據(jù)該會話密鑰,對核心文件進行解密。[0034]根據(jù)本發(fā)明的再一方面,提供了一種軟件的保護裝置,該軟件的保護裝置用于在軟件運行的過程中對軟件進行保護,并且,該軟件的保護裝置包括:
[0035]數(shù)據(jù)接收模塊,用于接收軟件數(shù)據(jù)包;
[0036]數(shù)據(jù)解析模塊,用于對軟件數(shù)據(jù)包進行解析,確定軟件數(shù)據(jù)包中包含的文件簽名;
[0037]簽名驗證模塊,用于根據(jù)文件簽名,對軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證;
[0038]數(shù)據(jù)運行模塊,用于在核心文件通過驗證的情況下,允許運行核心文件。
[0039]此外,該軟件的保護裝置還可包括:密鑰接收模塊和第一解密模塊,其中,密鑰接收模塊,用于在核心文件為加密的情況下,接收會話密鑰;第一解密模塊,用于根據(jù)該會話密鑰,對核心文件進行解密。
[0040]另外,該軟件的保護裝置也可包括:授權(quán)接收模塊、授權(quán)解析模塊以及第二解密模塊,其中,授權(quán)接收模塊,用于在核心文件為加密的情況下,接收授權(quán)文件;授權(quán)解析模塊,用于根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對該授權(quán)文件進行解密,得到會話密鑰;第二解密模塊,用于根據(jù)該會話密鑰,對核心文件進行解密。
[0041]根據(jù)本發(fā)明的又一方面,還提供了一種虛擬機,該虛擬機的類加載器中包括上述軟件運行過程中的軟件保護裝置。
[0042]本發(fā)明通過在發(fā)行軟件時,對核心文件進行數(shù)字簽名,生成文件簽名,并將文件簽名和核心文件進行綁定,生成將要發(fā)行的軟件數(shù)據(jù)包,同時通過在運行軟件時,根據(jù)軟件數(shù)據(jù)包中的文件簽名,對軟件數(shù)據(jù)包中的核心文件進行真實性和完整性的驗證,并在核心文件通過驗證的情況下,才允許運行核心文件,從而保證了軟件的真實性和完整性,而且還有效的防止了病毒和木馬的攻擊,大大的提高了軟件的安全性。
【專利附圖】
【附圖說明】
[0043]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0044]圖1是根據(jù)本發(fā)明實施例的軟件的保護方法的流程示意圖;
[0045]圖2是根據(jù)本發(fā)明實施例的另一軟件的保護方法的流程示意圖;
[0046]圖3是現(xiàn)有技術中的傳統(tǒng)的Java軟件的執(zhí)行過程示意圖;
[0047]圖4是根據(jù)本發(fā)明實施例的經(jīng)過CPK數(shù)字簽名和加密的Java軟件的執(zhí)行過程示意圖;
[0048]圖5是根據(jù)本發(fā)明實施例的軟件的保護裝置的結(jié)構(gòu)示意圖;
[0049]圖6是根據(jù)本發(fā)明實施例的另一軟件的保護裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0050]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0051]根據(jù)本發(fā)明的實施例,提供了一種軟件的保護方法,該軟件的保護方法用于在軟件發(fā)行的過程中對軟件進行保護。
[0052]如圖1所示,根據(jù)本發(fā)明實施例的軟件的保護方法包括:
[0053]步驟SlOl,確定將要發(fā)行的軟件的核心文件;
[0054]步驟S103,根據(jù)預先配置的發(fā)行方的私鑰,對核心文件進行數(shù)字簽名,生成文件簽名;
[0055]步驟S105,根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包;
[0056]步驟S107,發(fā)行軟件數(shù)據(jù)包。
[0057]在一個實施例中,在根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包時,可將文件簽名與核心文件綁定,并根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0058]在另一個實施例中,為了防止核心文件被反編譯,在根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包時,可根據(jù)預先配置的會話密鑰,對核心文件進行加密;并將加密后的核心文件與文件簽名進行綁定,再根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0059]而由于是通過會話密鑰對核心文件進行加密的,因此,為了使得用戶能夠查看或使用該核心文件,該軟件的保護方法還需要發(fā)行該會話密鑰。而對于會話密鑰的發(fā)行來說,其可以直接發(fā)行,也可以進行進一步的處理之后,再進行發(fā)行,例如,為了防止會話密鑰被竊取,可以通過預先對該會話密鑰進行加密,然后再發(fā)行。具體的,可根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰,并根據(jù)該公鑰,對會話密鑰進行加密,生成數(shù)字信封,形成授權(quán)文件,然后再發(fā)行該授權(quán)文件。
[0060]在上述過程中,對于會話密鑰的二次加密再發(fā)行來說,其不僅可以防止會話密鑰被竊取,同時還可以實現(xiàn)指定用戶的權(quán)限管理,即只能由發(fā)行方指定的用戶才能夠得到該會話密鑰,而非指定的用戶,則無法得到該會話密鑰。這為發(fā)行方和合法用戶的權(quán)益提供有效的保障。
[0061]而在上述方案中,會話密鑰可以是隨機數(shù)發(fā)生器生成的隨機數(shù),當然,在實際應用過程中,其也可以是其他相關設備所生成的隨機數(shù),同時也可以是發(fā)行方自行定義的數(shù)值,或者是發(fā)行方與指定用戶協(xié)商后所設定的數(shù)值。
[0062]根據(jù)本發(fā)明的實施例,提供了一種軟件的保護方法,該軟件的保護方法用于在軟件運行的過程中對軟件進行保護。
[0063]如圖2所示,根據(jù)本發(fā)明實施例的軟件的保護方法包括:
[0064]步驟S201,接收的軟件數(shù)據(jù)包;
[0065]步驟S203,對軟件數(shù)據(jù)包進行分析,確定軟件數(shù)據(jù)包中包含的文件簽名;
[0066]步驟S205,根據(jù)文件簽名,對軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證;
[0067]步驟S207,在核心文件通過驗證的情況下,允許運行核心文件。[0068]在一個實施例中,當發(fā)行方為了防止核心文件被反編譯,而對核心文件進行加密時,還可接收發(fā)行方發(fā)行的會話密鑰,并根據(jù)該會話密鑰,對核心文件進行解密。
[0069]在另一個實施例中,當發(fā)行方為了防止會話密鑰被竊取,而對會話密鑰進行了進一步的加密,形成授權(quán)文件時,則還可接收該授權(quán)文件,并根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對該授權(quán)文件進行解密,得到會話密鑰,并根據(jù)該會話密鑰,對核心文件進行解密。
[0070]為了方便理解本發(fā)明的上述技術方案,以下通過對Java軟件進行保護為例,對本發(fā)明的上述技術方案進行詳細說明。
[0071]對于Java軟件來說,在對其進行保護時,可利用組合公鑰CPK技術對其class代碼進行數(shù)字簽名、加密,使得處理后的class代碼與處理前的class代碼完成相同的功能,但是,應當知道的是,加密的class代碼是不可能被反編譯的,而且根據(jù)本發(fā)明的技術方案,在運行Java軟件時,是只有對加密的class代碼解密后且通過了簽名驗證才會被Java虛擬機(Java Virtual Machine,縮寫為JVM)正確的加載。
[0072]在上述過程中,通過對Java軟件的class代碼進行數(shù)字簽名,不僅保證了 Java軟件的真實性和完整性,還能夠有效的防止Java軟件被病毒或木馬攻擊,而通過對Java軟件的class代碼進行CPK加密,則不僅能夠防止軟件被反編譯,而且還能夠解決軟件的盜版問題,達到保護軟件完整與版權(quán)的目的。
[0073]在實際應用時,對于Java軟件的保護來說,其可以分為發(fā)行保護和運行保護,其中,對于發(fā)行保護來說,其包括發(fā)行時的數(shù)字簽名過程和class文件加密過程;而對于運行保護來說,其包括class密文解密過程和數(shù)字簽名驗證過程。以下就分別從軟件的發(fā)行和運行兩個方面對Java軟件的保護流程進行詳細說明。
[0074]對于軟件的發(fā)行來說,軟件發(fā)行時的加密與簽名流程如下:
[0075]I)在軟件發(fā)行時,發(fā)行方用自己的私鑰對軟件的核心程序(class文件)進行CPK數(shù)字簽名,并將簽名結(jié)果緩存于內(nèi)存;
[0076]2)用隨機數(shù)發(fā)生器生成一個隨機數(shù)作為加密的class文件的會話密鑰,再用這個會話密鑰對軟件中包含的class文件進行對稱加密,生成臨時文件;
[0077]3)將步驟I)所生成的簽名數(shù)據(jù)與步驟2)所生成的臨時文件進行綁定,生成可用于發(fā)布的帶簽名的密文文件;
[0078]4)用發(fā)行方的公鑰對會話密鑰進行加密,生成軟件的授權(quán)文件;
[0079]5)對處理后的數(shù)據(jù)進行打包,作為Java軟件的數(shù)據(jù)發(fā)行包;
[0080]6)根據(jù)用戶訂單中的用戶標識計算生成用戶的CPK私鑰,并將該私鑰存儲到安全芯片設備中(例如,USB Key);
[0081]7)用發(fā)行方的私鑰解密授權(quán)文件,得到會話密鑰,再以用戶的公鑰加密會話密鑰,以生成特定的授權(quán)文件;
[0082]8)將軟件發(fā)行包、授權(quán)文件和安全芯片設備一并提供給用戶。
[0083]對于軟件的運行來說,軟件運行時的解密與簽名驗證流程如下:
[0084]I)用戶得到軟件后,將軟件發(fā)行包部署于服務器的WEB容器,同時將授權(quán)文件按規(guī)則進行配置;
[0085]2)將CPK解密模塊和簽名驗證模塊進行部署,并配置Java虛擬機JVM ;[0086]3)將安全芯片設備接入服務器,啟動JVM,錄入安全芯片的PIN( 口令)以驗證用戶的合法性并啟動安全芯片設備;
[0087]4) JVM調(diào)用CPK解密模塊,用授權(quán)文件和安全芯片設備計算出會話密鑰,如果計算失敗,則退出程序;
[0088]5) CPK解密模塊對需要加載的運行的class密文文件進行解密得到class文件的明文;
[0089]6)調(diào)用簽名驗證模塊提取簽名信息并對解密后的明文進行數(shù)字簽名驗證,如果驗證失敗,則拒絕加載此class文件;
[0090]7)驗證通過,再提取發(fā)行方標識,對發(fā)行方的合法性進行檢查,如果發(fā)行方標識不在白名單中,則拒絕執(zhí)行;
[0091]8)將class明文文件加載到內(nèi)存并執(zhí)行。
[0092]為了方便了解本發(fā)明的上述技術方案與傳統(tǒng)現(xiàn)有相關技術方案的區(qū)別以及所實現(xiàn)的效果,下面將結(jié)合附圖,詳細闡述傳統(tǒng)方案與本發(fā)明的上述技術方案的區(qū)別,當然,在該部分中,對于本發(fā)明的上述技術方案來說,依然是以對Java軟件進行保護為例進行說明的。
[0093]圖3是傳統(tǒng)的Java文件的執(zhí)行過程示意圖,從圖3中可以看出,傳統(tǒng)的部署過程中,對于Java軟件的部署并未采用任何的保護措施,其是先將Java軟件的class文件進行程序發(fā)布(在發(fā)布時class文件以war數(shù)據(jù)包的形式存在),然后安裝Java虛擬機JVM,JVM根據(jù)程序的配置進行class文件的加載(實質(zhì)上,加載的是war數(shù)據(jù)包)并執(zhí)行,此處class文件可被反編譯。
[0094]而圖4是經(jīng)過CPK數(shù)字簽名和加密的Java軟件的執(zhí)行過程示意圖,從圖4中可以看出,在進行部署之前,根據(jù)CPK算法,首先對生成的class文件進行數(shù)字簽名、加密,然后打包,而當客戶安裝部署后,暴露給客戶的是加密后的class文件,此時,反編譯人員則無法通過反編譯得到正確的class代碼,進而保證了源代碼的安全,而簽名驗證則保證了源代碼的合法性。
[0095]由此可見,通過本發(fā)明的上述方案,不僅能夠保證軟件的真實性和完整性,防止病毒或木馬的攻擊,提高軟件的安全性,而且還能夠保證防止軟件被反編譯,解決軟件的盜版問題,實現(xiàn)軟件完整與版權(quán)的保護。
[0096]與上述方案相對應的,根據(jù)本發(fā)明的實施例,提供了一種軟件的保護裝置,該軟件的保護裝置用于軟件發(fā)行的過程中對軟件進行保護。
[0097]如圖5所示,根據(jù)本發(fā)明實施例的軟件的保護裝置包括:
[0098]文件確定模塊51,用于確定將要發(fā)行的軟件的核心文件;
[0099]數(shù)字簽名模塊52,用于根據(jù)預先配置的發(fā)行方的私鑰,對核心文件進行數(shù)字簽名,生成文件簽名;
[0100]數(shù)據(jù)生成模塊53,用于根據(jù)文件簽名和核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包;
[0101 ] 數(shù)據(jù)發(fā)行模塊54,用于發(fā)行軟件數(shù)據(jù)包。
[0102]在一個實施例中,數(shù)據(jù)生成模塊53可包括第一綁定子模塊(未不出)和第一生成子模塊(未示出),其中,第一綁定子模塊,用于將文件簽名與核心文件綁定;第一生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
[0103]在另一個實施例中,為了防止核心文件被反編譯,數(shù)據(jù)生成模塊53可包括文件加密子模塊(未不出)、第二綁定子模塊(未不出)和第二生成子模塊(未不出),其中,文件加密子模塊,用于根據(jù)預先配置的會話密鑰,對核心文件進行加密;第二綁定子模塊,用于將加密后的核心文件與文件簽名進行綁定;第二生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。 [0104]而由于是通過會話密鑰對核心文件進行加密的,因此,為了使得用戶能夠查看或使用該核心文件,該軟件的保護裝置還可包括:密鑰發(fā)行模塊(未示出),用于發(fā)行會話密鑰。而對于會話密鑰的發(fā)行來說,其可以直接發(fā)行,也可以進行進一步的處理之后,再進行發(fā)行,因此,該軟件的保護裝置也可包括:公鑰確定模塊(未示出)、密鑰加密模塊(未示出)以及授權(quán)發(fā)行模塊(未示出),其中,公鑰確定模塊,用于根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰;密鑰加密模塊,用于根據(jù)該公鑰,對會話密鑰進行加密,生成。
[0105]在上述方案中,會話密鑰可以是隨機數(shù)發(fā)生器生成的隨機數(shù),當然,在實際應用過程中,其也可以是其他相關設備所生成的隨機數(shù),同時也可以是發(fā)行方自行定義的數(shù)值,或者是發(fā)行方與指定用戶協(xié)商后所設定的數(shù)值。
[0106]根據(jù)本發(fā)明的實施例,提供了一種軟件的保護裝置,該軟件的保護裝置用于在軟件運行的過程中對軟件進行保護。
[0107]如圖6所示,根據(jù)本發(fā)明實施例的軟件的保護裝置包括:
[0108]數(shù)據(jù)接收模塊61,用于接收軟件數(shù)據(jù)包;
[0109]數(shù)據(jù)解析模塊62,用于對軟件數(shù)據(jù)包進行解析,確定軟件數(shù)據(jù)包中包含的文件簽名;
[0110]簽名驗證模塊63,用于根據(jù)文件簽名,對軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證;
[0111]數(shù)據(jù)運行模塊64,用于在核心文件通過驗證的情況下,允許運行核心文件。.[0112]在一個實施例中,當發(fā)行方為了防止核心文件被反編譯,而對核心文件進行加密,運行時就需要對核心文件進行相應的解密,因此,該軟件的保護裝置還可包括:密鑰接收模塊(未示出)和第一解密模塊(未示出),其中,密鑰接收模塊,用于在核心文件為加密的情況下,接收會話密鑰;第一解密模塊,用于根據(jù)該會話密鑰,對核心文件進行解密。
[0113]在另一個實施例中,當發(fā)行方為了防止會話密鑰被竊取,而對會話密鑰進行了進一步的加密,形成授權(quán)文件,運行時則就需要對授權(quán)文件進行解密,得到會話密鑰,然后根據(jù)會話密鑰對核心文件進行解密,因此,該軟件的保護裝置還可包括:授權(quán)接收模塊(未示出)、授權(quán)解析模塊(未示出)以及第二解密模塊(未示出),其中,授權(quán)接收模塊,用于在核心文件為加密的情況下,接收授權(quán)文件;授權(quán)解析模塊,用于根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對該授權(quán)文件進行解密,得到會話密鑰;第二解密模塊,用于根據(jù)該會話密鑰,對核心文件進行解密。
[0114]此外,在實際應用時,由于對軟件的核心代碼進行了數(shù)字簽名以及加密等機制的保護,因此,在通過虛擬機對軟件進行運行時,其運行的步驟也會進行相應的改變,而這就促使了需要對虛擬機的類加載器做出相應的改進,才能滿足實現(xiàn)采用保護機制的軟件的運行。
[0115]具體的,對于Java虛擬機JVM來說,JVM每次裝入類文件是都需要一個稱為ClassLoader (類加載器)的對象,這個對象負載把類裝入正在運行的JVM中,JVM給ClassLoader—個包含了待裝入類名字(例如,Java.lang.0bject)的字符串,然后由ClassLoader負責找到類文件,裝入原始數(shù)據(jù),并把它轉(zhuǎn)換成一個class對象。
[0116]因此,在實際應用過程中,在類文件執(zhí)行之前,需要修改ClassLoader,而由于在本發(fā)明中,對于ClassLoader來說,其用途是在類文件裝入之時進行解密、簽名驗證,只有正確解密后的文件才可以被執(zhí)行,且只有通過簽名驗證的文件才能夠允許被加載,所以,對于ClassLoader來說,需要在ClassLoader中加入上述運行時的軟件的保護裝置中的各個模塊。
[0117]相應的,根據(jù)本發(fā)明的實施例,還提供了一種虛擬機,該虛擬機的類加載器中包括上述軟件運行過程中的軟件保護裝置。
[0118]綜上所述,借助于本發(fā)明的上述技術方案,通過在發(fā)行軟件時,對核心文件進行數(shù)字簽名,生成文件簽名,并將文件簽名和核心文件進行綁定,生成將要發(fā)行的軟件數(shù)據(jù)包,同時通過在運行軟件時,根據(jù)軟件數(shù)據(jù)包中的文件簽名,對軟件數(shù)據(jù)包中的核心文件進行真實性和完整性的驗證,并在核心文件通過驗證的情況下,才允許運行核心文件,從而保證了軟件的真實性和完整性,而且還有效的防止了病毒和木馬的攻擊,大大的提高了軟件的安全性。
[0119]此外,借助于本發(fā)明的上述技術方案,通過在發(fā)行軟件時,對核心文件進行加密,從而有效的防止了非法用戶在軟件運行時對軟件的核心文件進行反編譯,實現(xiàn)了軟件完整與版權(quán)的保護,解決了軟件的盜版問題。同時通過向指定用戶發(fā)行加密核心文件的會話密鑰和/或授權(quán)文件,從而使得在防止非法用戶對軟件的核心文件繼續(xù)反編譯的同時,有效的保證了合法用戶對于核心文件的處理需求。
[0120]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種軟件的保護方法,其特征在于,用于在軟件發(fā)行的過程中對軟件進行保護,并且,所述軟件的保護方法包括: 確定將要發(fā)行的軟件的核心文件; 根據(jù)預先配置的發(fā)行方的私鑰,對所述核心文件進行數(shù)字簽名,生成文件簽名; 根據(jù)所述文件簽名和所述核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包; 發(fā)行所述軟件數(shù)據(jù)包。
2.根據(jù)權(quán)利要求1所述的保護方法,其特征在于,根據(jù)所述文件簽名和所述核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包包括: 將所述文件簽名與所述核心文件綁定; 根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
3.根據(jù)權(quán)利要求1所述的保護方法,其特征在于,根據(jù)所述文件簽名和所述核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包包括: 根據(jù)預先配置的會話密鑰,對所述核心文件進行加密; 將加密后的核心文件與所述文件簽名進行綁定; 根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
4.根據(jù)權(quán)利要求3所述的保護方法,其特征在于,進一步包括: 發(fā)行所述會話密鑰。
5.根據(jù)權(quán)利要求3所述的保護方法,其特征在于,進一步包括: 根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰; 根據(jù)所述公鑰,對所述會話密鑰進行加密,生成數(shù)字信封,形成授權(quán)文件; 發(fā)行所述授權(quán)文件。
6.根據(jù)權(quán)利要求3至5中任意一項所述的保護方法,其特征在于,所述會話密鑰包括通過隨機數(shù)發(fā)生器生成的隨機數(shù)。
7.一種軟件的保護裝置,其特征在于,用于在軟件發(fā)行的過程中對軟件進行保護,并且,所述軟件的保護裝置包括: 文件確定模塊,用于確定將要發(fā)行的軟件的核心文件; 數(shù)字簽名模塊,用于根據(jù)預先配置的發(fā)行方的私鑰,對所述核心文件進行數(shù)字簽名,生成文件簽名; 數(shù)據(jù)生成模塊,用于根據(jù)所述文件簽名和所述核心文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包; 數(shù)據(jù)發(fā)行模塊,用于發(fā)行所述軟件數(shù)據(jù)包。
8.根據(jù)權(quán)利要求7所述的保護裝置,其特征在于,所述數(shù)據(jù)生成模塊包括第一綁定子模塊和第一生成子模塊,其中, 第一綁定子模塊,用于將所述文件簽名與所述核心文件綁定; 第一生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
9.根據(jù)權(quán)利要求7所述的保護裝置,其特征在于,所述數(shù)據(jù)生成模塊包括文件加密子模塊、第二綁定子模塊和第二生成子模塊,其中, 文件加密子模塊,用于根據(jù)預先配置的會話密鑰,對所述核心文件進行加密; 第二綁定子模塊,用于將加密后的核心文件與所述文件簽名進行綁定;第二生成子模塊,用于根據(jù)綁定后的文件,生成與將要發(fā)行的軟件對應的軟件數(shù)據(jù)包。
10.根據(jù)權(quán)利要求9所述的保護裝置,其特征在于,進一步包括: 密鑰發(fā)行模塊,用于發(fā)行所述會話密鑰。
11.根據(jù)權(quán)利要求9所述的保護裝置,其特征在于,進一步包括: 公鑰確定模塊,用于根據(jù)預先配置的指定用戶的用戶標識,確定與該用戶標識對應的公鑰; 密鑰加密模塊,用于根據(jù)所述公鑰,對所述會話密鑰進行加密,生成數(shù)字信封,形成授權(quán)文件; 授權(quán)發(fā)行模塊,用于發(fā)行所述授權(quán)文件。
12.根據(jù)權(quán)利要求9至11中任意一項所述的保護裝置,其特征在于,所述會話密鑰包括通過隨機數(shù)發(fā)生器生成的隨機數(shù)。
13.一種軟件的保護方法,其特征在于,用于在軟件運行的過程中對軟件進行保護,并且,所述軟件的保護方法包括: 接收的軟件數(shù)據(jù)包; 對所述軟件數(shù)據(jù)包進行分析,確定所述軟件數(shù)據(jù)包中包含的文件簽名; 根據(jù)所述文件簽名,對所述軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證; 在所述核心文件通過驗證的情況下,允許運行所述核心文件。
14.根據(jù)權(quán)利要求13所述的保護方法,其特征在于,進一步包括: 在所述核心文件為加密的情況下,接收會話密鑰; 根據(jù)所述會話密鑰,對所述核心文件進行解密。
15.根據(jù)權(quán)利要求13所述的保護方法,其特征在于,進一步包括: 在所述核心文件為加密的情況下,接收授權(quán)文件; 根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對所述授權(quán)文件進行解密,得到會話密鑰; 根據(jù)該會話密鑰,對所述核心文件進行解密。
16.一種軟件的保護裝置,其特征在于,用于在軟件運行的過程中對軟件進行保護,并且,所述軟件的保護裝置包括: 數(shù)據(jù)接收模塊,用于接收軟件數(shù)據(jù)包; 數(shù)據(jù)解析模塊,用于對所述軟件數(shù)據(jù)包進行解析,確定所述軟件數(shù)據(jù)包中包含的文件簽名; 簽名驗證模塊,用于根據(jù)所述文件簽名,對所述軟件數(shù)據(jù)包中包含的核心文件的真實性和完整性進行驗證; 數(shù)據(jù)運行模塊,用于在所述核心文件通過驗證的情況下,允許運行所述核心文件。
17.根據(jù)權(quán)利要求16所述的保護裝置,其特征在于,進一步包括: 密鑰接收模塊,用于在所述核心文件為加密的情況下,接收會話密鑰; 第一解密模塊,用于根據(jù)所述會話密鑰,對所述核心文件進行解密。
18.根據(jù)權(quán)利要求16所述的保護裝置,其特征在于,進一步包括: 授權(quán)接收模塊,用于在所述核心文件為加密的情況下,接收授權(quán)文件;授權(quán)解析模塊,用于根據(jù)預先配置的與指定用戶的公鑰對應的私鑰,對所述授權(quán)文件進行解密,得到會話密鑰; 第二解密模塊,用于根據(jù)該會話密鑰,對所述核心文件進行解密。
19.一種虛擬機,其特征在于,該虛擬機的類加載器中包括權(quán)利要求16至18中任意一項所述的軟件的保護裝置。
【文檔編號】G06F21/12GK103995992SQ201410232654
【公開日】2014年8月20日 申請日期:2014年5月28日 優(yōu)先權(quán)日:2014年5月28日
【發(fā)明者】馮艷楠, 李維剛, 陳海南, 趙陽 申請人:全聯(lián)斯泰克科技有限公司