版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、在當今信息安全領(lǐng)域,特別是惡意軟件分析中,經(jīng)常需要利用到虛擬機技術(shù),以提高病毒分析過程的安全性以及硬件資源的節(jié)約性,因此它在惡意軟件領(lǐng)域中是應用越來越來廣泛。這里我們所謂的虛擬機(VirtualMachine)是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。通過虛擬機軟件(比如VMwareVirtualPC,VirtualBox),你可以在一臺物理計算機上模擬出一臺或多臺虛擬的計算機,這些虛擬機完全就像真正的計算機那樣進行工作,例如你可以安裝操作系統(tǒng)、安裝應用程序、訪問網(wǎng)絡(luò)資源等等。攻擊者為了提高惡意程序的隱蔽性以及破壞真實主機的成功率,他們都在惡意程序中加
2、入檢測虛擬機的代碼,以判斷程序所處的運行環(huán)境。當發(fā)現(xiàn)程序處于虛擬機(特別是蜜罐系統(tǒng))中時,它就會改變操作行為或者中斷執(zhí)行,以此提高反病毒人員分析惡意軟件行為的難度。本文主要針對基于IntelCPU的虛擬環(huán)境VMware中的WindowsXPSP3系統(tǒng)進行檢測分析,并列舉出當前常見的幾種虛擬機檢測方法。方法一:通過執(zhí)行特權(quán)指令來檢測虛擬機Vmware為真主機與虛擬機之間提供了相互溝通的通訊機制,它使用“IN指令來讀取特定端口的數(shù)據(jù)以進行兩機通訊,但由于IN指令屬于特權(quán)指令,在處于保護模式下的真機上執(zhí)行此指令時,除非權(quán)限允許,否則將會觸發(fā)類型為“EXCEPTION_PRIV_INSTRUCfION
3、異常,而在虛擬機中并不會發(fā)生異常,在指定功能號0A(獲取VMware扳本)的情況下,它會在EBX中返回其版本號“VMXH;而當功能號為0x14時,可用于獲取VMware內(nèi)存大小,當大于0時則說明處于虛擬機中。VMDetect正是利用前一種方法來檢測VMware的存在,其檢測代碼分析如下:代碼:boolIsInsideVMWare()boolrc=true;_try_asmpushedxpushecxpushebxmoveax,'VMXh'movebx,0/將ebx設(shè)置為非幻數(shù)VMXH的其它值movecx,10/指定功能號,用于獲取VMWareg本,當它為0x14時用于獲取VMw
4、are內(nèi)存大小movedx,'VX'/端口號ineax,dx/從端口dx讀取VMware版本到eax/若上面指定功能號為0x14時,可通過判斷eax中的值是否大于0,若是則說明處于虛擬機中cmpebx,'VMXh'/判斷ebx中是否包含VMware版本VMXh,若是則在虛擬機中setzrc/設(shè)置返回值popebxpopecxpopedx_except(EXCEPTION_EXECUTE_HANDLER)如展未處于VMware中,貝U觸發(fā)止匕異常rc=false;returnrc;測試結(jié)果:圖1如圖1所示,VMDetect成功檢測出VMWa®勺存在。方法
5、二:利用IDT基址檢測虛擬機利用IDT基址檢測虛擬機的方法是一種通用方式,對VMware和VirtualPC均適用。中斷描述符表IDT(InterruptDescriptorTable)用于查找處理中斷時所用的軟件函數(shù),它是一個由256項組成的數(shù)據(jù),其中每一中斷對應一項函數(shù)。為了讀取IDT基址,我們需要通過SIDT指令來讀取IDTR(中斷描述符表寄存器,用于IDT在內(nèi)存中的基址),SIDT指令是以如下格式來存儲IDTR的內(nèi)容:代碼:typedefstructWORDIDTLimit;/IDT的大小WORDLowIDTbase;/IDT的低位地址WORDHiIDTbase;/IDT的高位地址ID
6、TINFO;由于只存在一個IDTR,但又存在兩個操作系統(tǒng),即虛擬機系統(tǒng)和真主機系統(tǒng)。為了防止發(fā)生沖突,VMM虛擬機監(jiān)控器)必須更改虛擬機中的IDT地址,利用真主機與虛擬機環(huán)境中執(zhí)行sidt指令的差異即可用于檢測虛擬機是否存在。著名的“紅丸”(redpill)正是利用此原理來檢測VMware的。Redpill作者在VMware上發(fā)現(xiàn)虛擬機系統(tǒng)上的IDT地址通常位于0xFFXXXXXX而VirtualPC通常位于0xE8XXXXXX而在真實主機上正如圖2所示都位于0x80xxxxxx。Redpill僅僅是通過判斷執(zhí)行SIDT指令后返回的第一字節(jié)是否大于0xD0,若是則說明它處于虛擬機,否則處于真實
7、主機中。Redpill的源碼甚是精簡,源碼分析如下:代碼:#include<stdio.h>intmain()unsignedcharm2+4,rpill="x0fx01x0dx00x00x00x00xc3"/相當于SIDTadrr,其中addr用于保存IDT地址*(unsigned*)&rpill3)=(unsigned)m;/的addr設(shè)為m的地址(void(*)()&rpill)();/取后IDT地址保存在數(shù)組m中printf("idtbase:%#xn",*(unsigned*)&m2);/為IDT大小,因此從
8、m2開始即為IDT地址if(m5>0xd0)printf("InsideMatrix!n",m5);/于0xd0xxxxxx時則說明程序處于VMware中elseprintf("NotinMatrix.n");return0;將sidtaddr中執(zhí)行SIDT指令,并將讀由于前2字節(jié)當IDT基址大測試結(jié)果如圖2所示:Wndov/sXPSP3-VW胃arA'orsstatiGrf件F;扁薛E,直言;門苗”訊W;T用包口,一幫的口口回:餞豌E力二回引圃向/M翳I;J;WindowsXP5P3起始頁X圖2利用此IDT檢測的方法存在一個缺陷,由于ID
9、T的值只針對處于正在運行的處理器而言,在單CPlfr它是個常量,但當它處于多CPLW就可能會受到影響了,因為每個CPU?有其自己的IDT,這樣問題就自然而然的產(chǎn)生了。針對此問題,OffensiveComputing組織成員提出了兩種應對方法,其中一種方法就是利用Redpill反復地在系統(tǒng)上循環(huán)執(zhí)行任務,以此構(gòu)造出一張當前系統(tǒng)的IDT值變化統(tǒng)計圖,但這會增加CPU負擔;另一種方法就是windowsAPI函數(shù)SetThreadAffinityMask()將線程限制在單處理器上執(zhí)行,當執(zhí)行此測試時只能準確地將線程執(zhí)行環(huán)境限制在本地處理器,而對于將線程限制在VM處理器上就可能行不通了,因為VM是計劃在
10、各處理器上運行的,VM線程在不同的處理器上執(zhí)行時,IDT值將會發(fā)生變化,因此此方法也是很少被使用的。為此,有人提出了使用LDT的檢測方法,它在具有多個CPU勺環(huán)境下檢測虛擬機明顯優(yōu)于IDT檢測方法,該方法具體內(nèi)容參見下節(jié)內(nèi)容。方法三:利用LDT和GDT勺檢測方法在Intel?64andIA-32ArchitectureSoftwareDeveloper'sManualVolume3A:SystemProgrammingGuide»第二章的Vol.32-5一頁(我的Intel開發(fā)手冊是2008版的)中對于LDT和GDT勺描述如下(以下內(nèi)容為個人翻譯):在保護模式下,所有的內(nèi)存訪
11、問都要通過全局描述符表(GDT或者本地描述符表(LDR才能進行。這些表包含有段描述符的調(diào)用入口。各個段描述符都包含有各段的基址,訪問權(quán)限,類型和使用信息,而且每個段描述符都擁有一個與之相匹配的段選擇子,各個段選擇子都為軟件程序提供一個GD俄LDT索引(與之相關(guān)聯(lián)的段描述符偏移量),一個全局/本地標志(決定段選擇子是指向GDT®是LDT),以及訪問權(quán)限信息。若想訪問段中的某一字節(jié),必須同時提供一個段選擇子和一個偏移量。段選擇子為段提供可訪問的段描述符地址(在GDT或者LDT中)。通過段描述符,處理器從中獲取段在線性地址空間里的基址,而偏移量用于確定字節(jié)地址相對基址的位置。假定處理器在當
12、前權(quán)限級別(CPD可訪問這個段,那么通過這種機制就可以訪問在GDT或LDT中的各種有效代碼、數(shù)據(jù)或者堆棧段,這里的CPL是指當前可執(zhí)行代碼段的保護級別。GDT的線性基址被保存在GDTW存器(GDTR中,而LDT的線性基址被保存在LDT寄存器(LDTR中。由于虛擬機與真實主機中的GDTF口LDT并不能相同,這與使用IDT的檢測方法一樣,因此虛擬機必須為它們提供一個“復制體”。關(guān)于GDTf口LDT的基址可通過SGDTF口SLDT指令獲取。虛擬機檢測工具Scoopysuite的作者TobiasKlein經(jīng)測試發(fā)現(xiàn),當LDT基址位于0x0000(只有兩字節(jié))時為真實主機,否則為虛擬機,而當GDT1址位
13、于0xFFXXXXXM說明處于虛擬機中,否則為真實主機。具體實現(xiàn)代碼如下:代碼:#include<stdio.h>voidLDTDetect(void)unsignedshortldt_addr=0;unsignedcharldtr2;_asmsldtldtrldt_addr=*(unsignedshort*)&ldtr);printf("LDTBaseAddr:0x%xn",ldt_addr);if(ldt_addr=0x0000)printf("NativeOSn");elseprintf("InsideVMwaren&
14、quot;);voidGDTDetect(void)unsignedintgdt_addr=0;unsignedchargdtr4;_asmsgdtgdtrgdt_addr=*(unsignedint*)&gdtr2);printf("GDTBaseAddr:0x%xn",gdt_addr);if(gdt_addr>>24)=0xff)printf("InsideVMwaren");elseprintf("NativeOSn");intmain(void)LDTDetect();GDTDetect();return
15、0;測試結(jié)果如圖3所示:Mnda昨XP-VMware冒口出坨行口門文件扁向正,亙管J員iMHAh亍且口口應畛三髓幽的1EHad方法四:基于STR的檢測方法在保護模式下運行的所有程序在切換任務時,對于當前任務中指向TSS的段選擇器將會被存儲在任務寄存器中,TSS中包含有當前任務的可執(zhí)行環(huán)境狀態(tài),包括通用寄存器狀態(tài),段寄存器狀態(tài),標志寄存器狀態(tài),EIP寄存器狀態(tài)等等,當此項任務再次被執(zhí)行時,處理器就會其原先保存的任務狀態(tài)。每項任務均有其自己的TSS,而我們可以通過STR指令來獲取指向當前任務中TSS的段選擇器。這里STR(Storetaskregister)指令是用于將任務寄存器(TR)中的段選擇
16、器存儲到目標操作數(shù),目標操作數(shù)可以是通用寄存器或內(nèi)存位置,使用此指令存儲的段選擇器指向當前正在運行的任務的任務狀態(tài)段(TSS)o在虛擬機和真實主機之中,通過STR讀取的地址是不同的,當?shù)刂返扔?x0040xxxx時,說明處于虛擬機中,否則為真實主機。實現(xiàn)代碼如下:代碼:#include<stdio.h>intmain(void)測試結(jié)unsignedcharmem4=0;inti;_asmstrmem;printf("STRbase:0x");for(i=0;i<4;i+)printf("%02x",memi);if(mem0=
17、0x00)&&(mem1=0x40)printf("nINSIDEMATRIX!n");elseprintf("nNativeOS!n");return0;果如圖4所示:“WindowsXPSF3-Workstation:1五在舊品科E:,直音g聞郎VM分源SD(VJ嘉助(H)130回股E0血睜也直回0.史:I售起將頁XWindowsXP5P3M命令提示符C:XDocutmentsan口5型吐汨9工21(1105:1£r戶員仁01!1里面郵曲18匚上STHbase:0x00400600,NSIDEMAIBIK!*G;xD
18、ocumentsand阱超圖4方法五:基于注冊表檢測虛擬機在windows虛擬機中常常安裝有VMwareTools以及其它的虛擬硬件(如網(wǎng)絡(luò)適配器、虛擬打印機,USBft線器,,),它們都會創(chuàng)建任何程序者B可以讀取的windows注冊表項,因此我們可以通過檢測注冊表中的一些關(guān)鍵字符來判斷程序是否處于虛擬機之中。關(guān)于這些注冊表的位置我們可以通過在注冊表中搜索關(guān)鍵詞“vmwar3'來獲取,下面是我在VMware下的WinXP中找到的一些注冊表項:項名:HKEY_CLASSES_ROOTApplicationsVMwareHostOpen.exe項名:HKEY_CLASSES_ROOTIns
19、tallerProductsC2A6F2EFE6910124c940B2B12CF170FEProductName鍵值“VMwareTools”項名:HKEY_CLASSES_ROOTInstallerProductsC2A6F2EFE6910124c940B2B12CF170FESourceListPackageName鍵值:VMwareTools.msi項名:HKEY_CURRENT_USERPrintersDeviceOld鍵值:_#VMwareVirtualPrinter,winspool,TPVM:項名:HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPScsiS
20、csiPort0ScsiBus0TargetId0LogicalUnitId0Identifier鍵值:VMwareVirtualIDEHardDrive項名:HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPScsiScsiPort1ScsiBus0TargetId0LogicalUnitId0Identifier鍵值:NECVMWarVMwareIDECDR10項名:HKEY_LOCAL_MACHINESOFTWAREClassesInstallerProductsC2A6F2EFE6910124C940B2B12CF170FEProductName鍵值:VMwareT
21、ools項名:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18ProductsC2A6F2EFE6910124c940B2B12CF170FEInstallPropertiesDisplayName鍵值:VMwareTools項名:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionReinstall0002DeviceDesc鍵值:VMwareSVGAII項名:HKEY_LOCAL_MACHINESOFTWAREMicr
22、osoftWindowsNTCurrentVersionNetworkCards2Description鍵值:VMwareAcceleratedAMDPCNetAdapter項名:HKEY_LOCAL_MACHINESOFTWAREVMware,Inc.VMwareTools項名:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlClass4D36E968-E325-11CE-BFC1-08002BE103180000DriverDesc鍵值:VMwareSVGAII項名:HKEY_LOCAL_MACHINESYSTEMControlSet001Contr
23、olClass4D36E968-E325-11CE-BFC1-08002BE103180000ProviderName鍵值:VMware,Inc.項名:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlClass4D36E972-E325-11CE-BFC1-08002bE103180001DriverDesc鍵值:VMwareAcceleratedAMDPCNetAdapter項名:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlClass4D36E97B-E325-11CE-BFC1-08002BE1031800
24、00DriverDesc鍵值:VMwareSCSIController項名:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlPrintMonitorsThinPrintPrintPortMonitorforVMWare補充另外一處具體代碼如下:cppviewplaincopy1. BOOLDetectVM()2.3. HKEYhKey;4.5. charszBuffer64;6.7. unsignedlonghSize=sizeof(szBuffer)-1;8.9. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HAR
25、DWAREDESCRIPTIONSystemBIOS",0,KEY_READ,&hKey)=ERROR_SUCCESS)10.11. RegQueryValueEx(hKey,"SystemManufacturer",NULL,NULL,(unsignedchar*)szBuffer,&hSize);12.13. if(strstr(szBuffer,"VMWARE")14.15. RegCloseKey(hKey);16.17. returnTRUE;19.20.21. RegCloseKey(hKey);22.23. 24.
26、25. returnFALSE;26.27. 除以上這些表項之外,還有很多地方可以檢測,特別是虛擬機提供的虛擬化軟硬件、服務之類,比如文件共享服務,VMware物理磁盤助手服務,VMwareEthernetAdapterDriver,VMwareSCSIController等等的這些信息都可作為檢測虛擬機的手段。這里我們就以其中某表項為例編程舉例一下,其它表項檢測方法同理,具體代碼如下:代碼:.386.modelflat,stdcalloptioncasemap:noneincludewindows.incincludeuser32.incincludekernel32.incincludea
27、dvapi32.incincludelibuser32.libincludelibkernel32.libincludelibadvapi32.lib.dataszCaptiondb"VMwareDetector",0szInsidedb"InsideVMware!",0szOutsidedb"NativeOS!",0szSubKeydb"softwareVMWare,Inc.VMwaretools",0hKeydd?.codestart:invokeRegOpenKeyEx,HKEY_LOCAL_MACHINE,
28、addrszSubKey,0,KEY_WRITEorKEY_READ,addrhKey.ifeax=ERROR_SUCCESSinvokeMessageBox,NULL,addrszInside,addrszCaption,MB_OK.elseinvokeMessageBox,NULL,addrszOutside,addrszCaption,MB_OK.endifinvokeRegCloseKey,hKeyinvokeExitProcess,NULLendstart測試結(jié)果如圖5所示:方法六:基于時間差的檢測方式本方法通過運行一段特定代碼,然后比較這段代碼在虛擬機和真實主機之中的相對運行時間,
29、以此來判斷是否處于虛擬機之中。這段代碼我們可以通過RDTSC旨令來實現(xiàn),RDTSC旨令是用于將計算機啟動以來的CPU!行周期數(shù)存放到EDXEAX里面,其中EDX是高位,而EAX是低位。下面我們以xchgecx,eax一句指令的運行時間為例,這段指令在我的真實主機windows7系統(tǒng)上的運行時間為0000001E,如圖6所示:查看有關(guān)計算機的基本信息V/indcws率Window7瞪"粒而該指令在虛擬機WinXP下的運行時間為00000442,如圖7所示:I.一-型Wind6y“片Wnk圖7兩者之間的運行時間明顯差別很多,在虛擬機中的運行速度遠不如真實主機的,一般情況下,當它的運行時間
30、大于0xFF時,就可以確定它處于虛擬機之中了,因此不難寫出檢測程序,具體實現(xiàn)代碼如下:代碼:.586p.modelflat,stdcalloptioncasemap:noneincludewindows.incincludekernel32.incincludeuser32.incincludelibkernel32.libincludelibuser32.lib.dataszTitledb"VMDetectWithRDTSC",0hszInsideVMdb"InsideVMware!",0hszOutsideVMdb"NativeOS!&qu
31、ot;,0h.codestart:RDTSCxchgecx,eaxRDTSCsubeax,ecxcmpeax,0FFhjgDetectedinvokeMessageBox,0,offsetszOutsideVM,offsetszTitle,0retDetected:invokeMessageBox,0,offsetszInsideVM,offsetszTitle,0retendstart9g結(jié)果如圖8所示:|>V;ndcsXP號P3-7Mware'AZprlcstati文件舊嗝宿正,直香疔rgll»Kl'M:盒起始頁x叩應國電®0:反WindowsXP
32、SP31VIPetcctlithEDTSC僅InsideVMware!確定|方法七:利用虛擬硬件指紋檢測虛擬機利用虛擬硬件指紋也可用于檢測虛擬機的存在,比如VMware默認的網(wǎng)卡MAC地址前綴為“00-05-69,00-0C-29或者00-50-56”,這前3節(jié)是由VMware分配的唯一標識符OUI,以供它的虛擬化適配器使用。在我的VMWareWinX不的MAO址為00-0C-29-5B-D7-67,如圖9所示:件f,品粗舊亙哥1度nqz/月國口。幫助h圖9但由于這些可經(jīng)過修改配置文件來繞過檢測。另外,還可通過檢測特定的硬件控制器,BIOS,USBS制器,顯卡,網(wǎng)卡等特征字符串進行檢測,這些在
33、前面使用注冊表檢測方法中已有所涉及。另外之前在看雪論壇上也有朋友提到通過檢測硬盤ModelNumber是否含有“vmware'或"virtual”等字樣來實現(xiàn)檢測虛擬機的功能,具體轉(zhuǎn)載如下:cppviewplaincopy1. 小試antivmware2. 今天偶然看到一款綠色版的硬盤專業(yè)工具,突然發(fā)現(xiàn)可以利用其中的一項功能來實現(xiàn)antivmware。3. 今日事今日畢,那就在今晚12:00之前把這個想法實現(xiàn)吧,let'sgo!4. 我的想法就是檢測硬盤的modelnumber,具體什么是modelnumber自己網(wǎng)上搜吧,反正不是硬盤序列號。難點就是在多種操作系統(tǒng)下
34、都要能起到antivmware的效果。程序在xp、2k、2003下都可以檢測到vmware的運行。5. 直接貼代碼了,如果看不懂也沒關(guān)系,我也是逆了人家的代碼寫出來的。Delphi也可以當匯編語言開發(fā)工具用,難道不是嗎?6. unitUnit1;7. interface8. uses9. Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,10. Dialogs,StdCtrls,Buttons;11. type12. TForm1=class(TForm)13. BitBtnl:TBitBtn;14. proc
35、edureBitBtn1Click(Sender:TObject);15. procedureFormClose(Sender:TObject;varAction:TCloseAction);16. private17. Privatedeclarations18. public19. Publicdeclarations20. end;21.22. var23. Form1:TForm1;24. hDeviceHandle:Thandle;25.26. implementation27.28. $R*.dfm29.30. procedureTForm1.BitBtn1Click(Sender
36、:TObject);31. var32. InBuffer:array0.$8fofbyte;33. cb:Cardinal;34. tmp:Pchar;35. begin36. hDeviceHandle:=CreateFile('.PHYSICALDRIVE0',$C0000000,$3,nil,OPEN_EXISTING,$8000000,0);37. ZeroMemory(InBuffer,sizeof(InBuffer);38. asm39. pushad40. leaebx,InBuffer41. xorecx,ecx42. moval,$2c43. MOVebx,
37、al44. MOVEAX,$200c000045. MOVebx+4,eax46. moval,$0147. MOVebx+8,al48. moval,$4049. MOVebx+$c,al50. MOVEAX,$0001a5E051. MOVebx+$10,eax52. moval,$3053. MOVebx+$18,al54. moval,$1255. MOVebx+$1c,al56. moval,$4057. MOVebx+$20,al58. addecx,ebx59. addecx,$5060. MOVebx+$14,ecx61. popad62. end;63.64.65. ifDe
38、viceIoControl(hDeviceHandle,$4D014,InBuffer,$50,InBuffer,$50,cb,nil)then66. begin67. asm68. pushad69. leaebx,InBuffer70. addebx,$5871. movtmp,ebx72. popad73. end;/asm74.75. if(pos('vmware',LowerCase(tmp)>0)or(pos('virtual',LowerCase(tmp)>0)then76. showmessage('檢測到VMwareWork
39、station!')77. else78. showmessage('請在VMware中測試!');79.80. end;81. end;82.83. procedureTForm1.FormClose(Sender:TObject;varAction:TCloseAction);84. begin85. closehandle(hDeviceHandle);86. end;87.88. end.89.90. 代碼很短,但是效果不錯。截圖幾張,留作紀念!C+代碼實現(xiàn)如下:cppviewplaincopy1.通過IOCTL_STORAGE_QUERY_PROPERTY3.
40、 typedefenum_STORAGE_QUERY_TYPEPropertyStandardQuery=0,PropertyExistsQuery,PropertyMaskQuery,PropertyQueryMaxDefinedSTORAGE_QUERY_TYPE,*PSTORAGE_QUERY_TYPE;4.5. typedefenum_STORAGE_PROPERTY_IDStorageDeviceProperty=0,StorageAdapterPropertySTORAGE_PROPERTY_ID,*PSTORAGE_PROPERTY_ID;6.7. typedefstruct_S
41、TORAGE_PROPERTY_QUERY8.9. STORAGE_PROPERTY_IDPropertyId;10.11. STORAGE_QUERY_TYPEQueryType;12.13. UCHARAdditionalParameters1;7. STORAGE_PROPERTY_QUERY,*PSTORAGE_PROPERTY_QUERY;18.19. typedefstruct_STORAGE_DEVICE_DESCRIPTOR20.21. ULONGVersion;22.23. ULONGSize;24.25. UCHARDeviceType;26.27. U
42、CHARDeviceTypeModifier;28.29. BOOLEANRemovableMedia;30.31. BOOLEANCommandQueueing;32.33. ULONGVendorIdOffset;34.35. ULONGProductIdOffset;36.37. STORAGE_DEVICE_DESCRIPTOR,*PSTORAGE_DEVICE_DESCRIPTOR;1. #defineIOCTL_STORAGE_QUERY_PROPERTYCTL_CODE(IOCTL_STORAGE_BASE,0x0500,METHOD_BUFFERED,FIL
43、E_ANY_ACCESS)5. boolIsSandboxed()46.47.(HANDLEhPhysicalDriveIOCTL=0;intj=0,k=0;charszModel128,szBuffer128;char*szDrives口="qemu","virtual","vmware",NULL;hPhysicalDriveIOCTL=CreateFile(".Physica
44、lDrive0”,0,FILE_SHARE.READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);70.71. if(hPhysicalDriveIOCTL!=INVALID_HANDLE_VALUE)72.73. 74.75. STORAGE_PROPERTY_QUERYquery;76.77. DWORDcbBytesReturned=0;78.79. memset(void*)&query,0,sizeof(query);80.81. query.PropertyId=StorageDeviceProperty;82.83. memse
45、t(szBuffer,0,sizeof(szBuffer);84.85. memset(szModel,0,sizeof(szModel);86.87. if(DeviceIoControl(hPhysicalDriveIOCTL,IOCTL_STORAGE_QUERY_PROPERTY,&query,sizeof(query),&szBuffer,sizeof(szBuffer),&cbBytesReturned,NULL)88.89. STORAGE_DEVICE_DESCRIPTOR*descrip=(STORAGE_DEVICE_DESCRIPTOR*)&
46、;szBuffer;90.91. intpos=descrip->ProductIdOffset;92.93. intm=0;94.95. for(intg=pos;szBufferg!='0'g+)96.97. szModelm+=szBufferg;98.99. 100.101. CharLowerBuff(szModel,strlen(szModel);102.103. for(inti=0;i<(sizeof(szDrives)/sizeof(LPSTR)-1;i+)104.105. if(szDrivesi0!=0)106.107. if(strstr(s
47、zModel,szDrivesi)108.109. returnTRUE;110.111. 112.113. 114.115. 116.117. CloseHandle(hPhysicalDriveIOCTL);118.119. 120.121. returnFALSE;122.總結(jié)國外SAN做全組織的研究人員總結(jié)出當前各種虛擬機檢測手段不外乎以下四類:搜索虛擬環(huán)境中的進程,文件系統(tǒng),注冊表; 搜索虛擬環(huán)境中的內(nèi)存 搜索虛擬環(huán)境中的特定虛擬硬件 搜索虛擬環(huán)境中的特定處理器指令和功能因為現(xiàn)代計算系統(tǒng)大多是由文件系統(tǒng),內(nèi)存,處理器及各種硬件組件構(gòu)成的,上面提到的四種檢測手段均包含了這些因素。縱觀前
48、面各種檢測方法,也均在此四類當中。除此之外,也有人提出通過網(wǎng)絡(luò)來檢測虛擬機,比如搜索ICMP和TCP數(shù)據(jù)通訊的時間差異,IPID數(shù)據(jù)包差異以及數(shù)據(jù)包中的異常頭信息等等。隨著技術(shù)研究的深入,相信會有更多的檢測手段出現(xiàn),與此同時,虛擬機廠商也會不斷進化它們的產(chǎn)品,以增加anti-vmware的難度,這不也正是一場永無休止的無煙戰(zhàn)爭!antiVM的解決方法對于上邊方法一二三四六的解決方案是:1 .在本機BIOS的CP眼置中開啟VT(虛擬化)選項。注意要先做這一步以后才能安裝VM順序錯了只能把VMBI全卸載重新安裝。2 .新建虛擬機在CP眼置如下圖設(shè)置:主要目的是為了關(guān)閉二進制優(yōu)化開啟虛擬機的VT虛擬
49、化。3 .關(guān)閉一些虛擬機的設(shè)置用記事本打開VMX文件這個文件是VM的配置文件如類似地址"C:VMMachinesWindows7(32位)Windows7(32位).vmx”,在文本末尾加入cppviewplaincopy1. isolation.tools.getPtrLocation.disable="TRUE"2. isolation.tools.setPtrLocation.disable="TRUE"3. isolation.tools.setVersion.disable="TRUE"4. isolation.t
50、ools.getVersion.disable="TRUE"5. monitor_control.disable_directexec="TRUE"6. monitor_control.disable_chksimd="TRUE"7. monitor_control.disable_ntreloc="TRUE"8. monitor_control.disable_selfmod="TRUE"9. monitor_control.disable_reloc="TRUE"10.
51、monitor_control.disable_btinout="TRUE"11. monitor_control.disable_btmemspace="TRUE"12. monitor_control.disable_btpriv="TRUE"13. monitor_control.disable_btseg="TRUE"14. monitor_control.restrict_backdoor="TRUE"這樣一來就實現(xiàn)了開啟VT虛擬化關(guān)閉二進制優(yōu)化關(guān)閉各種后門然后安裝VM中的系統(tǒng)如WIN
52、7安裝好后在VMWIN種運行方法一二三四六的檢測全部通過了。方法七的解決方案就是修改硬件信息,這里的VM特征硬件信息有很多,這里只說網(wǎng)卡的,直接下載一個mac地址修改器,修改mac這樣一來mac地址就不是VM特有的了,從而達到過方法七的效果。方法五,很多商業(yè)軟件都是用這個方法來驗證,原因很簡單不管是在驅(qū)動還是在應用層都可以很方便的讀取注冊表,只要保護開發(fā)人員自己安裝一個VM就能提取里邊特征注冊碼,這個解決方案就是搜索注冊表的“VMware"virtual"等字段,把能修改的都修改了,然后導出注冊表,以便重啟系統(tǒng)后導入,因為重啟VM后有些注冊表信息會還原。實例如下:環(huán)境:VM
53、虛擬機WIN732位,光盤鏡像名稱XBL_GHOST_WIN7_SP1_07ZJB.iso原理:修改注冊表中的“VMware修改為了“test123”注冊表:cppviewplaincopy1. WindowsRegistryEditorVersion5.002.3. HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSystemInformation4. "BIOSVersion"="6.00"5. "BIOSReleaseDate"="07/02/2012"6. "
54、;SystemManufacturer"="test123,Inc."7. "SystemProductName"="test123test123Platform"8. "InformationSource"=dword:000000019.10. HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONSystemBIOS11. "BiosMajorRelease"=dword:0000000412. "BiosMinorRelease"=dwo
55、rd:0000000613. "ECFirmwareMajorRelease"=dword:0000000014. "ECFirmwareMinorRelease"=dword:0000000015. "BaseBoardManufacturer"="IntelCorporation"16. "BaseBoardProduct"="440BXDesktopReferencePlatform"17. "BaseBoardVersion"="None
56、"18. "BIOSReleaseDate"="07/02/2012”19. "BIOSVendor"="PhoenixTechnologiesLTD"20. "BIOSVersion"="6.00"21. "SystemFamily"=""22. "SystemManufacturer"="test123,Inc."23. "SystemProductName"="
57、test123test123Platform"24. "SystemSKU"=""25. "SystemVersion"="None"26.27. HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPScsiScsiPort2ScsiBus0TargetId0LogicalUnitId028. "InquiryData"=hex:00,00,02,02,1f,00,00,73,56,4d,77,61,72,65,2c,20,56,4d,77,61,29. 72,65,
58、20,56,69,72,74,75,61,6c,20,53,31,2e,30,2030. "Identifier"="test123,test123VirtualS1.0"31. "DeviceType"="DiskPeripheral"32.33. HKEY_LOCAL_MACHINESYSTEMControlSet001ControlClass4D36E968-E325-11CE-BFC1-08002BE10318000034. "CoInstallers32"=hex(7):76,00,6
59、d,00,78,00,5f,00,6d,00,6f,00,64,00,65,00,2e,00,35. 64,00,6c,00,6c,00,2c,00,20,00,56,00,4d,00,58,00,5f,00,4d,00,6f,00,64,00,65,36. 00,43,00,68,00,61,00,6e,00,67,00,65,00,00,00,00,0037. "InfPath"="oem2.inf"38. "InfSection"="vmx_svga_vista"39. "ProviderName"="test123,Inc."40. "DriverDateData"=hex:00,80,de,95,e5,e0,ca,0141. "DriverDate"="4-21-2010"42. "DriverVersion"="5"43. "MatchingDeviceId"="pciven_15ad&dev_0405&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中英文設(shè)備維修合同范本(2024版)
- 2025年苗圃地租賃合同模板(含知識產(chǎn)權(quán)保護條款)
- 2025年度二手房交易房地產(chǎn)評估機構(gòu)選擇合同3篇
- 二零二五年度醫(yī)療設(shè)備銷售傭金分紅合同范本3篇
- 二零二五版電子商務知識產(chǎn)權(quán)保護合同簽署4篇
- 二手房購買定金協(xié)議:2024年標準版版B版
- 二零二五版網(wǎng)絡(luò)信息安全技術(shù)服務合同范本2篇
- 2025版新產(chǎn)品發(fā)布宣傳片制作服務協(xié)議2篇
- 2025年度個人之間房屋買賣合同爭議解決條款范本2篇
- 二零二五版月子中心嬰兒早教及產(chǎn)后恢復服務合同2篇
- 光伏自發(fā)自用項目年用電清單和消納計算表
- 量子計算在醫(yī)學圖像處理中的潛力
- 阿里商旅整體差旅解決方案
- 浙江天臺歷史文化名城保護規(guī)劃說明書
- 邏輯思維訓練500題
- 第八講 發(fā)展全過程人民民主PPT習概論2023優(yōu)化版教學課件
- 實體瘤療效評價標準RECIST-1.1版中文
- 企業(yè)新春茶話會PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計算方法
- DIC診治新進展課件
- 公路工程施工現(xiàn)場安全檢查手冊
評論
0/150
提交評論