VTがなくてもがんばればなんかなる!
この辺眺めながら。個人的には大好きなVT技術なのだけど、ここではハイパーバイザーの存在はそんなに重要でない。ハイパーバイザーを使ったほうが楽に、良いものができるのは間違いないが、同じアーキテクチャにするにしても、drvcopyのようにAPIを使ってドライバのロードを監視して、解析し、#BPハンドラをフックしてフックハンドラ内でディスアセンブラを動かすことによって主要機能が実装できる*1。
ハイパーバイザーの効果は、ntoskrnl.exeよりも早く動けることと、マルウェアからの可視性の低減と保護だろうか。
面白いと思ったのはアーキテクチャ自身。特に、
システム初期化時にゲストOSのメモリー上に存在するOSイメージ(ntoskrnl.exeなど)を検査し,カーネル内部で利用されているカーネルAPIとそのアドレスを対応付けたデータベースを作り上げる。
というアプローチ。これは要するにPEヘッダのアドレステーブルを調べ上げて対応表を作ることを指している。これはユーザーモードにも適用できる考え方で、使い勝手が良い結構スマートな方法だと思う。今思いついたけど、この方法でデバッグシンボルを使わずにアドレスの「名前」を得ることもできそうだね。
ちなみに表題は最近思っていることで、むしろ、中途半端にVT技術に依存してしまうと既存のVM上で動かなくなるという点が痛くなってくるのかなと。