函數(shù)級(jí)的軟件保護(hù)方法
【專利摘要】本發(fā)明公開了一種函數(shù)級(jí)的軟件保護(hù)方法,包括以下步驟:S1:調(diào)用第一編譯器編譯源代碼文件得到第一目標(biāo)文件,第一編譯器為能夠?qū)⒃创a編譯為本地代碼的編譯器;S2:調(diào)用第二編譯器編譯所述源代碼文件得到第二目標(biāo)文件,第二編譯器為能夠?qū)⒃创a編譯為受保護(hù)代碼的編譯器;S3:從第一目標(biāo)文件和第二目標(biāo)文件中提取函數(shù)信息和變量信息,函數(shù)信息包括函數(shù)名、函數(shù)體、重定位,變量信息包括變量名、初始化數(shù)據(jù);S4:獲取需要保護(hù)的函數(shù)的列表;S5:將第一目標(biāo)文件的部分內(nèi)容和第二目標(biāo)文件中的部分內(nèi)容合并并構(gòu)造得到第三目標(biāo)文件。本發(fā)明的函數(shù)級(jí)的軟件保護(hù)方法,實(shí)現(xiàn)函數(shù)級(jí)別保護(hù),同時(shí)避免提高編譯器復(fù)雜性。
【專利說明】函數(shù)級(jí)的軟件保護(hù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件保護(hù)領(lǐng)域,尤其涉及一種函數(shù)級(jí)的軟件保護(hù)方法。
【背景技術(shù)】
[0002]函數(shù)/類成員函數(shù)是用戶組織代碼的基本單位,一個(gè)函數(shù)往往代表一項(xiàng)基本功能。以函數(shù)為單位對(duì)軟件代碼進(jìn)行保護(hù)能較好的體現(xiàn)用戶意圖,實(shí)現(xiàn)對(duì)特定功能的保護(hù)。基于可執(zhí)行文件的保護(hù)可以通過解析map文件(軟件編譯后產(chǎn)生的用到程序、數(shù)據(jù)等的一種映射文件)或解析用戶預(yù)設(shè)標(biāo)志獲取函數(shù)位置進(jìn)而加以保護(hù)。在基于源代碼的保護(hù)方法(直接將源代碼編譯為保護(hù)好的目標(biāo)文件)中,用同樣方法實(shí)現(xiàn)函數(shù)級(jí)的保護(hù)要復(fù)雜很多,需解決兩個(gè)問題:定位函數(shù)和對(duì)函數(shù)進(jìn)行用特殊的方法進(jìn)行編譯。一般一個(gè)源代碼文件包含多個(gè)函數(shù),編譯器需要識(shí)別哪個(gè)函數(shù)需要保護(hù)。由于map文件是對(duì)可執(zhí)行文件(即保護(hù)結(jié)果)的描述,因此不能使用map文件定位函數(shù),只能通過解析用戶預(yù)設(shè)標(biāo)志定位函數(shù),增加編譯器的復(fù)雜性。非保護(hù)函數(shù)與保護(hù)函數(shù)混合在一起,編譯器需要對(duì)兩類函數(shù)分別編譯,進(jìn)一步增加了編譯器的復(fù)雜性。
【發(fā)明內(nèi)容】
[0003]本發(fā)明所要解決的技術(shù)問題是,提供一種函數(shù)級(jí)的軟件保護(hù)方法,實(shí)現(xiàn)函數(shù)級(jí)別保護(hù),同時(shí)避免提高編譯器復(fù)雜性。
[0004]為了解決上述技術(shù)問題,本發(fā)明提供了一種函數(shù)級(jí)的軟件保護(hù)方法,包括以下步驟:
[0005]S1:調(diào)用第一編譯器編譯源代碼文件得到第一目標(biāo)文件,所述第一編譯器為能夠?qū)⒃创a編譯為本地代碼的編譯器;
[0006]S2:調(diào)用第二編譯器編譯所述源代碼文件得到第二目標(biāo)文件,所述第二編譯器為能夠?qū)⒃创a編譯為受保護(hù)代碼的編譯器;
[0007]S3:從所述第一目標(biāo)文件和第二目標(biāo)文件中提取函數(shù)信息和變量信息,所述函數(shù)信息包括函數(shù)名、函數(shù)體、重定位,所述變量信息包括變量名、初始化數(shù)據(jù);
[0008]S4:獲取需要保護(hù)的函數(shù)的列表;
[0009]S5:將所述第一目標(biāo)文件的部分內(nèi)容和所述第二目標(biāo)文件中的部分內(nèi)容合并并構(gòu)造得到第三目標(biāo)文件,所述部分內(nèi)容為符號(hào)及其指向的數(shù)據(jù),其中,
[0010]所述第一目標(biāo)文件中的所述部分內(nèi)容為包括所述第一目標(biāo)文件中的與所述第二目標(biāo)文件中的所述部分內(nèi)容不同的所有內(nèi)容。
[0011]作為優(yōu)選,所述第二目標(biāo)文件中的所述部分內(nèi)容為步驟S4中所述列表中的各函數(shù)的所述函數(shù)信息,并且,如果所述第二目標(biāo)文件中的所述部分內(nèi)容需要依賴所述第二目標(biāo)文件中的其他內(nèi)容,則將所述其他內(nèi)容也并入所述第三目標(biāo)文件。
[0012]作為優(yōu)選,所述第一目標(biāo)文件中的所述部分內(nèi)容包括所述第一目標(biāo)文件中的非代碼段和代碼段中的與所述第二目標(biāo)文件中的所述部分內(nèi)容不同的函數(shù)、相關(guān)的符號(hào)和重定位信息。
[0013]作為優(yōu)選,所述步驟S3具體為:
[0014]S31:將符號(hào)表中的符號(hào)按其指向數(shù)據(jù)在代碼段中出現(xiàn)的先后順序進(jìn)行排序;
[0015]S32:對(duì)每一個(gè)本地定義的符號(hào)提取其函數(shù)或變量;
[0016]S33:根據(jù)符號(hào)性質(zhì)判斷所述符號(hào)的綁定類型、函數(shù)或者變量、內(nèi)存屬性,所述函數(shù)或變量的內(nèi)容為所述符號(hào)指向的數(shù)據(jù);
[0017]S34:更新符號(hào)表,將當(dāng)前符號(hào)之后的指向范圍在所提取的函數(shù)或變量范圍之內(nèi)的符號(hào)作為該函數(shù)或變量的內(nèi)部符號(hào)添加到相應(yīng)的類成員;
[0018]S35:將所述指向范圍添加為該函數(shù)或變量的重定位,將重定位的位置調(diào)整為相對(duì)該函數(shù)或變量的相對(duì)位置,符號(hào)名為重定位指向的符號(hào)名。
[0019]作為優(yōu)選,步驟S5具體包括:
[0020]步驟S51:判斷所述第二目標(biāo)文件需要并入所述第三目標(biāo)文件的要素,所述要素為所述第三目標(biāo)文件格式中定義的數(shù)據(jù),包括段、函數(shù)、變量,判斷條件為:
[0021]條件Al:要保護(hù)函數(shù)列表中包含的函數(shù)為需要并入所述第三目標(biāo)文件的要素;
[0022]條件A2:如果該要素的函數(shù)體或變量初始化數(shù)據(jù)中包含需要重定位的部分,并且如果對(duì)于重定位所指向符號(hào)的符號(hào)名在所述第一目標(biāo)文件中不存在,則該符號(hào)對(duì)應(yīng)的要素為需要并入所述第三目標(biāo)文件的要素,以及,
[0023]條件A3:對(duì)于所述條件Al和條件A2中引入的要素,如果涉及重定位且符合所述條件A2,則重定位所指向的符號(hào)為需要并入所述第三目標(biāo)文件的要素,即對(duì)需要并入所述第三目標(biāo)文件的要素進(jìn)行迭代判斷;
[0024]步驟S52:判斷所述第一目標(biāo)文件需要并入所述第三目標(biāo)文件的要素,判斷條件為:
[0025]條件B1:所述第一目標(biāo)文件中的代碼之外的段為需要并入所述第三目標(biāo)文件的
要素;
[0026]條件B2:所述第一目標(biāo)文件中與所述第二目標(biāo)文件的需要并入所述第三目標(biāo)文件的要素所不同的函數(shù)為需要并入所述第三目標(biāo)文件的要素;
[0027]步驟S53:構(gòu)造所述第三目標(biāo)文件,包括以下步驟:
[0028]S531:將所有的需要并入所述第三目標(biāo)文件的要素添加到文件,并構(gòu)造符號(hào);
[0029]S532:添加重定位;
[0030]S533:輸出到所述第三目標(biāo)文件。
[0031]作為優(yōu)選,所述第二編譯器具體配置為將C/C++源代碼編譯為自定義CPU指令的代碼。
[0032]作為優(yōu)選,所述第二編譯器的編譯過程通過虛擬機(jī)執(zhí)行。
[0033]作為優(yōu)選,所述第二編譯器的編譯過程具體為對(duì)C語言文件經(jīng)過編譯和加密步驟,生成適用于Visual Studio或Delphi的所述第二目標(biāo)文件。
[0034]作為優(yōu)選,所述第二編譯器還具有多態(tài)混淆、反調(diào)試和/或私有數(shù)據(jù)保護(hù)的軟件保護(hù)功能。
[0035]與現(xiàn)有技術(shù)相比,本發(fā)明的函數(shù)級(jí)的軟件保護(hù)方法的有益效果在于:對(duì)被保護(hù)函數(shù)所在的文件調(diào)用非保護(hù)編譯器進(jìn)行編譯,獲取非保護(hù)代碼;對(duì)文件進(jìn)行保護(hù)性編譯,獲取保護(hù)代碼,從保護(hù)代碼和非保護(hù)代碼中提取信息,構(gòu)造新的目標(biāo)文件。本發(fā)明的方法能夠?qū)崿F(xiàn)函數(shù)級(jí)別保護(hù),同時(shí)避免提高編譯器復(fù)雜性。
【專利附圖】
【附圖說明】
[0036]圖1為本發(fā)明的實(shí)施例的函數(shù)級(jí)的軟件保護(hù)方法的流程示意圖。
【具體實(shí)施方式】
[0037]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的實(shí)施例的函數(shù)級(jí)的軟件保護(hù)方法作進(jìn)一步詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
[0038]圖1為本發(fā)明的實(shí)施例的函數(shù)級(jí)的軟件保護(hù)方法的流程示意圖。如圖1所示,本發(fā)明的實(shí)施例的函數(shù)級(jí)的軟件保護(hù)方法,包括以下步驟:
[0039]S1:調(diào)用第一編譯器編譯源代碼文件得到第一目標(biāo)文件,第一編譯器為能夠?qū)⒃创a編譯為本地代碼的編譯器;
[0040]S2:調(diào)用第二編譯器編譯源代碼文件得到第二目標(biāo)文件,第二編譯器為能夠?qū)⒃创a編譯為受保護(hù)代碼的編譯器;
[0041]S3:從第一目標(biāo)文件和第二目標(biāo)文件中提取函數(shù)信息和變量信息,函數(shù)信息包括函數(shù)名、函數(shù)體、重定位,變量信息包括變量名、初始化數(shù)據(jù);
[0042]S4:獲取需要保護(hù)的函數(shù)的列表;
[0043]S5:將第一目標(biāo)文件的部分內(nèi)容和第二目標(biāo)文件中的部分內(nèi)容合并并構(gòu)造得到第三目標(biāo)文件,部分內(nèi)容為符號(hào)及其指向的數(shù)據(jù),其中:
[0044]第一目標(biāo)文件中的部分內(nèi)容為包括第一目標(biāo)文件中的與第二目標(biāo)文件中的部分內(nèi)容不同的所有內(nèi)容。
[0045]第一編譯器可利用現(xiàn)有的的編譯器如Microsoft Visual Studio自帶的C/C++編譯器,第二編譯器可以應(yīng)用軟加密方法,具體配置為將C/C++源代碼編譯為自定義CPU指令的代碼,可通過虛擬機(jī)執(zhí)行編譯過程。對(duì)C語言代碼進(jìn)行保護(hù),應(yīng)用于Visual Studio和Delphi之中。具體為,對(duì)C語言文件經(jīng)過一系列的編譯和加密步驟,生成適用于VisualStudio或Delphi的.0bj文件(目標(biāo)文件)。配置好第二編譯器應(yīng)用環(huán)境之后,只需在VisualStudio進(jìn)行簡單設(shè)置,將默認(rèn)編譯器改為該第二編譯器即可方便的應(yīng)用。除了最基本的保護(hù)之外,第二編譯器可以優(yōu)選地配置為提供了增強(qiáng)保護(hù),包括多態(tài)混淆、反調(diào)試和私有數(shù)據(jù)保護(hù)功能,這三種功能可以隨意組合使用。
[0046]相應(yīng)的目標(biāo)文件格式為COFF格式,其中包含的一些概念可用C++代碼表示,例如類與Windows SDK或Microsoft Visual Studio提供的Winnt.h頭文件中定義的段、符號(hào)、重定位是一致的,可參考微軟公司發(fā)布的PE/C0FF文件格式文檔。COFF目標(biāo)文件的載入和輸出并非本發(fā)明關(guān)注的重點(diǎn),此處不再贅述。
[0047]作為一種改進(jìn),第二目標(biāo)文件中的部分內(nèi)容為步驟S4中列表中的各函數(shù)的函數(shù)信息,并且,如果第二目標(biāo)文件中的部分內(nèi)容需要依賴第二目標(biāo)文件中的其他內(nèi)容,則將其他內(nèi)容也并入第三目標(biāo)文件。
[0048]作為更進(jìn)一步的改進(jìn),第一目標(biāo)文件中的部分內(nèi)容包括第一目標(biāo)文件中的非代碼段和代碼段中的與第二目標(biāo)文件中的部分內(nèi)容不同的函數(shù)、相關(guān)的符號(hào)和重定位信息??梢圆捎靡苑?hào)名為判斷準(zhǔn)則進(jìn)行判斷。
[0049]作為進(jìn)一步的改進(jìn),步驟S3具體為:
[0050]S31:將符號(hào)表中的符號(hào)按其指向數(shù)據(jù)在代碼段中出現(xiàn)的先后順序進(jìn)行排序;
[0051]S32:對(duì)每一個(gè)本地定義的符號(hào)提取其函數(shù)或變量;
[0052]S33:根據(jù)符號(hào)性質(zhì)判斷符號(hào)的綁定類型、函數(shù)或者變量、內(nèi)存屬性,函數(shù)或變量的內(nèi)容為符號(hào)指向的數(shù)據(jù);
[0053]S34:更新符號(hào)表,將當(dāng)前符號(hào)之后的指向范圍在所提取的函數(shù)或變量范圍之內(nèi)的符號(hào)作為該函數(shù)或變量的內(nèi)部符號(hào)添加到相應(yīng)的類成員;
[0054]S35:將指向范圍添加為該函數(shù)或變量的重定位,將重定位的位置調(diào)整為相對(duì)該函數(shù)或變量的相對(duì)位置,符號(hào)名為重定位指向的符號(hào)名。
[0055]目標(biāo)文件中,用符號(hào)來標(biāo)識(shí)數(shù)據(jù)(如函數(shù)、變量、常量、段等),符號(hào)名是區(qū)別數(shù)據(jù)的唯一標(biāo)識(shí)。目標(biāo)文件調(diào)用其它目標(biāo)文件中定義的數(shù)據(jù)以符號(hào)名為準(zhǔn),即調(diào)用者記錄要調(diào)用的數(shù)據(jù)的符號(hào)名(聲明一個(gè)外部定義的符號(hào)),被調(diào)用者用符號(hào)名(類型為本地定義)標(biāo)識(shí)被調(diào)用的數(shù)據(jù),鏈接器根據(jù)符號(hào)名識(shí)別數(shù)據(jù),處理調(diào)用關(guān)系。鏈接時(shí),各目標(biāo)文件中的本地定義的數(shù)據(jù)之間符號(hào)名不能相同,除非是弱符號(hào)(意味著各目標(biāo)文件中定義的同名弱符號(hào)數(shù)據(jù)具有相同的地位,可任選其一鏈接到可執(zhí)行文件)。符號(hào)有位置屬性,用以標(biāo)識(shí)其數(shù)據(jù)所在的位置。每個(gè)目標(biāo)文件都有符號(hào)表,用以標(biāo)識(shí)數(shù)據(jù)的類型、位置等信息。本實(shí)施例中的符號(hào)表為編譯過程中的中間數(shù)據(jù),可以認(rèn)為是目標(biāo)文件符號(hào)表的超集。
[0056]作為更進(jìn)一步的優(yōu)選實(shí)施方案,步驟S5具體包括:
[0057]步驟S51:判斷第二目標(biāo)文件需要并入第三目標(biāo)文件的要素,要素為第三目標(biāo)文件格式中定義的數(shù)據(jù),包括段、函數(shù)、變量,判斷條件為:
[0058]條件Al:要保護(hù)函數(shù)列表中包含的函數(shù)為需要并入第三目標(biāo)文件的要素;
[0059]條件A2:如果該要素的函數(shù)體或變量初始化數(shù)據(jù)中包含需要重定位的部分,并且如果對(duì)于重定位所指向符號(hào)的符號(hào)名在第一目標(biāo)文件中不存在,則該符號(hào)對(duì)應(yīng)的要素為需要并入第三目標(biāo)文件的要素,以及,
[0060]條件A3:對(duì)于條件Al和條件A2中引入的要素,如果涉及重定位且符合條件A2,則重定位所指向的符號(hào)為需要并入第三目標(biāo)文件的要素,即對(duì)需要并入第三目標(biāo)文件的要素進(jìn)行迭代判斷;
[0061]步驟S52:判斷第一目標(biāo)文件需要并入第三目標(biāo)文件的要素,判斷條件為:
[0062]條件B1:第一目標(biāo)文件中的代碼之外的段為需要并入第三目標(biāo)文件的要素;
[0063]條件B2:第一目標(biāo)文件中與第二目標(biāo)文件的需要并入第三目標(biāo)文件的要素所不同的函數(shù)為需要并入第三目標(biāo)文件的要素;
[0064]步驟S53:構(gòu)造第三目標(biāo)文件,包括以下步驟:
[0065]S531:將所有的需要并入第三目標(biāo)文件的要素添加到文件,并構(gòu)造符號(hào);
[0066]S532:添加重定位;
[0067]S533:輸出到第三目標(biāo)文件。
[0068]為使更加清楚地說明本發(fā)明的函數(shù)級(jí)的軟件保護(hù)方法的技術(shù)方案及有益效果,以下通過具體實(shí)例方式對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
[0069]1.調(diào)用第一編譯器編譯源代碼文件,得到第一目標(biāo)文件。源代碼如下:[0070]Il參數(shù):FileName-要編譯的源文件
【權(quán)利要求】
1.一種函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,包括以下步驟: S1:調(diào)用第一編譯器編譯源代碼文件得到第一目標(biāo)文件,所述第一編譯器為能夠?qū)⒃创a編譯為本地代碼的編譯器; 52:調(diào)用第二編譯器編譯所述源代碼文件得到第二目標(biāo)文件,所述第二編譯器為能夠?qū)⒃创a編譯為受保護(hù)代碼的編譯器; 53:從所述第一目標(biāo)文件和第二目標(biāo)文件中提取函數(shù)信息和變量信息,所述函數(shù)信息包括函數(shù)名、函數(shù)體、重定位,所述變量信息包括變量名、初始化數(shù)據(jù); 54:獲取需要保護(hù)的函數(shù)的列表; 55:將所述第一目標(biāo)文件的部分內(nèi)容和所述第二目標(biāo)文件中的部分內(nèi)容合并并構(gòu)造得到第三目標(biāo)文件,所述部分內(nèi)容為符號(hào)及其指向的數(shù)據(jù),其中, 所述第一目標(biāo)文件中的所述部分內(nèi)容包括所述第一目標(biāo)文件中的與所述第二目標(biāo)文件中的所述部分內(nèi)容不同的所有內(nèi)容。
2.根據(jù)權(quán)利要 求1所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第二目標(biāo)文件中的所述部分內(nèi)容為步驟S4中所述列表中的各函數(shù)的所述函數(shù)信息,并且,如果所述第二目標(biāo)文件中的所述部分內(nèi)容需要依賴所述第二目標(biāo)文件中的其他內(nèi)容,則將所述其他內(nèi)容也并入所述第三目標(biāo)文件。
3.根據(jù)權(quán)利要求1所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第一目標(biāo)文件中的所述部分內(nèi)容包括所述第一目標(biāo)文件中的非代碼段和代碼段中的與所述第二目標(biāo)文件中的所述部分內(nèi)容不同的函數(shù)、相關(guān)的符號(hào)和重定位信息。
4.根據(jù)權(quán)利要求1所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述步驟S3具體為: 531:將符號(hào)表中的符號(hào)按其指向數(shù)據(jù)在代碼段中出現(xiàn)的先后順序進(jìn)行排序; 532:對(duì)每一個(gè)本地定義的符號(hào)提取其函數(shù)或變量; 533:根據(jù)符號(hào)性質(zhì)判斷所述符號(hào)的綁定類型、函數(shù)或者變量、內(nèi)存屬性,所述函數(shù)或變量的內(nèi)容為所述符號(hào)指向的數(shù)據(jù); S34:更新符號(hào)表,將當(dāng)前符號(hào)之后的指向范圍在所提取的函數(shù)或變量范圍之內(nèi)的符號(hào)作為該函數(shù)或變量的內(nèi)部符號(hào)添加到相應(yīng)的類成員; S35:將所述指向范圍添加為該函數(shù)或變量的重定位,將重定位的位置調(diào)整為相對(duì)該函數(shù)或變量的相對(duì)位置,符號(hào)名為重定位指向的符號(hào)名。
5.根據(jù)權(quán)利要求1所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,步驟S5具體包括: 步驟S51:判斷所述第二目標(biāo)文件需要并入所述第三目標(biāo)文件的要素,所述要素為所述第三目標(biāo)文件格式中定義的數(shù)據(jù),包括段、函數(shù)、變量,判斷條件為: 條件Al:要保護(hù)函數(shù)列表中包含的函數(shù)為需要并入所述第三目標(biāo)文件的要素; 條件A2:如果該要素的函數(shù)體或變量初始化數(shù)據(jù)中包含需要重定位的部分,并且如果對(duì)于重定位所指向符號(hào)的符號(hào)名在所述第一目標(biāo)文件中不存在,則該符號(hào)對(duì)應(yīng)的要素為需要并入所述第三目標(biāo)文件的要素,以及, 條件A3:對(duì)于所述條件Al和條件A2中引入的要素,如果涉及重定位且符合所述條件A2,則重定位所指向的符號(hào)為需要并入所述第三目標(biāo)文件的要素,即對(duì)需要并入所述第三目標(biāo)文件的要素進(jìn)行迭代判斷; 步驟S52:判斷所述第一目標(biāo)文件需要并入所述第三目標(biāo)文件的要素,判斷條件為:條件B1:所述第一目標(biāo)文件中的代碼之外的段為需要并入所述第三目標(biāo)文件的要素; 條件B2:所述第一目標(biāo)文件中與所述第二目標(biāo)文件的需要并入所述第三目標(biāo)文件的要素所不同的函數(shù)為需要并入所述第三目標(biāo)文件的要素; 步驟S53:構(gòu)造所述第三目標(biāo)文件,包括以下步驟: 5531:將所有的需要并入所述第三目標(biāo)文件的要素添加到文件,并構(gòu)造符號(hào); 5532:添加重定位; 5533:輸出到所述第三目標(biāo)文件。
6.根據(jù)權(quán)利要求1所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第二編譯器具體配置為將C/C++源代碼編譯為自定義CPU指令的代碼。
7.根據(jù)權(quán)利要求6所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第二編譯器的編譯過程通過虛擬機(jī)執(zhí)行。
8.根據(jù)權(quán)利要求7所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第二編譯器的編譯過程具體為對(duì)C語言文件經(jīng)過編譯和加密步驟,生成適用于Visual Studio或Delphi的所述第二目標(biāo)文件。
9.根據(jù)權(quán)利要求8所述的函數(shù)級(jí)的軟件保護(hù)方法,其特征在于,所述第二編譯器還具有多態(tài)混淆、反調(diào)試和/或私有數(shù)據(jù)保護(hù)的軟件保護(hù)功能。
【文檔編號(hào)】G06F21/12GK103729579SQ201410001492
【公開日】2014年4月16日 申請(qǐng)日期:2014年1月2日 優(yōu)先權(quán)日:2014年1月2日
【發(fā)明者】孫吉平, 韓勇 申請(qǐng)人:北京深思數(shù)盾科技有限公司