看雪安全論壇 > Windows平臺 > 『編程技術』
【原創】VT入門---- 閉門造VT [有碼]
用戶名 記住 忘記密碼?
密 碼
KSSD 註冊賬號 搜索論壇 日曆事件 論壇幫助
網監張局
【原創】VT入門---- 閉門造VT [有碼]
--------------------------------------------------------------------------------
標 題: 【原創】VT入門---- 閉門造VT [有碼]
作 者: 網監張局
時 間: 2011-12-24,18:36:53
鏈 接: http://bbs.pediy.com/showthread.php?t=144656
前言
傳說中的VT貌似很神祕的樣子,關於VT入門的資料又很少,於是研究了一番
由於資源有限,自身水平亦有限,並且是閉門造車之作,如有錯誤的地方請指正,不勝感激!
關於VT可以先參考海風月影寫的關於VT調試器http://bbs.pediy.com/showthread.php?t=96122
運行環境
操作系統: windows XP
CPU : intel i3-390M
狀態: 單核運行
驅動沒有卸載部分,測試前請先保存好文檔.在 boot.ini 文件中添加 /numproc=1,重啓
VT簡介
Intel VIrtual Techonlogy , intel 硬件虛擬化技術 ,在硬件級別上完成計算機的虛擬化
爲實現硬件虛擬化 ,VT增加了 12條新的 VMX指令
[VMCS控制 5 條]
VMPTRLD
VMPTRST
VMCLEAR
VMREAD
VMWRITE
[VMX命令 5條]
VMLAUNCH
VMCALL
VMXON
VMXOFF
VMRESUME
[Guest software 2條]
INVEPT
INVVPID
12條指令對應的機器碼(xen-3.4.1\xen\include\asm-x86\hvm\vmx\vmx.h)
代碼中使用 _emit
#define VMCALL_OPCODE ".byte 0x0f,0x01,0xc1\n"
#define VMCLEAR_OPCODE ".byte 0x66,0x0f,0xc7\n" /* reg/opcode: /6 */
#define VMLAUNCH_OPCODE ".byte 0x0f,0x01,0xc2\n"
#define VMPTRLD_OPCODE ".byte 0x0f,0xc7\n" /* reg/opcode: /6 */
#define VMPTRST_OPCODE ".byte 0x0f,0xc7\n" /* reg/opcode: /7 */
#define VMREAD_OPCODE ".byte 0x0f,0x78\n"
#define VMRESUME_OPCODE ".byte 0x0f,0x01,0xc3\n"
#define VMWRITE_OPCODE ".byte 0x0f,0x79\n"
#define INVEPT_OPCODE ".byte 0x66,0x0f,0x38,0x80\n" /* m128,r64/32 */
#define INVVPID_OPCODE ".byte 0x66,0x0f,0x38,0x81\n" /* m128,r64/32 */
#define VMXOFF_OPCODE ".byte 0x0f,0x01,0xc4\n"
#define VMXON_OPCODE ".byte 0xf3,0x0f,0xc7\n"
驅動初在始化一個VMCS (Virtual Machine Control Structures)內存區域後,啓動VMM (Virtual Machine Monitor) ,
得到最高權限從而管理硬件資源, 操作系統是運行於ring0下
VMM要監控管理整個系統的資源,因而VMM的權限是大於操作系統,它處於一個全新的級別ring -1
用一個形象的比喻來講就是:當前操作系統的的“政權”被VMM顛覆了
下面這個圖是: VMM 與Guest OS 的聯繫
下面簡單介紹一下VMM的建立過程,看看“政權”是如何被顛覆的
首先通過CPUID檢查CPU是否支持VT
硬件環境的檢測,通過指令CPUID檢測CPU是否支持VT
ECX的第5個bit標誌代表對 VT 的支持與否
(更多檢測可以看
http://bbs.pediy.com/showthread.php?t=96122
回貼部分)
初始化主要的內存區域
使用VMXON 進入 VMX (虛擬機指令擴展指令集)操作
執行VMXON指令 , EFLAGS.CF 可判斷執行是否成功
__asm
{
PUSH 0
PUSH PhysicalVMXONRegionPtr.LowPart
_emit 0xF3 // VMXON [ESP]
_emit 0x0F
_emit 0xC7
_emit 0x34
_emit 0x24
PUSHFD
POP eFlags
ADD ESP, 8
}
接下來開始初始化VMCS區域,(相當於部署軍隊,準備起義)
這個結構只能夠被VMCLEAR, VMPTRLD, VMREAD,和VMWRITE操作。
VMM運行後guest 執行這些指令時會引發#VMExit事件
VMCS 結構如下圖
VMCS 是一個4K的內存區域
在邏輯上,虛擬機控制結構被劃分爲 6 部分:
1) GUEST-STATE 域:虛擬機從根操作模式進入非根操作模式時,處理器所處的狀態;
2) HOST-STATE 域:虛擬機從非根操作模式退出到根操作模式時,處理器所處的狀態;
3) VM 執行控制域:虛擬機在非根操作模式運行的時候,控制處理器非根操作模式退出到根操作模式;
4) VM 退出控制域:虛擬機從非根操作模式下退出時,需要保存的信息;
5) VM 進入控制域:虛擬機從根操作模式進入非根操作模式時,需要讀取的信息;
6) VM 退出信息域:虛擬機從非根操作模式退出到根操作模式時,將退出的原因保存到該域中。
在這裏初始化的代碼比較多,要初始化 host 與 guest 的 CR0,CR3,CR4,IDTR,GDTR,LDTR,Rflag,SYSENTER_CS,SYSENTER_EIP,SYSENTER_ESP等
初始化時使用VMWRITE 指令設置 , 設置時主要的宏是
GUEST_ES_SELECTOR = 0x00000800,
GUEST_CS_SELECTOR = 0x00000802,
GUEST_SS_SELECTOR = 0x00000804,
GUEST_DS_SELECTOR = 0x00000806,
GUEST_FS_SELECTOR = 0x00000808,
GUEST_GS_SELECTOR = 0x0000080a,
GUEST_LDTR_SELECTOR = 0x0000080c,
GUEST_TR_SELECTOR = 0x0000080e,
HOST_ES_SELECTOR = 0x00000c00,
HOST_CS_SELECTOR = 0x00000c02,
HOST_SS_SELECTOR = 0x00000c04,
HOST_DS_SELECTOR = 0x00000c06,
HOST_FS_SELECTOR = 0x00000c08,
HOST_GS_SELECTOR = 0x00000c0a,
HOST_TR_SELECTOR = 0x00000c0c,
…
使用 VMWRITE 指令集成的函數
VOID WriteVMCS( ULONG encoding, ULONG value )
{
__asm
{
PUSHAD
PUSH value
MOV EAX, encoding
_emit 0x0F
_emit 0x79
_emit 0x04
_emit 0x24
POP EAX
POPAD
}
}
例如初始化 GDT , IDT 使用的是以下代碼
__asm
{
SGDT gdt_reg
}
temp32 = 0;
temp32 = gdt_reg.BaseHi;
temp32 <<= 16;
temp32 |= gdt_reg.BaseLo;
Log( "Setting Host GDTR Base" , temp32 );
WriteVMCS( HOST_GDTR_BASE, temp32 );
__asm
{
SIDT idt_reg
}
temp32 = 0;
temp32 = idt_reg.BaseHi;
temp32 <<= 16;
temp32 |= idt_reg.BaseLo;
Log( "Setting Host IDTR Base" , temp32 );
WriteVMCS( HOST_IDTR_BASE, temp32 );
比較重要的是設置 #VMExit 事件處理入口 HOST_RIP
WriteVMCS( HOST_RIP, (ULONG)VMMEntryPoint ); //0x6C16
最後執行 VMLAUNCH 指令 ,正式啓動虛擬機(建立了新的政權)
__asm
{
_emit 0x0F
_emit 0x01
_emit 0xC2
}
至此,整個VMM的帝國已經運行起來,帝國將會管理整個系統資源
接下來的就是#VMExit的事件循環處理(類似在調試器中下斷點後,等待事件發生)
運行過程中Guest OS 遇到要監控的指令,會發生 #VMExit 事件 (相當於被調試程序執行到中斷事件)
此時由VMM 處理,例如cpuid ,
處理完後由 VMRESUME 繼續執行 (相當於在 OD 中 F9 繼續運行)
#VMExit事件的類型
#VMExit事件分爲二種
1 無條件事件CPUID GETSEC INVD XSETBV 所有 VMX指令
2 有條件事件I/O訪問,中斷事件, MSR寄存器訪問, HTL 等 (要設置VMCS相應部分觸發)
VMM使用VMREAD讀取虛擬機狀態,主要的一些變量有
VM_EXIT_REASON = 0x00004402, //退出代碼
VM_EXIT_INTR_INFO = 0x00004404, //中斷信息
VM_EXIT_INTR_ERROR_CODE = 0x00004406,
IDT_VECTORING_INFO = 0x00004408,
IDT_VECTORING_ERROR_CODE = 0x0000440a,
VM_EXIT_INSTRUCTION_LEN = 0x0000440c, //指令長度
VMX_INSTRUCTION_INFO = 0x0000440e,
GUEST_ES_LIMIT = 0x00004800,
GUEST_CS_LIMIT = 0x00004802,
GUEST_SS_LIMIT = 0x00004804,
GUEST_DS_LIMIT = 0x00004806,
…
其中最重要的就是VM_EXIT_REASON , 可以看作是消息類型
主要的類型有
#define EXIT_REASON_EXCEPTION_NMI 0
#define EXIT_REASON_EXTERNAL_INTERRUPT 1
#define EXIT_REASON_TRIPLE_FAULT 2
#define EXIT_REASON_INIT 3
#define EXIT_REASON_SIPI 4
#define EXIT_REASON_IO_SMI 5
#define EXIT_REASON_OTHER_SMI 6
#define EXIT_REASON_PENDING_VIRT_INTR 7
#define EXIT_REASON_PENDING_VIRT_NMI 8
#define EXIT_REASON_TASK_SWITCH 9
#define EXIT_REASON_CPUID 10
#define EXIT_REASON_HLT 12
#define EXIT_REASON_INVD 13
#define EXIT_REASON_INVLPG 14
#define EXIT_REASON_RDPMC 15
#define EXIT_REASON_RDTSC 16
#define EXIT_REASON_RSM 17
#define EXIT_REASON_VMCALL 18
#define EXIT_REASON_VMCLEAR 19
#define EXIT_REASON_VMLAUNCH 20
#define EXIT_REASON_VMPTRLD 21
#define EXIT_REASON_VMPTRST 22
#define EXIT_REASON_VMREAD 23
#define EXIT_REASON_VMRESUME 24
#define EXIT_REASON_VMWRITE 25
#define EXIT_REASON_VMXOFF 26
#define EXIT_REASON_VMXON 27
…
DWORD VmxRead(DWORD in_code)
{
DWORD m_vmread = 0;
__asm
{
PUSHAD
MOV EAX, in_code
_emit 0x0F // VMREAD EBX, EAX
_emit 0x78
_emit 0xC3
MOV m_vmread, EBX
POPAD
}
return m_vmread;
}
VOID VMMReadGuestState( )
{
HandlerLogging = 0;
ExitReason = VmxRead(VM_EXIT_REASON); //0x4402
ExitInterruptionInformation = VmxRead( VM_EXIT_INTR_INFO); //0x4404
ExitInstructionLength = VmxRead(VM_EXIT_INSTRUCTION_LEN); //0x440c
ExitQualification = VmxRead(EXIT_QUALIFICATION) ; //0x6400
ExitInterruptionInformation = VmxRead(VM_EXIT_INTR_INFO); //0x4404
ExitInterruptionErrorCode = VmxRead(VM_EXIT_INTR_ERROR_CODE); //0x4406
IDTVectoringInformationField = VmxRead(IDT_VECTORING_INFO); //0X00004408 // IDT-Vectoring Information Field
IDTVectoringErrorCode = VmxRead(IDT_VECTORING_ERROR_CODE); //0X0000440A // IDT-Vectoring Error Code
ExitInstructionLength = VmxRead(VM_EXIT_INSTRUCTION_LEN); //0x0000440C // VM-Exit Instruction Length
ExitInstructionInformation = VmxRead(VMX_INSTRUCTION_INFO) ; //0x0000440E //VM-Exit Instruction Information
GuestEIP = VmxRead(GUEST_RIP); //0x0000681E; //GuestEIP
GuestESP = VmxRead(GUEST_RSP); //0x0000681c //esp
GuestCR3 = VmxRead(GUEST_CR3); //0X6802 GuestCR3
}
CPUID指令的攔截與修改
當 guest OS 執行 cupid 時,會得到這樣一個錯誤號 10 (VMX_EXIT_CPUID )
當執行到CPUID這條指令的時候,響應,然後就可以修改cpuid的返回值
if( ExitReason == VMX_EXIT_CPUID )
{
if( GuestEAX == 0 )
{
DbgPrint("CPUID EIP == %08X \n" , GuestEIP );
//0x34EC2B
__asm
{
POPAD
MOV EAX, 0
CPUID
//修改CPUID返回值
MOV EBX, 0x80808080
MOV ECX, 0x90909090
MOV EDX, 0x10101010
JMP Resume
}
}
else
{
__asm
{
POPAD
MOV EAX, GuestEAX
CPUID
JMP Resume
}
}
}
最後運行的效果
運行VT前 cupid
運行VT後 cpuid
順道打印了執行CPUID程序的 EIP,與輸出的 00401009一致
00401003 |. 53 push ebx
00401004 |? B8 00000000 mov eax,0
00401009 |. 0FA2 cpuid
0040100B |. 894424 0C mov dword ptr ss:[esp+C],eax
0040100F |? 894C24 08 mov dword ptr ss:[esp+8],ecx
00401013 |? 895C24 04 mov dword ptr ss:[esp+4],ebx
00401017 |? 68 10614000 push cpuid.00406110 ; ASCII "---------cpuid------",LF
上傳的附件 bin.rar (20.0 KB, 365 次下載)
intel-vt.rar (33.4 KB, 560 次下載)
此帖於 2011-12-24 18:45:21 被 網監張局 最後編輯 原因: 格式
[公告]請注意言行舉止,不要讓大家覺得不適!
網監張局
查看公開信息
查找 網監張局 發表的帖子
查找 網監張局 發表的所有主題
查看 網監張局 發表的精華帖
網監張局
普通會員
資 料:
註冊日期: Oct 2011
帖子: 38
精華: 1
現金: 308 Kx
致謝數: 0
獲感謝文章數:1
獲會員感謝數:2 2 2011-12-24, 18:39:09
--------------------------------------------------------------------------------
EXIT_REASON 的所有類型註釋
VirtualBox\src\VBox\VMM\VMMR3\HWACCM.cpp
EXIT_REASON(VMX_EXIT_EXCEPTION , 0, "Exception or non-maskable interrupt (NMI)."),
EXIT_REASON(VMX_EXIT_EXTERNAL_IRQ , 1, "External interrupt."),
EXIT_REASON(VMX_EXIT_TRIPLE_FAULT , 2, "Triple fault."),
EXIT_REASON(VMX_EXIT_INIT_SIGNAL , 3, "INIT signal."),
EXIT_REASON(VMX_EXIT_SIPI , 4, "Start-up IPI (SIPI)."),
EXIT_REASON(VMX_EXIT_IO_SMI_IRQ , 5, "I/O system-management interrupt (SMI)."),
EXIT_REASON(VMX_EXIT_SMI_IRQ , 6, "Other SMI."),
EXIT_REASON(VMX_EXIT_IRQ_WINDOW , 7, "Interrupt window."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_TASK_SWITCH , 9, "Task switch."),
EXIT_REASON(VMX_EXIT_CPUID , 10, "Guest software attempted to execute CPUID."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_HLT , 12, "Guest software attempted to execute HLT."),
EXIT_REASON(VMX_EXIT_INVD , 13, "Guest software attempted to execute INVD."),
EXIT_REASON(VMX_EXIT_INVPG , 14, "Guest software attempted to execute INVPG."),
EXIT_REASON(VMX_EXIT_RDPMC , 15, "Guest software attempted to execute RDPMC."),
EXIT_REASON(VMX_EXIT_RDTSC , 16, "Guest software attempted to execute RDTSC."),
EXIT_REASON(VMX_EXIT_RSM , 17, "Guest software attempted to execute RSM in SMM."),
EXIT_REASON(VMX_EXIT_VMCALL , 18, "Guest software executed VMCALL."),
EXIT_REASON(VMX_EXIT_VMCLEAR , 19, "Guest software executed VMCLEAR."),
EXIT_REASON(VMX_EXIT_VMLAUNCH , 20, "Guest software executed VMLAUNCH."),
EXIT_REASON(VMX_EXIT_VMPTRLD , 21, "Guest software executed VMPTRLD."),
EXIT_REASON(VMX_EXIT_VMPTRST , 22, "Guest software executed VMPTRST."),
EXIT_REASON(VMX_EXIT_VMREAD , 23, "Guest software executed VMREAD."),
EXIT_REASON(VMX_EXIT_VMRESUME , 24, "Guest software executed VMRESUME."),
EXIT_REASON(VMX_EXIT_VMWRITE , 25, "Guest software executed VMWRITE."),
EXIT_REASON(VMX_EXIT_VMXOFF , 26, "Guest software executed VMXOFF."),
EXIT_REASON(VMX_EXIT_VMXON , 27, "Guest software executed VMXON."),
EXIT_REASON(VMX_EXIT_CRX_MOVE , 28, "Control-register accesses."),
EXIT_REASON(VMX_EXIT_DRX_MOVE , 29, "Debug-register accesses."),
EXIT_REASON(VMX_EXIT_PORT_IO , 30, "I/O instruction."),
EXIT_REASON(VMX_EXIT_RDMSR , 31, "RDMSR. Guest software attempted to execute RDMSR."),
EXIT_REASON(VMX_EXIT_WRMSR , 32, "WRMSR. Guest software attempted to execute WRMSR."),
EXIT_REASON(VMX_EXIT_ERR_INVALID_GUEST_STATE, 33, "VM-entry failure due to invalid guest state."),
EXIT_REASON(VMX_EXIT_ERR_MSR_LOAD , 34, "VM-entry failure due to MSR loading."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_MWAIT , 36, "Guest software executed MWAIT."),
EXIT_REASON_NIL(),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_MONITOR , 39, "Guest software attempted to execute MONITOR."),
EXIT_REASON(VMX_EXIT_PAUSE , 40, "Guest software attempted to execute PAUSE."),
EXIT_REASON(VMX_EXIT_ERR_MACHINE_CHECK , 41, "VM-entry failure due to machine-check."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_TPR , 43, "TPR below threshold. Guest software executed MOV to CR8."),
EXIT_REASON(VMX_EXIT_APIC_ACCESS , 44, "APIC access. Guest software attempted to access memory at a physical address on the APIC-access page."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_XDTR_ACCESS , 46, "Access to GDTR or IDTR. Guest software attempted to execute LGDT, LIDT, SGDT, or SIDT."),
EXIT_REASON(VMX_EXIT_TR_ACCESS , 47, "Access to LDTR or TR. Guest software attempted to execute LLDT, LTR, SLDT, or STR."),
EXIT_REASON(VMX_EXIT_EPT_VIOLATION , 48, "EPT violation. An attempt to access memory with a guest-physical address was disallowed by the configuration of the EPT paging structures."),
EXIT_REASON(VMX_EXIT_EPT_MISCONFIG , 49, "EPT misconfiguration. An attempt to access memory with a guest-physical address encountered a misconfigured EPT paging-structure entry."),
EXIT_REASON(VMX_EXIT_INVEPT , 50, "INVEPT. Guest software attempted to execute INVEPT."),
EXIT_REASON_NIL(),
EXIT_REASON(VMX_EXIT_PREEMPTION_TIMER , 52, "VMX-preemption timer expired. The preemption timer counted down to zero."),
EXIT_REASON(VMX_EXIT_INVVPID , 53, "INVVPID. Guest software attempted to execute INVVPID."),
EXIT_REASON(VMX_EXIT_WBINVD , 54, "WBINVD. Guest software attempted to execute WBINVD."),
EXIT_REASON(VMX_EXIT_XSETBV , 55, "XSETBV. Guest software attempted to execute XSETBV."),
EXIT_REASON_NIL()
此帖於 2011-12-24 18:45:47 被 網監張局 最後編輯
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
共 2 位會員
感謝 網監張局 發表的文章: salwtp (2012-02-14), 小小天 (2011-12-25)
網監張局
查看公開信息
查找 網監張局 發表的帖子
查找 網監張局 發表的所有主題
查看 網監張局 發表的精華帖
pDriObj
初級會員
資 料:
註冊日期: Oct 2009
帖子: 27
精華: 0
現金: 93 Kx
致謝數: 0
獲感謝文章數:0
獲會員感謝數:0 3 2011-12-24, 19:00:48
--------------------------------------------------------------------------------
這個必須得頂!!!
[招生]15PB開始接受第002期報名!
pDriObj
查看公開信息
查找 pDriObj 發表的帖子
查找 pDriObj 發表的所有主題
雪yaojun
初級會員
資 料:
註冊日期: Dec 2007
帖子: 538
精華: 0
現金: 145 Kx
致謝數: 11
獲感謝文章數:7
獲會員感謝數:7 4 2011-12-24, 19:04:36
--------------------------------------------------------------------------------
這是神馬????
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
雪yaojun
查看公開信息
查找 雪yaojun 發表的帖子
查找 雪yaojun 發表的所有主題
Fido
初級會員
資 料:
註冊日期: Jan 2008
帖子: 829
精華: 0
現金: 354 Kx
致謝數: 19
獲感謝文章數:6
獲會員感謝數:6 5 2011-12-24, 19:08:45
--------------------------------------------------------------------------------
強帖留名啊...我的天啊..膜拜啊...
[公告]請注意言行舉止,不要讓大家覺得不適!
Fido
查看公開信息
查找 Fido 發表的帖子
查找 Fido 發表的所有主題
xiejienet
初級會員
資 料:
註冊日期: Jun 2007
帖子: 490
精華: 0
現金: 391 Kx
致謝數: 6
獲感謝文章數:3
獲會員感謝數:3 6 2011-12-24, 19:12:47
--------------------------------------------------------------------------------
雖然看不懂,但是覺得好牛逼
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
xiejienet
查看公開信息
查找 xiejienet 發表的帖子
查找 xiejienet 發表的所有主題
雪yaojun
初級會員
資 料:
註冊日期: Dec 2007
帖子: 538
精華: 0
現金: 145 Kx
致謝數: 11
獲感謝文章數:7
獲會員感謝數:7 7 2011-12-24, 20:11:14
--------------------------------------------------------------------------------
cpuid是攔截個什麼過程呀??樓主可不可以詳細說明一下。
要是代碼加個縮進就好了。
[公告]請注意言行舉止,不要讓大家覺得不適!
雪yaojun
查看公開信息
查找 雪yaojun 發表的帖子
查找 雪yaojun 發表的所有主題
panti
初級會員
資 料:
註冊日期: Jun 2008
帖子: 212
精華: 0
現金: 193 Kx
致謝數: 5
獲感謝文章數:0
獲會員感謝數:0 8 2011-12-25, 04:28:20
--------------------------------------------------------------------------------
是好東西,不知道怎麼看
後面的可以攔截CPU指令是什麼意思?在虛擬機中攔截?
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
panti
查看公開信息
查找 panti 發表的帖子
查找 panti 發表的所有主題
網監張局
普通會員
資 料:
註冊日期: Oct 2011
帖子: 38
精華: 1
現金: 308 Kx
致謝數: 0
獲感謝文章數:1
獲會員感謝數:2 9 2011-12-25, 17:23:27
--------------------------------------------------------------------------------
引用:
最初由 panti發佈
是好東西,不知道怎麼看
後面的可以攔截CPU指令是什麼意思?在虛擬機中攔截?
後面是VMM已經啓動, VMM 監控操作系統的運行
而CPUID這個指令是會主動觸發#VMExit的,不用配置VMCS
1 無條件事件CPUID GETSEC INVD XSETBV 所有 VMX指令
如果事件ID == VMX_EXIT_CPUID 就代表執行的是 CPUID
[公告]請注意言行舉止,不要讓大家覺得不適!
網監張局
查看公開信息
查找 網監張局 發表的帖子
查找 網監張局 發表的所有主題
查看 網監張局 發表的精華帖
遊戲神通
初級會員
資 料:
註冊日期: Jul 2010
帖子: 166
精華: 0
現金: 30 Kx
致謝數: 1
獲感謝文章數:1
獲會員感謝數:1 10 2011-12-25, 19:30:19
--------------------------------------------------------------------------------
不錯 頂 .
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
遊戲神通
查看公開信息
訪問 遊戲神通 的個人網站
查找 遊戲神通 發表的帖子
查找 遊戲神通 發表的所有主題
nevergone
普通會員
資 料:
註冊日期: Nov 2006
帖子: 246
精華: 3
現金: 39 Kx
致謝數: 0
獲感謝文章數:0
獲會員感謝數:0 11 2011-12-25, 22:48:20
--------------------------------------------------------------------------------
學習。謝謝分享
[公告]請注意言行舉止,不要讓大家覺得不適!
nevergone
查看公開信息
查找 nevergone 發表的帖子
查找 nevergone 發表的所有主題
查看 nevergone 發表的精華帖
wowocock
普通會員
資 料:
註冊日期: Jul 2007
帖子: 103
精華: 1
現金: 255 Kx
致謝數: 0
獲感謝文章數:0
獲會員感謝數:0 12 2011-12-26, 14:13:30
--------------------------------------------------------------------------------
雖然已經很老了,但還是不錯。
[公告]如果你覺得有人語言挑釁,請點每帖右上角的“舉報”按鈕!
wowocock
查看公開信息
查找 wowocock 發表的帖子
查找 wowocock 發表的所有主題
查看 wowocock 發表的精華帖
wowocock
普通會員
資 料:
註冊日期: Jul 2007
帖子: 103
精華: 1
現金: 255 Kx
致謝數: 0
獲感謝文章數:0
獲會員感謝數:0 13 2011-12-26, 14:16:39
--------------------------------------------------------------------------------
引用:
最初由 panti發佈
是好東西,不知道怎麼看
後面的可以攔截CPU指令是什麼意思?在虛擬機中攔截?
參考很久以前 ROOTKIT.COM上的例子,在VMEXIT裏處理,修改GUEST各寄存器的返回值,來達到修改CPUID結果的效果。
VMM不是隻能接管虛擬機環境中執行的指令而引發的#VMExit,你那個CPUID好象直接就是在R3真實機下的一個程序,這難道也能被VMM接管?