Skip to content

Latest commit

 

History

History
54 lines (32 loc) · 2.37 KB

2022-03-29.md

File metadata and controls

54 lines (32 loc) · 2.37 KB

2022-03-29

さて。今日はいよいよカーネル空間に入ります。

よろしくお願いします

実習 カーネルデバッグ

時間を戻して、スナップショットを復元して、管理者権限で「bootcfg /debug ON /PORT COM1 /ID 1」を実行、Ghest Addtionsをインストール。WinDBGでカーネル待ち。再起動。

hello12を起動。BreakPoint()で止まるから、そこでプロセス一覧取得「!process 0 0」。

HELLO12.EXEのプロセスアドレスを指定してプロセスのアタッチ「.process 81d01c20」。

「.reload /user」でユーザモードのシンボルをロード。

「LM」でモジュール一覧。「IMM32」が読み込まれている。

「x IMM32!ImmCreate*」でシンボル確認。

「uf IMM32!ImmCreateContext」で関数を逆汗。

(...逆汗のため、転載不可...)

「call IMM32!ImmLocalAlloc」 と 「call IMM32!NtUserCreateInputContext」 が見える。 よってImmCreateContextはこの二つの関数を呼んでいることがわかる。 ついでに「uf IMM32!ImmLocalAlloc」「uf IMM32!NtUserCreateInputContext」してみる。 (省略)

win32k!NtUserCreateInputContextはカーネル関数だが、IMM32!NtUserCreateInputContextはwin32k!NtUserCreateInputContextを呼び出すためのトランポリンになっている。

ついでに「uf win32k!NtUserCreateInputContext」する。

「IMM32!NtUserCreateInputContext」の中身を見ると「mov eax,1154h」「SharedUserData!SystemCallStub」などが見える。これはシステムコールだ。「1154h」というのは「0x1154」ということで、https://github.com/j00ru/windows-syscalls/tree/master/x86 ここを見ると確かにNtUserCreateInputContextになっている。

ついでに「uf win32k!NtUserDestroyInputContext」「uf win32k!DestroyInputContext」を実行する。

逆汗のコードは転載できないものがあるので注意してほしい。

【課題】IMM32!CreateContext, IMM32!DestroyContext, IMM32!GetContext, win32k!NtUserCreateInputContext, win32k!CreateInputContext, win32k!NtUserDestroyInputContext, win32k!DestroyInputContextの逆汗をufコマンドで取得し、それぞれをファイルに保存して下さい。

今日はここまで。

わかりました ありがとうございました


戻る | 次へ