まめ知識
MessageBoxのテキストは Ctrl+C でコピーできる
こんな感じ。それにしてもエラーメッセージをテキストコピーできないGUIは勘弁して欲しい。
--------------------------- Microsoft Visual C++ Debug Library --------------------------- Debug Assertion Failed! Program: ...K\6001.17051\project\HookDetector\user\Debug\HookDetector.exe File: c:\winddk\6001.17051\project\hookdetector\user\hookdetector\result_code.h Line: 61 Expression: 0 For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) --------------------------- Abort Retry Ignore ---------------------------
一度ログインするまでリモートデスクトップ接続できない
Terminal Service が「手動」だと一度コンソールログインするまで、ターミナルサービスが起動しない。そのためリモートデスクトップ接続できない。「自動」にしてあげればOK。ちなみに 2003SP1 だと自分で設定してあげないと「手動」が基本なので引っかかりやすい。
カーネルモジュールのシンボル名取得
やっとできたものの、モノにするまで作りこむ気力がないので方法の概要だけ。
- シンボル名を解決したいシステム空間のアドレスを用意
- たとえば 0x81DBC716
- SymLoadModule64でカーネルモジュールのシンボルテーブルをロード
- たとえば C:\Windows\system32\ntoskrnl.exe
- IMAGEHLP_SYMBOL64構造体を用意
- 「システム空間のアドレス + SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス」の値を計算
- たとえば「0x81DBC716 + 0x00400000 - 0x81C04000」
- システムモジュールのべースアドレスはEnumDeviceDriversで取得
- 計算した値でSymGetSymFromAddr64
- (゚Д゚)ウマー
- たとえば _NtAcceptConnectPort@24(゚Д゚)ウマー
そのうちに、HookDetectorに実装しようかと思ってます。思ってますが、飽きてるのでやらない予感!
05/02 追記
システム空間のアドレス - SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス
って書いてました。間違いなので修正しました。
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とは正反対のアプローチといえる。
ところで会社で何人かに話題をふってみたが皆さんあまり関心をお持ちで無いようでした。。。。