Featherweight Virtual Machine (FVM)

OSレベルの仮想化ソフトウェア「FVM 1.0」が公開という記事を読み、とりあえずDL*1。詳細はFeather-weight Virtual Machineに。じっくり読みたい。

ドキュメントを眺めてみるとSSDTフックをしているらしいので FvmDrv - hooksys.c - FVM_HookServices を眺めてみると激しい激しい。

_asm cli

// Turn off the page write protection
__asm {
	push eax
	mov eax, cr0
	and eax, not 10000h
	mov cr0, eax
	pop eax
}
/*
	ここから怒涛のAPIフック
*/
__asm {
	 push eax
	 mov eax, cr0
	 or eax, 10000h
	 mov cr0, eax
	 pop eax
}
_asm sti

その数44API(たぶん)。ちなみに前後のアセンブラ以前に紹介したCR0 Trickですね。最初にEAXレジスタをpushしているので元の値が破壊されないですね。なる。

環境はVC9だったがUI以外は問題なくビルドできた。しかしUIにはMFCが使われているため、Expressではビルドできない。そこで VC8 Standard で小一時間ほど頑張ってみたが、実行時エラー "Failed to create empty document." を解消できない。どうもMDI子ウィンドウの生成時に使用されるウィンドウクラスの名前が正しくないらしいが、正直MFCの中のことなのでわからんです。英語版のDLLが必要とかそういう話なのかな?

Detectしてみた

SDTが真っ赤っか!

それにしてもGUIないと使い方がよくわからん。

隠すのではなく捏造する

そうすれば確かに仮想環境になるわけだ。FVMはRootkitとは正反対のアプローチといえる。
ところで会社で何人かに話題をふってみたが皆さんあまり関心をお持ちで無いようでした。。。。

*1:Vistaには対応してない