国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)的制作方法

      文檔序號(hào):9327200閱讀:700來源:國知局
      一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)的制作方法
      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明屬于計(jì)算機(jī)軟件安全領(lǐng)域,特別涉及一種具有指令集隨機(jī)化的代碼虛擬化 軟件保護(hù)系統(tǒng)。
      【背景技術(shù)】
      [0002] 軟件的廣泛應(yīng)用在為社會(huì)帶來巨大利益的同時(shí),關(guān)于軟件安全的問題也變得日益 突出,軟件防惡意逆向成為急需解決的問題。當(dāng)前軟件攻擊技術(shù)和逆向工具的發(fā)展方便了 攻擊者對(duì)軟件逆向分析。另外,軟件一般運(yùn)行在"白盒攻擊"環(huán)境當(dāng)中,攻擊者可以完全控 制軟件的執(zhí)行過程,查看指令執(zhí)行的序列。因此,只要給定攻擊者足夠的時(shí)間,應(yīng)該能夠成 功逆向分析該軟件。
      [0003] 人在一定時(shí)間內(nèi)處理信息量是有限的,如果攻擊者在攻擊時(shí)付出的代價(jià)超過他所 獲得的信息的價(jià)值或者分析過程的難度和復(fù)雜度可以導(dǎo)致攻擊者放棄攻擊,則采用的保護(hù) 方法是有效的。因此軟件保護(hù)的目的在于提高攻擊者逆向分析的難度,增加攻擊者的攻擊 開銷。
      [0004] 為了阻礙惡意的逆向工程和保護(hù)軟件中的智力成果,產(chǎn)業(yè)界和學(xué)術(shù)界提出了多種 軟件保護(hù)技術(shù),主要包括:①注入垃圾指令來阻止反匯編,②使用程序加殼技術(shù)壓縮和加密 關(guān)鍵代碼和數(shù)據(jù),③應(yīng)用代碼混淆技術(shù)使攻擊者更難從代碼中提取有用的語義信息,等等。 針對(duì)二進(jìn)制代碼的保護(hù)方法不受編程語言的限制,相比源代碼級(jí)別應(yīng)用范圍更廣。然而這 些保護(hù)技術(shù)也存在著缺點(diǎn),因?yàn)?,注入的垃圾指令在程序運(yùn)行時(shí)不會(huì)執(zhí)行,而加殼技術(shù)中壓 縮和加密的代碼在程序運(yùn)行的時(shí)候也需要在解壓和解密之后才能執(zhí)行。所以,垃圾指令注 入和加殼技術(shù)只能阻止攻擊者的靜態(tài)分析(在程序沒有運(yùn)行的狀態(tài)下分析),但是不能阻 止攻擊者的動(dòng)態(tài)分析(當(dāng)程序運(yùn)行在調(diào)試或者仿真環(huán)境下時(shí)分析)。當(dāng)前常用的分析工具 有OllyDbg和IDA Pro等。代碼混淆的原理是讓一個(gè)程序轉(zhuǎn)化為功能上等價(jià),但靜態(tài)表示 或執(zhí)行過程不同的等價(jià)程序,主要是通過指令替換和順序重排,改變程序的控制流,但是這 些簡單的指令壓縮變換是容易被理解的。并且當(dāng)前應(yīng)用于二進(jìn)制代碼的混淆技術(shù)主要是通 過花指令或垃圾指令進(jìn)行保護(hù),保護(hù)效果差,容易被發(fā)現(xiàn)和去除。

      【發(fā)明內(nèi)容】

      [0005] 為了解決現(xiàn)有技術(shù)的問題,本發(fā)明提供了一種具有指令集隨機(jī)化的代碼虛擬化軟 件保護(hù)系統(tǒng),所述具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng),包括:
      [0006] 構(gòu)建虛擬指令集;
      [0007] 對(duì)所述待保護(hù)程序進(jìn)行PE文件檢測(cè);
      [0008] 在所述待保護(hù)程序中定位關(guān)鍵代碼段;
      [0009] 對(duì)所述關(guān)鍵代碼段進(jìn)行反匯編,得到本地指令序列;
      [0010] 根據(jù)設(shè)計(jì)好的虛擬指令集將所述本地指令序列轉(zhuǎn)換為第一虛擬指令;
      [0011] 將所述第一虛擬指令按預(yù)設(shè)的編碼規(guī)則進(jìn)行編碼,得到字節(jié)碼指令;
      [0012] 生成保護(hù)系統(tǒng)的附屬虛擬機(jī)組件;
      [0013] 將所述字節(jié)碼指令和所述附屬虛擬機(jī)組件組合為附加文件,將所述附加文件與所 述待保護(hù)程序構(gòu)成第一文件,在所述第一文件中進(jìn)行垃圾數(shù)據(jù)填充,獲得保護(hù)后的程序。
      [0014] 可選的,所述構(gòu)建虛擬指令集,包括:
      [0015] 確定待構(gòu)建的虛擬指令;
      [0016] 確定與所述虛擬指令對(duì)應(yīng)的解釋程序;
      [0017] 其中,所述確定待構(gòu)建的虛擬指令包括數(shù)據(jù)傳輸指令、算數(shù)和邏輯運(yùn)算指令、控制 轉(zhuǎn)移指令。
      [0018] 可選的,所述在所述待保護(hù)程序中定位關(guān)鍵代碼段,包括:
      [0019] 在所述待保護(hù)程序中的關(guān)鍵代碼段的段首添加首標(biāo)記;
      [0020] 在所述待保護(hù)程序中的關(guān)鍵代碼段的段尾添加尾標(biāo)記。
      [0021 ] 可選的,所述對(duì)所述關(guān)鍵代碼段進(jìn)行反匯編,得到本地指令序列,包括:
      [0022] 獲取所述關(guān)鍵代碼段的起始地址和結(jié)束地址;
      [0023] 使用反匯編工具將所述起始地址與所述結(jié)束地址中的二進(jìn)制代碼進(jìn)行反匯編,得 到本地指令序列;
      [0024] 其中,所述本地指令序列中的指令按照地址順序進(jìn)行排列。
      [0025] 可選的,所述根據(jù)設(shè)計(jì)好的虛擬指令集將所述本地指令序列轉(zhuǎn)換為第一虛擬指 令,包括:
      [0026] 將所述本地指令序列的操作數(shù)壓入棧中;
      [0027] 執(zhí)行所述本地指令序列的目標(biāo)操作,獲取執(zhí)行結(jié)果,并存放于所述棧中;
      [0028] 將所述執(zhí)行結(jié)果存入虛擬寄存器環(huán)境或內(nèi)存中。
      [0029] 可選的,所述將所述字節(jié)碼指令和所述附屬虛擬機(jī)組件組合為附加文件,將所述 附加文件與所述待保護(hù)程序構(gòu)成第一文件,在所述第一文件中進(jìn)行垃圾數(shù)據(jù)填充,獲得保 護(hù)后的程序,包括:
      [0030] 將所述字節(jié)碼指令和所述附屬虛擬機(jī)組件組合為附加文件,將所述附加文件附在 所述待保護(hù)程序后,構(gòu)成第一文件;
      [0031] 在所述第一文件中的所述關(guān)鍵代碼段的起始位置處添加指向所述附加文件中虛 擬機(jī)初始化入口起始地址的跳轉(zhuǎn)指令,在所述第一文件中的所述關(guān)鍵代碼段的剩余內(nèi)容中 隨機(jī)填充垃圾數(shù)據(jù),填充完畢后,獲得保護(hù)后的程序。
      [0032] 本發(fā)明提供的技術(shù)方案帶來的有益效果是:
      [0033] 相對(duì)于現(xiàn)有技術(shù),能夠提高待保護(hù)程序的復(fù)雜性,延長了分析者對(duì)待保護(hù)程序的 分析時(shí)間,從而增強(qiáng)了待保護(hù)程序的防逆向分析能力。
      【附圖說明】
      [0034] 為了更清楚地說明本發(fā)明的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖 作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普 通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。 [0035]圖1是本發(fā)明提供的一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)的流程 示意圖;
      [0036] 圖2是本發(fā)明提供的一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)的控制 跳轉(zhuǎn)指令中內(nèi)部跳轉(zhuǎn)和外部跳轉(zhuǎn)的示例圖;
      [0037] 圖3是本發(fā)明提供的一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)的三種 虛擬指令的兩種不同編碼結(jié)果的示例圖;
      [0038] 圖4是本發(fā)明提供的一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng)中保護(hù) 后程序的詳細(xì)結(jié)構(gòu)示意圖。
      【具體實(shí)施方式】
      [0039] 為使本發(fā)明的結(jié)構(gòu)和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明的結(jié)構(gòu)作進(jìn)一步地 描述。
      [0040] 實(shí)施例一
      [0041] 本發(fā)明提供了一種具有指令集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng),所述具有指令 集隨機(jī)化的代碼虛擬化軟件保護(hù)系統(tǒng),如圖1所示,包括:
      [0042] 01、構(gòu)建虛擬指令集。
      [0043] 02、對(duì)所述待保護(hù)程序進(jìn)行PE文件檢測(cè)。
      [0044] 03、在所述待保護(hù)程序中定位關(guān)鍵代碼段。
      [0045] 04、對(duì)所述關(guān)鍵代碼段進(jìn)行反匯編,得到本地指令序列。
      [0046] 05、根據(jù)設(shè)計(jì)好的虛擬指令集將所述本地指令序列轉(zhuǎn)換為第一虛擬指令。
      [0047] 06、將所述第一虛擬指令按預(yù)設(shè)的編碼規(guī)則進(jìn)行編碼,得到字節(jié)碼指令。
      [0048] 07、生成保護(hù)系統(tǒng)的附屬虛擬機(jī)組件。
      [0049] 08、將所述字節(jié)碼指令和所述附屬虛擬機(jī)組件組合為附加文件,將所述附加文件 與所述待保護(hù)程序構(gòu)成第一文件,在所述第一文件中進(jìn)行垃圾數(shù)據(jù)填充,獲得保護(hù)后的程 序。
      [0050] 在實(shí)施中,為了實(shí)現(xiàn)防止程序被逆向分析,特此提出了通過將本地X86指令轉(zhuǎn)換 為虛擬指令,在運(yùn)行是利用嵌入的虛擬解釋器對(duì)虛擬指令進(jìn)行解釋執(zhí)行以達(dá)到和原始本地 指令相同的功能。在該保護(hù)方法下,將原始指令進(jìn)行復(fù)雜化處理,加大分析者理解的難度, 從而起到對(duì)程序進(jìn)行保護(hù)的效果。
      [0051] 具體的,本發(fā)明中提供的方法的主要思想為:
      [0052] 首先構(gòu)建虛擬指令集和handler,這里的虛擬指令集的設(shè)計(jì),需要能夠替代任何的 本地指令,要保證語義的完備性。Handler是指虛擬指令的解釋程序,本地指令替換成虛擬 指令,虛擬指令最終需要用handler來解釋執(zhí)行,handler由本地指令寫成。
      [0053] 接著,對(duì)待保護(hù)程序進(jìn)行PE檢測(cè),這里的PE為可執(zhí)行文件Por tab I e Executab I e。 所有Windows下的32位或64位可執(zhí)行文件都是PE文件格式,其中包括DLL、EXE、F0N、0CX、 LIB和部分SYS文件。在Windows系統(tǒng)下的可執(zhí)行文件的一種(還有NE、LE),
      當(dāng)前第1頁1 2 3 4 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1