專利名稱:一種防止源代碼反編譯的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)軟件源代碼保護(hù)技術(shù),具體來說涉及一種防止源代碼反編譯的方法,通過此方法有效的保護(hù)軟件被反編譯的難度。
背景技術(shù):
隨著經(jīng)濟(jì)技術(shù)的飛速發(fā)展,軟件作為輔助工具已經(jīng)深入到各行各業(yè)當(dāng)中。軟件程 序是人家設(shè)計(jì)者和軟件編程人員的智慧的結(jié)晶,是公司的知識產(chǎn)權(quán)的體現(xiàn)。也是企業(yè)核心 競爭力的一部分。因此,保護(hù)軟件程序的版權(quán),防止軟件程序被盜版、被非法授權(quán)使用,具有 很重要的現(xiàn)實(shí)意義。傳統(tǒng)的軟件程序保護(hù)措施有序列號保護(hù)、使用時間限制、軟件加殼等;其具體實(shí) 現(xiàn)就是在軟件程序中設(shè)置相應(yīng)的功能模塊,實(shí)現(xiàn)相應(yīng)的保護(hù)功能,例如防拷貝功能、限 制使用時間功能等。破解者要達(dá)到破解軟件的目的,通常采用以下這種方式這種方式也稱為靜態(tài)分析技術(shù),就是利用反編譯或反匯編技術(shù)得到源程序清單, 進(jìn)而分析軟件程序的流程,了解各個模塊所完成的功能,從而通過修改軟件來達(dá)到盜取軟 件技術(shù)的目的。下面簡要介紹反編譯和反匯編技術(shù)使用高級語言編寫的軟件程序需要按照運(yùn)行該軟件程序的計(jì)算機(jī)的主機(jī)系統(tǒng)指 令集(也可稱為機(jī)器語言指令集),轉(zhuǎn)換為由一條一條的主機(jī)系統(tǒng)指令(也可稱為機(jī)器語言 指令)構(gòu)成的機(jī)器語言代碼才能被計(jì)算機(jī)識別并執(zhí)行。通常將轉(zhuǎn)換前的程序稱為源程序, 轉(zhuǎn)換后的程序?yàn)槟繕?biāo)程序。匯編語言是一種介于高級語言與計(jì)算機(jī)語言之間的低級語言,它與計(jì)算機(jī)語言相 比有便于記憶、符合人類語言表達(dá)習(xí)慣的特性,機(jī)器語言與匯編語言之間存在幾乎一一對 應(yīng)的映射關(guān)系。由機(jī)器語言目標(biāo)代碼得到的匯編程序的過程稱為反匯編;由機(jī)器語言目標(biāo) 代碼得到高級語言源程序的過程稱為反編譯。因此,只要獲取到軟件程序的機(jī)器語言目標(biāo) 代碼,就能通過反匯編技術(shù)或者反編譯技術(shù)將其轉(zhuǎn)化成便于破解者理解的匯編語言程序或 高級語言源程序。目前通用的計(jì)算機(jī)體系中,不存在對靜態(tài)分析技術(shù)的防范技術(shù);另一方面,現(xiàn)有 技術(shù)中存在眾多功能強(qiáng)大的、對應(yīng)于目前通用的主機(jī)系統(tǒng)指令集的調(diào)試器及相應(yīng)的使用手 冊,使得破解者能夠非常容易的進(jìn)行反編譯分析,導(dǎo)致現(xiàn)有的軟件保護(hù)措施無法對軟件程 序的源代碼進(jìn)行有效的保護(hù)。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種防止源代碼反編譯的方法,通過此方法有效的保護(hù)軟件 被反編譯的難度。本發(fā)明的目的是按以下方式實(shí)現(xiàn)的,在計(jì)算機(jī)系統(tǒng)中設(shè)置防止源代碼反編譯模 塊,包括代碼讀取子模塊、代碼解析子模塊、虛擬混淆子模塊、數(shù)據(jù)存取子模塊、混淆代碼 生成模塊,其中
代碼讀取子模塊將一個文件集的代碼全部讀取到一個一維的字符串?dāng)?shù)組中,然后再對其進(jìn)行分析,得到命名空間和類的信息;代碼解析子模塊對于文件中的代碼,進(jìn)行如下處理去除空行和前后空格和Tab 符號、回車換行,去除調(diào)試信息,去除注釋,合并跨行語句,通過代碼讀取子模塊的預(yù)處理, 讓代碼更易于被虛擬混淆子模塊處理;虛擬混淆子模塊收集數(shù)據(jù)的程序集名稱、屬性、方法,程序集名稱、屬性、方法作為 獨(dú)立的混淆單元,將混淆后的程序集名稱、屬性、方法合成類,將類合成命名空間,最后將命 名空間合成文件;虛擬混淆子模塊是由混淆模塊接口模塊、程序集混淆子模塊、類混淆子模塊、方法 和屬性混淆子模塊組成,用于收集數(shù)據(jù)的程序集名稱、屬性、方法,然后將程序集名稱、屬 性、方法作為獨(dú)立的混淆單元,再將混淆后的程序集名稱、屬性、方法合成類,將類合成命名 空間,最后將命名空間合成文件;數(shù)據(jù)存取子模塊根據(jù)數(shù)據(jù)程序集名稱、方法、屬性的定義,從預(yù)定義的數(shù)據(jù)混淆模 塊中讀取混淆的格式方法,從而達(dá)到代碼混淆的目的;混淆代碼生成模塊根據(jù)虛擬混淆子模塊和數(shù)據(jù)存取子模塊將代碼重新組成一個 新的源代碼文件,此源代碼文件是經(jīng)過混淆的,即使二進(jìn)制文件被反匯編,看到的代碼也是 混淆過的非常難以理解邏輯比較復(fù)雜代碼,代碼比較多,基本上是沒有可讀性,從而達(dá)到代 碼保護(hù)的目的;文件集中的代碼經(jīng)過預(yù)處理后,存放到一個一維字符串?dāng)?shù)組中,該數(shù)組的容量為 所有代碼的行數(shù)總和,一行代碼放在數(shù)組中的一行,按代碼的順序存放;為每一個文件定義 文件序列、Hash序列和字節(jié)序列。本發(fā)明的優(yōu)異效果是,采用本發(fā)明技術(shù)方案使得破解者很難對被保護(hù)的軟件程序 實(shí)施方向工程,即使反向成功了,也很難讀懂代碼。因此,可以較好的防備破解軟件的反編 譯,從而可以在很大程度上保護(hù)軟件程序的安全性。
附圖1是源代碼混淆的流程圖;附圖2是源代碼混淆架構(gòu)圖;附圖3是源代碼保護(hù)核心模塊組成圖。
具體實(shí)施例方式下面參照附圖,對本發(fā)明的方法以一個具體實(shí)例來描述實(shí)現(xiàn)這一體系結(jié)構(gòu)的過程。正如發(fā)明內(nèi)容中所描述的,該系統(tǒng)體系結(jié)構(gòu)包括代碼讀取子模塊、代碼解析子模 塊、虛擬混淆子模塊、數(shù)據(jù)存取子模塊、混淆代碼生成模塊;在附圖1中,描述的是一個源代碼經(jīng)過本方法之后,進(jìn)行反編譯保護(hù)的過程,軟件 程序讀取程序中的源代碼,對代碼是否進(jìn)行混淆,如果需要進(jìn)行混淆則調(diào)用、進(jìn)行代碼混淆 模塊對源代碼進(jìn)行混淆,否則不進(jìn)行代碼混淆,混淆完成之后,結(jié)束混淆將混淆的函數(shù)、屬 性組織成新的源代碼文件。
至此,已經(jīng)完整實(shí)現(xiàn)了整個基于源代碼混淆的防止反編譯的過程,這種技術(shù)與傳 統(tǒng)的反編譯方法不同的地方在于引入了源代碼的混淆,而不是考慮防止代碼被反編譯,即 使代碼被反編譯了,也不會導(dǎo)致源代碼被讀取。因此采用這種技術(shù),采用本發(fā)明技術(shù)方案使得破解者很難對被保護(hù)的軟件程序?qū)?施方向工程,即使反向成功了,也很難讀懂代碼。因此,可以較好的防備破解軟件的反編譯,從而可以在很大程度上保護(hù)軟件程序的安全性。通過此方法有效的保護(hù)軟件被反編譯的難度。通過使用代碼混淆可以有效的防止 抄襲,破解者反編譯軟件后,得到的是混淆后的代碼,基本無復(fù)用的價值。并且增加破解難 度。通過混淆名稱,我們將使源代碼變得非常難以閱讀,特別是規(guī)模較大且具有一定復(fù)雜性 的系統(tǒng),即使開發(fā)人員也很難讀懂。由上述技術(shù)方案可見,本發(fā)明提供的軟件源代碼保護(hù)方案的實(shí)現(xiàn)過程是,通過預(yù) 設(shè)值的混淆代碼指令集并且讀取源代碼的之后,對代碼的結(jié)構(gòu)、屬性、函數(shù)進(jìn)行分析,從而分別進(jìn)行代碼的混淆,從而實(shí)現(xiàn)對代碼的保護(hù)。
權(quán)利要求
一種防止源代碼反編譯的方法,其特征在于,在計(jì)算機(jī)系統(tǒng)中設(shè)置防止源代碼反編譯模塊,包括代碼讀取子模塊、代碼解析子模塊、虛擬混淆子模塊、數(shù)據(jù)存取子模塊、混淆代碼生成模塊,其中代碼讀取子模塊將一個文件集的代碼全部讀取到一個一維的字符串?dāng)?shù)組中,然后再對其進(jìn)行分析,得到命名空間和類的信息;代碼解析子模塊對于文件中的代碼,進(jìn)行如下處理去除空行和前后空格和Tab符號、回車換行,去除調(diào)試信息,去除注釋,合并跨行語句,通過代碼讀取子模塊的預(yù)處理,讓代碼更易于被虛擬混淆子模塊處理;虛擬混淆子模塊是由混淆模塊接口模塊、程序集混淆子模塊、類混淆子模塊、方法和屬性混淆子模塊組成,用于收集數(shù)據(jù)的程序集名稱、屬性、方法,然后將程序集名稱、屬性、方法作為獨(dú)立的混淆單元,再將混淆后的程序集名稱、屬性、方法合成類,將類合成命名空間,最后將命名空間合成文件;數(shù)據(jù)存取子模塊根據(jù)數(shù)據(jù)程序集名稱、方法、屬性的定義,從預(yù)定義的數(shù)據(jù)混淆模塊中讀取混淆的格式方法,從而達(dá)到代碼混淆的目的;混淆代碼生成模塊根據(jù)虛擬混淆子模塊和數(shù)據(jù)存取子模塊將代碼重新組成一個新的源代碼文件,此源代碼文件是經(jīng)過混淆的,即使二進(jìn)制文件被反匯編,看到的代碼也是混淆過的非常難以理解邏輯比較復(fù)雜代碼,代碼比較多,基本上是沒有可讀性,從而達(dá)到代碼保護(hù)的目的;文件集中的代碼經(jīng)過預(yù)處理后,存放到一個一維字符串?dāng)?shù)組中,該數(shù)組的容量為所有代碼的行數(shù)總和,一行代碼放在數(shù)組中的一行,按代碼的順序存放;為每一個文件定義文件序列、Hash序列和字節(jié)序列。
全文摘要
本發(fā)明提供一種防止源代碼反編譯的方法,該方法是在計(jì)算機(jī)系統(tǒng)中設(shè)置防止源代碼反編譯模塊,包括代碼讀取子模塊、代碼解析子模塊、虛擬混淆子模塊、數(shù)據(jù)存取子模塊、混淆代碼生成模塊,其中代碼讀取子模塊將一個文件集的代碼全部讀取到一個一維的字符串?dāng)?shù)組中,然后再對其進(jìn)行分析,得到命名空間和類的信息;代碼解析子模塊對于文件中的代碼,進(jìn)行如下處理去除空行和前后空格和Tab符號、回車換行,去除調(diào)試信息,去除注釋,合并跨行語句,通過代碼讀取子模塊的預(yù)處理,讓代碼更易于被虛擬混淆子模塊處理;虛擬混淆子模塊收集數(shù)據(jù)的程序集名稱、屬性、方法,程序集名稱、屬性、方法作為獨(dú)立的混淆單元,將混淆后的程序集名稱、屬性、方法合成類,將類合成命名空間,最后將命名空間合成文件。
文檔編號G06F21/24GK101807239SQ20101013427
公開日2010年8月18日 申請日期2010年3月29日 優(yōu)先權(quán)日2010年3月29日
發(fā)明者劉正偉 申請人:山東高效能服務(wù)器和存儲研究院