精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是虛擬機(jī)保護(hù)技術(shù)

jf_78858299 ? 來(lái)源:看雪學(xué)苑 ? 作者:東方容克 ? 2023-02-14 11:31 ? 次閱讀

****虛擬機(jī)概覽

所謂虛擬機(jī)保護(hù)技術(shù),是指將代碼翻譯為機(jī)器和人都無(wú)法識(shí)別的一串偽代碼字節(jié)流;在具體執(zhí)行時(shí)再對(duì)這些偽代碼進(jìn)行一一翻譯解釋?zhuān)鸩竭€原為原始代碼并執(zhí)行。

這段用于翻譯偽代碼并負(fù)責(zé)具體執(zhí)行的子程序就叫作虛擬機(jī)VM(好似一個(gè)抽象的CPU)。它以一個(gè)函數(shù)的形式存在,函數(shù)的參數(shù)就是字節(jié)碼的內(nèi)存地址。

將虛擬機(jī)應(yīng)用到商業(yè)中的保護(hù)殼現(xiàn)有三款:Vmprotect,themida和 execrypt。

**** 虛擬機(jī)架構(gòu)

我們知道,代碼中的指令多種多樣,組織形式也千變?nèi)f化;虛擬機(jī)不可能針對(duì)每一種具體情況都進(jìn)行翻譯處理。必須對(duì)所有可能遇到的指令先進(jìn)行抽象歸類(lèi),然后分解為若干簡(jiǎn)單的小指令,再交由各個(gè)專(zhuān)門(mén)的子程序(handler)去處理。

學(xué)過(guò)編譯原理的同學(xué)應(yīng)該都知道三元式代碼吧,也叫做3地址代碼(three adress code)。即不論多么復(fù)雜的賦值公式,都可以分解為數(shù)個(gè)3地址代碼式序列。(什么是3地址代碼,1段3地址代碼只完成1次運(yùn)算,譬如1次二目運(yùn)算、1次比較,或者1次分支跳轉(zhuǎn)運(yùn)算。)

與此類(lèi)似,不論多么復(fù)雜的指令,都可以分解為一串不可再分割的原子指令序列。

虛擬機(jī)(CPU)的體系架構(gòu)可分為3種,基于堆棧的(Stack based),基于寄存器的(Register based)和3地址機(jī)器。我們只講述基于堆棧的虛擬機(jī)架構(gòu)(Stack based);這種架構(gòu)的虛擬機(jī)需要頻繁操作堆棧,其使用的虛擬寄存器(虛擬的eax、ebx等等)保存在堆棧中;每個(gè)原子指令的handler都需要push、pop。

現(xiàn)在的CPU都有大量的寄存器,堆棧一般只是在函數(shù)傳遞參數(shù)時(shí)使用(譬如PC機(jī)用的x86系列CPU)。但也有一些CPU只操作內(nèi)存,沒(méi)有堆棧,也沒(méi)有寄存器。使用這種CPU的機(jī)器稱(chēng)之為3地址機(jī)器。

基于堆棧的CPU或虛擬機(jī)沒(méi)有臨時(shí)變量、寄存器的概念,所有的東西都放入堆棧。由于指令中不需要指定操作數(shù),所以其指令相對(duì)基于寄存器的要短。也因此相對(duì)簡(jiǎn)單,在嵌入式系統(tǒng)中運(yùn)用較多。用于保護(hù)代碼,我們也選擇這種。

舉例,譬如指令add,基于堆棧的CPU首先從堆棧里Pop兩個(gè)數(shù),然后將兩數(shù)相加,再把和Push到堆棧。Add指令只占用1個(gè)字節(jié)。而基于寄存器的CPU對(duì)應(yīng)指令為 add Reg1,Reg2,需要3個(gè)字節(jié)。請(qǐng)仔細(xì)想象一下沒(méi)有寄存器的CPU,它的指令是怎樣的,該會(huì)是多么簡(jiǎn)潔。當(dāng)然,指令簡(jiǎn)潔帶來(lái)的缺點(diǎn)就是效率低下。

我們這里談的虛擬機(jī)保護(hù)技術(shù),就是把基于寄存器的CPU代碼,改造成基于堆棧的CPU的偽代碼。然后再由基于堆棧的虛擬機(jī)(CPU)對(duì)偽代碼解釋執(zhí)行。

**** 指令系統(tǒng)

關(guān)鍵在于設(shè)計(jì)一個(gè)虛擬的基于堆棧的虛擬機(jī)(CPU)的指令系統(tǒng)。這個(gè)指令系統(tǒng)越簡(jiǎn)潔,復(fù)用性越高越好。

還是以add 指令為例。X86系列CPU的add指令有許多格式,譬如:add reg,imm 、add reg,reg、add reg,mem、add mem,reg等等。而基于堆棧的虛擬機(jī)CPU則沒(méi)有這么多花樣,就一個(gè)單單的add指令,參數(shù)和返回都是在堆棧里。

我們需要為我們的虛擬機(jī)CPU模擬實(shí)現(xiàn)這樣的add命令:

圖片

而原有的add命令的參數(shù),我們需要翻譯為 push 命令 。根據(jù)push 的對(duì)象不同,需要不同的實(shí)現(xiàn):

圖片

有Push指令了,也得有Pop指令:

圖片

基于堆棧的虛擬機(jī)指令系統(tǒng)就是這樣簡(jiǎn)單的:?jiǎn)巫止?jié)的動(dòng)作指令(譬如add、dec),以及各式各樣的push、pop等堆棧操作指令。沒(méi)有復(fù)雜的寄存器與內(nèi)存操作。我們需要把x86的CPU指令翻譯成虛擬機(jī)CPU的指令,譬如:

圖片

Call指令相對(duì)麻煩一點(diǎn),因?yàn)镃all的函數(shù)未必是虛擬機(jī)的偽代碼了。所以碰到Call指令,就要退出虛擬機(jī),交由真實(shí)的CPU去處理了。代碼類(lèi)似下面:

圖片

圖片

其余,要注意標(biāo)志位的處理、不可模擬指令,以及指令的優(yōu)化。還有異常處理,這里就不展開(kāi)了。

VStartVM是虛擬機(jī)的入口,負(fù)責(zé)保存運(yùn)行環(huán)境(各個(gè)寄存器的值)、以及初始化堆棧(虛擬機(jī)使用的變量全部在堆棧中)。

Bytecode是偽代碼;VMDispatcher對(duì)偽代碼逐個(gè)閱讀處理,然后分發(fā)給下面的各個(gè)子程序(Handler)。

加殼程序先把已知的X86指令解釋成了字節(jié)碼,放在PE文件中,然后將原處代碼刪掉,改成類(lèi)似的代碼進(jìn)入虛擬機(jī)執(zhí)行循環(huán)。

圖片

VStartVM初始化后,堆棧情形如下:

圖片

edi指向VMcontext;esi指向偽代碼的地址;ebp指向真實(shí)堆棧的棧頂; 這三個(gè)寄存器在VM內(nèi)不要再改了。

VMContext是虛擬機(jī)VM使用的虛擬環(huán)境結(jié)構(gòu):

圖片

VM之所以使用堆棧保存自己的寄存器結(jié)構(gòu),是考慮到多線(xiàn)程程序的兼容。

大家都知道脫殼時(shí)的堆棧平衡原理吧。同樣的,虛擬機(jī)在執(zhí)行翻譯后的程序代碼時(shí),也不可以隨便變動(dòng)原來(lái)的堆棧地址。還需經(jīng)常檢查在堆棧中的VMcontext結(jié)構(gòu)不被沖掉。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器
    +關(guān)注

    關(guān)注

    0

    文章

    772

    瀏覽量

    40637
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67771
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    888

    瀏覽量

    27815
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是虛擬機(jī)虛擬機(jī)真的那么好用嗎?

    在日新月異的科技世界中,虛擬技術(shù)如同一座橋梁,連接著現(xiàn)實(shí)與數(shù)字的鴻溝,為我們打開(kāi)了全新的計(jì)算維度。虛擬機(jī),這一概念,自其誕生以來(lái),就以其獨(dú)特的魅力和強(qiáng)大的功能,深深地影響了軟件開(kāi)發(fā)、系統(tǒng)測(cè)試和云
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機(jī)</b>?<b class='flag-5'>虛擬機(jī)</b>真的那么好用嗎?

    有關(guān)虛擬機(jī)虛擬技術(shù)的幾點(diǎn)詮注

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 06-22 18:04 ?36次下載

    虛擬機(jī)虛擬技術(shù)

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    基于虛擬機(jī)技術(shù)的DSC仿真系統(tǒng)設(shè)計(jì)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 12-03 17:26 ?26次下載
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DSC仿真系統(tǒng)設(shè)計(jì)

    基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 01-16 15:04 ?2049次閱讀
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    虛擬機(jī)軟件保護(hù)方法

    軟件核心算法防逆向保護(hù),是軟件研發(fā)乃至軟件產(chǎn)業(yè)發(fā)展的迫切需求,也是當(dāng)前軟件安全研究領(lǐng)域的熱點(diǎn)之一.虛擬機(jī)軟件保護(hù)作為一種保護(hù)強(qiáng)度高、商業(yè)應(yīng)用廣的技術(shù)
    發(fā)表于 01-31 16:31 ?0次下載

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線(xiàn)網(wǎng)絡(luò)通訊設(shè)置

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線(xiàn)網(wǎng)絡(luò)通訊設(shè)置
    的頭像 發(fā)表于 06-22 10:19 ?5289次閱讀
    <b class='flag-5'>虛擬機(jī)</b>:QEMU<b class='flag-5'>虛擬機(jī)</b>和主機(jī)無(wú)線(xiàn)網(wǎng)絡(luò)通訊設(shè)置

    基于復(fù)制技術(shù)虛擬機(jī)容災(zāi)方案

    現(xiàn)在各個(gè)大企業(yè)的計(jì)算虛擬化程度都很高了,因此,很多關(guān)鍵的業(yè)務(wù),如Oracle數(shù)據(jù)庫(kù)都跑在虛擬機(jī)上,特別是VMware虛擬機(jī)上。但是,虛擬機(jī)上的數(shù)據(jù)
    的頭像 發(fā)表于 10-21 11:29 ?3446次閱讀
    基于復(fù)制<b class='flag-5'>技術(shù)</b>的<b class='flag-5'>虛擬機(jī)</b>容災(zāi)方案

    KVM虛擬機(jī)管理和基本使用

    KVM — 全稱(chēng)是基于內(nèi)核的虛擬機(jī)(Kernel-based Virtual Machine)是一個(gè)開(kāi)源軟件,基于內(nèi)核的虛擬技術(shù),實(shí)際是嵌入系統(tǒng)的一個(gè)虛擬化模塊,通過(guò)優(yōu)化內(nèi)核來(lái)使用
    的頭像 發(fā)表于 02-07 09:20 ?1105次閱讀

    虛擬機(jī)技術(shù)合集1

    惡意代碼編寫(xiě)者經(jīng)常使用反虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在虛擬機(jī)中運(yùn)行,它會(huì)執(zhí)行與其本身行
    的頭像 發(fā)表于 02-14 13:45 ?1160次閱讀

    虛擬機(jī)技術(shù)合集2

    惡意代碼編寫(xiě)者經(jīng)常使用反虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在虛擬機(jī)中運(yùn)行,它會(huì)執(zhí)行與其本身行
    的頭像 發(fā)表于 02-14 13:45 ?596次閱讀
    反<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>合集2

    虛擬機(jī)技術(shù)合集3

    惡意代碼編寫(xiě)者經(jīng)常使用反虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在虛擬機(jī)中運(yùn)行,它會(huì)執(zhí)行與其本身行
    的頭像 發(fā)表于 02-14 13:45 ?562次閱讀
    反<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>合集3

    虛擬機(jī)技術(shù)合集4

    惡意代碼編寫(xiě)者經(jīng)常使用反虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在虛擬機(jī)中運(yùn)行,它會(huì)執(zhí)行與其本身行
    的頭像 發(fā)表于 02-14 13:46 ?926次閱讀
    反<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>合集4

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬技術(shù),它們?cè)趯?shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會(huì)詳細(xì)介紹它們的區(qū)別。 一、實(shí)現(xiàn)方式 1.1 虛擬機(jī)
    的頭像 發(fā)表于 11-23 09:37 ?6821次閱讀

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)? 虛擬機(jī)(Virtual Machine)是運(yùn)行在物理機(jī)(Host Machine)上的虛擬操作系統(tǒng)環(huán)境。在虛擬機(jī)
    的頭像 發(fā)表于 12-27 16:51 ?794次閱讀