两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種Linux系統(tǒng)下軟件代碼保護(hù)方法

文檔序號(hào):6583809閱讀:477來源:國知局
專利名稱:一種Linux系統(tǒng)下軟件代碼保護(hù)方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種在Linux操作系統(tǒng)下代碼保護(hù)方法,屬于軟件保護(hù)技術(shù)領(lǐng)域。
背景技術(shù)
在通常情況下,Linux系統(tǒng)下編譯器生成的代碼以原始機(jī)器碼的形態(tài)存在于可執(zhí)行文件中,并在執(zhí)行時(shí)由操作系統(tǒng)加載入內(nèi)存執(zhí)行。這就造成了安全隱患一方面,攻擊者可以通過調(diào)試器動(dòng)態(tài)跟蹤程序的執(zhí)行,找到軟件保護(hù)判斷點(diǎn),然后在可執(zhí)行文件中尋找對(duì)應(yīng)的機(jī)器碼部分進(jìn)行修改,以永久解除軟件的保護(hù);另一方面,攻擊者可以通過反編譯器對(duì)可執(zhí)行文件中未修改的機(jī)器碼進(jìn)行反匯編得到軟件的所有匯編代碼,然后對(duì)其進(jìn)行靜態(tài)分析以找到軟件的保護(hù)判斷點(diǎn),甚至將軟件中重要的算法提取出來使用。代碼保護(hù)是針對(duì)破解軟件技術(shù)而提出的軟件保護(hù)方法。無論是動(dòng)態(tài)跟蹤還是靜態(tài)分析,軟件破解技術(shù)的最后步驟通常需要修改可執(zhí)行文件中的機(jī)器碼以永久解除軟件保護(hù)。代碼保護(hù)的基本思路是使程序代碼不以原始機(jī)器碼的形式保存在磁盤上,而是執(zhí)行時(shí)在內(nèi)存中恢復(fù)成機(jī)器碼,使得破解者無法在保護(hù)后的可執(zhí)行文件中找到并修改程序代碼,更無法對(duì)其進(jìn)行反編譯,從而達(dá)到保護(hù)軟件的目的。在Linux系統(tǒng)中,每個(gè)內(nèi)存頁都是有其內(nèi)存頁屬性,所述內(nèi)存頁屬性為可讀、可寫、可執(zhí)行或者無訪問權(quán)限中的一種或幾種;當(dāng)具有多種屬性時(shí),各屬性之間要保證無沖突。如果程序嘗試在不允許這些權(quán)限的本地內(nèi)存上操作,它將被SIGSEGV信號(hào)(Segmentation fault,段錯(cuò)誤信號(hào))終止。在內(nèi)存映射完成后,這些內(nèi)存頁屬性仍可以被Linux系統(tǒng)中的mprotect系統(tǒng)函數(shù)所修改。mprotect系統(tǒng)函數(shù)的參數(shù)分別為內(nèi)存空間的起始地址,內(nèi)存空間的大小,新的內(nèi)存頁屬性。所指定的內(nèi)存空間必須包含整個(gè)內(nèi)存頁區(qū)間地址必須和整個(gè)系統(tǒng)頁大小對(duì)齊,而區(qū)間長度必須是內(nèi)存頁大小的整數(shù)倍。這些內(nèi)存頁的內(nèi)存頁屬性被mprotect系統(tǒng)函數(shù)中的新的內(nèi)存頁屬性替換。目前在Linux系統(tǒng),已有的代碼保護(hù)方法有軟件加殼、自檢測等。目前Linux下代碼保護(hù)的技術(shù)水平不高,無法有效地對(duì)抗攻擊者的靜態(tài)分析和動(dòng)態(tài)跟蹤。Linux平臺(tái)下軟件保護(hù)技術(shù)較之Win32平臺(tái)下落后很多,不僅商用保護(hù)產(chǎn)品屈指可數(shù),軟件作者自己設(shè)計(jì)的保護(hù)也通常比較簡單,這主要表現(xiàn)在缺乏反跟蹤手段和代碼保護(hù)手段。

發(fā)明內(nèi)容
本發(fā)明的目的是為了解決目前已有Linux系統(tǒng)下的代碼保護(hù)方法存在的不足,提出一種新的Linux系統(tǒng)下軟件代碼保護(hù)方法。本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的。一種Linux系統(tǒng)下軟件代碼保護(hù)方法,用于對(duì)Linux系統(tǒng)下的軟件代碼進(jìn)行保護(hù)。所述Linux系統(tǒng)下的軟件代碼包括主程序代碼以及I個(gè)或多個(gè)被調(diào)用函數(shù),采用本發(fā)明提出的代碼保護(hù)方法對(duì)Linux系統(tǒng)下的軟件代碼進(jìn)行保護(hù),其操作過程為步驟一、加密和存儲(chǔ)擬保護(hù)代碼,具體為第I步在被調(diào)用函數(shù)中指定擬保護(hù)代碼,擬保護(hù)代碼是以函數(shù)為單位的。第2步為擬保護(hù)代碼定義一個(gè)數(shù)組(用符號(hào)pF表示),數(shù)組pF中的每個(gè)元素分別用來記錄擬保護(hù)代碼用到的一個(gè)系統(tǒng)庫函數(shù)地址。將數(shù)組PF中元素的初始值設(shè)置為空。然后將擬保護(hù)代碼用到的系統(tǒng)庫函數(shù)的地址替換為數(shù)組PF中對(duì)應(yīng)的元素值。第3步將擬保護(hù)代碼編譯為關(guān)鍵代碼庫文件。第4步將關(guān)鍵代碼庫文件分為m個(gè)部分,m大于等于I ;再對(duì)m個(gè)部分加密后,分別存儲(chǔ)于m個(gè)數(shù)據(jù)文件中。步驟二、通過主程序申請(qǐng)一個(gè)內(nèi)存空間(用符號(hào)Hi1表示),并記錄該內(nèi)存空間中第一個(gè)完整的內(nèi)存頁的起始地址(用符號(hào)P表示)。步驟三、將步驟二申請(qǐng)的內(nèi)存空間Hi1中的全部完整的內(nèi)存頁的屬性設(shè)置為可讀并可寫并可執(zhí)行。所述內(nèi)存頁的屬性包括可讀、可寫、可執(zhí)行或者無訪問權(quán)限中的一種或幾種。步驟四、當(dāng)主程序需要調(diào)用擬保護(hù)代碼時(shí),其操作過程為第4.1步通過主程序申請(qǐng)一個(gè)內(nèi)存空間(用符號(hào)m2表示);從步驟一中所述m個(gè)數(shù)據(jù)文件中讀取擬保護(hù)代碼的密文到內(nèi)存空間Hl2。第4. 2步對(duì)第4.1步中所述擬保護(hù)代碼的密文進(jìn)行解密,并將解密后的內(nèi)容拷貝到步驟二中所述的內(nèi)存空間Hl1中以P開始的內(nèi)存中。第4. 3步把關(guān)鍵代碼庫文件中用到的系統(tǒng)庫函數(shù)地址賦值給內(nèi)存空間Hi1中的pF數(shù)組。第4. 4步修正內(nèi)存空間Hi1中被調(diào)用函數(shù)的地址,即將當(dāng)前的被調(diào)用函數(shù)地址加上P的值。第4. 5步主程序調(diào)用擬保護(hù)代碼。經(jīng)過上述步驟,即可實(shí)現(xiàn)Linux系統(tǒng)下的代碼保護(hù)。有益效果本發(fā)明提出的方法與已有Linux操作系統(tǒng)下代碼保護(hù)方法相比較,具有更好的安全性。本發(fā)明方法將擬保護(hù)代碼的加密存儲(chǔ)在一個(gè)或者多個(gè)數(shù)據(jù)文件中,在磁盤上沒有明文的二進(jìn)制文件,增加攻擊的靜態(tài)分析難度,因此提高了安全性。
具體實(shí)施例方式下面結(jié)合具體實(shí)施例對(duì)本發(fā)明方法進(jìn)行進(jìn)一步詳細(xì)說明。本實(shí)施例中有5個(gè)二進(jìn)制文件host、myl、my2、my3和my4,其中host為主程序;myl、my2、my3和my4為被調(diào)用函數(shù)。采用本發(fā)明提出的代碼保護(hù)方法對(duì)Linux系統(tǒng)下的軟件代碼進(jìn)行保護(hù),其操作過程為步驟一、加密和存儲(chǔ)擬保護(hù)代碼,具體為第I步在被調(diào)用函數(shù)中指定文件myl、my2和my4為擬保護(hù)代碼。第2步為擬保護(hù)代碼定義一個(gè)長整型數(shù)組pF,長度為200,數(shù)組pF中的每個(gè)元素分別用來記錄擬保護(hù)代碼用到的一個(gè)系統(tǒng)庫函數(shù)地址。將數(shù)組PF中元素的初始值設(shè)置為空。然后將擬保護(hù)代碼用到的系統(tǒng)庫函數(shù)的地址替換為數(shù)組PF中對(duì)應(yīng)的元素值。myl中用到的系統(tǒng)庫函數(shù)為printf ( ) ;scanf ()。my2 中用到的系統(tǒng)庫函數(shù)為printf ( ) ;scanf ( ) ;read ( ) ;write ()。my4 中用到的系統(tǒng)庫函數(shù)為printf ( ) ;scanf Oread ( ) ;lseek ()。長整型數(shù)組pF中的第一個(gè)元素用來記錄printf ()的地址;長整型數(shù)組pF中的第二個(gè)元素用來記錄scanf ()的地址;長整型數(shù)組pF中的第三個(gè)元素用來記錄read ()的地址;長整型數(shù)組pF中的第四個(gè)元素用來記錄write ()的地址;長整型數(shù)組pF中的第五個(gè)元素用來記錄Iseek ()的地址。第3步將擬保護(hù)代碼編譯為關(guān)鍵代碼庫文件,關(guān)鍵代碼庫文件名為my. bin。第4步將關(guān)鍵代碼庫文件my. bin分為5個(gè)部分,再對(duì)5個(gè)部分加密后,分別存儲(chǔ)于5個(gè)數(shù)據(jù)文件中,5個(gè)數(shù)據(jù)文件名分別為A、B、C、D、E0步驟二、通過主程序host申請(qǐng)一個(gè)內(nèi)存空間Iii1,并記錄該內(nèi)存空間中第一個(gè)完整的內(nèi)存頁的起始地址P。步驟三、使用mprotect函數(shù)將步驟二申請(qǐng)的內(nèi)存空間Hi1中的全部完整的內(nèi)存頁的屬性設(shè)置為可讀并可寫并可執(zhí)行,具體代碼為mprotect(p, n*4096, PR0T_READ|PR0T_WRITE|PR0T_EXEC);其中,n表示內(nèi)存空間Hi1中的全部完整的內(nèi)存頁的數(shù)目。步驟四、當(dāng)主程序host需要調(diào)用my2時(shí),其操作過程為第4.1步通過主程序host申請(qǐng)一個(gè)內(nèi)存空間m2 ;從步驟一中所述5個(gè)數(shù)據(jù)文件A、B、C、D、E中讀取擬保護(hù)代碼的密文到內(nèi)存空間m2。第4. 2步對(duì)第4.1步中所述擬保護(hù)代碼的密文進(jìn)行解密,并將解密后的內(nèi)容拷貝到步驟二中所述的內(nèi)存空間Hi1中以P開始的內(nèi)存中。第4. 3步把關(guān)鍵代碼庫文件my. bin中用到的系統(tǒng)庫函數(shù)地址賦值給內(nèi)存空間Hi1中的PF數(shù)組。第4. 4步修正內(nèi)存空間Hi1中被調(diào)用函數(shù)的地址,即將當(dāng)前的被調(diào)用函數(shù)地址加上P的值。第4. 5步主程序調(diào)用擬保護(hù)代碼my2。經(jīng)過上述步驟,即可實(shí)現(xiàn)Linux系統(tǒng)下的代碼保護(hù)。
權(quán)利要求
1.一種Linux系統(tǒng)下軟件代碼保護(hù)方法,其特征在于:其操作過程為: 步驟一、加密和存儲(chǔ)擬保護(hù)代碼,具體為: 第1.1步:在被調(diào)用函數(shù)中指定擬保護(hù)代碼,擬保護(hù)代碼是以函數(shù)為單位的; 第1.2步:為擬保護(hù)代碼定義一個(gè)數(shù)組,用符號(hào)pF表示,數(shù)組pF中的每個(gè)元素分別用來記錄擬保護(hù)代碼用到的一個(gè)系統(tǒng)庫函數(shù)地址;將數(shù)組PF中元素的初始值設(shè)置為空;然后將擬保護(hù)代碼用到的系統(tǒng)庫函數(shù)的地址替換為數(shù)組PF中對(duì)應(yīng)的元素值; 第1.3步:將擬保護(hù)代碼編譯為關(guān)鍵代碼庫文件; 第1.4步:將關(guān)鍵代碼庫文件分為m個(gè)部分,m大于等于I ;再對(duì)m個(gè)部分加密后,分別存儲(chǔ)于m個(gè)數(shù)據(jù)文件中; 步驟二、通過主程序申請(qǐng)一個(gè)內(nèi)存空間,用符號(hào)%表示,并記錄該內(nèi)存空間中第一個(gè)完整的內(nèi)存頁的起始地址,用符號(hào)P表示; 步驟三、將步驟二申請(qǐng)的內(nèi)存空間Hl1中的全部完整的內(nèi)存頁的屬性設(shè)置為可讀并可寫并可執(zhí)行;所述內(nèi)存頁的屬性包括:可讀、可寫、可執(zhí)行或者無訪問權(quán)限中的一種或幾種;步驟四、當(dāng)主程序需要調(diào)用擬保護(hù)代碼時(shí),其操作過程為: 第4.1步:通過主程序申請(qǐng)一個(gè)內(nèi)存空間,用符號(hào)m2表示;從步驟一中所述m個(gè)數(shù)據(jù)文件中讀取擬保護(hù)代碼的密文到內(nèi)存空間m2 ; 第4.2步:對(duì)第4.1步中所述擬保護(hù)代碼的密文進(jìn)行解密,并將解密后的內(nèi)容拷貝到步驟二中所述的內(nèi)存空間Hi1中以P開始的內(nèi)存中; 第4.3步:把關(guān)鍵代碼庫文件中用到的系統(tǒng)庫函數(shù)地址賦值給內(nèi)存空間Hi1中的pF數(shù)組; 第4.4步:修正內(nèi)存空間Hi1中被調(diào)用函數(shù)的地址,即將當(dāng)前的被調(diào)用函數(shù)地址加上P的值; 第4.5步:主程序調(diào) 用擬保護(hù)代碼; 經(jīng)過上述步驟,即可實(shí)現(xiàn)Linux系統(tǒng)下的代碼保護(hù)。
全文摘要
本發(fā)明涉及一種在Linux操作系統(tǒng)下代碼保護(hù)方法,屬于軟件保護(hù)領(lǐng)域。其步驟為①指定擬保護(hù)代碼;定義一個(gè)數(shù)組,記錄系統(tǒng)庫函數(shù)地址;將擬保護(hù)代碼編譯為關(guān)鍵代碼庫文件;并將其分為m個(gè)部分加密后存儲(chǔ)于m個(gè)數(shù)據(jù)文件中。②申請(qǐng)一個(gè)內(nèi)存空間m1,并記錄該內(nèi)存空間中第一個(gè)完整的內(nèi)存頁的起始地址p。③將內(nèi)存空間m1中的完整內(nèi)存頁的屬性設(shè)置為可讀并可寫并可執(zhí)行。④當(dāng)主程序需要調(diào)用擬保護(hù)代碼時(shí),申請(qǐng)一個(gè)內(nèi)存空間m2;讀取擬保護(hù)代碼的密文到內(nèi)存空間m2,并解密到內(nèi)存空間m1中以p開始的內(nèi)存中;把系統(tǒng)庫函數(shù)地址賦值給內(nèi)存空間m1中的pF數(shù)組;修正內(nèi)存空間m1中被調(diào)用函數(shù)的地址。此時(shí)主程序調(diào)用擬保護(hù)代碼。本發(fā)明提出的方法具有更好的安全性。
文檔編號(hào)G06F21/14GK103077333SQ20131002358
公開日2013年5月1日 申請(qǐng)日期2013年1月22日 優(yōu)先權(quán)日2013年1月22日
發(fā)明者朱瑞瑾, 譚毓安, 左偉歡, 李元章, 馬忠梅, 張全新 申請(qǐng)人:北京理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
榆社县| 万盛区| 徐闻县| 海门市| 沁水县| 儋州市| 宜城市| 宜兴市| 奎屯市| 乌拉特后旗| 濉溪县| 武清区| 平安县| 南汇区| 阿坝县| 云浮市| 葫芦岛市| 溧水县| 鄄城县| 专栏| 恩平市| 无极县| 三穗县| 资源县| 巴东县| 北川| 梁山县| 长子县| 武定县| 余江县| 蓬安县| 蚌埠市| 茂名市| 蓝田县| 洛阳市| 海晏县| 彩票| 惠来县| 铜梁县| 报价| 德兴市|