パッチ版win32k.sys の考察とXP版について

海外で、拡張カーネルの win32k.sys にパッチを充てた人が居たので、修正内容とXP版との違いについて考察しました。
変更点は

SUB_LA00024F4:
push esp
call [ntoskrnl.exe!MmGrowKernelStack]
jmp LA00CD50A
の様に スタックフレームを0x624 バイト確保する LA00CD50A の処理の前に カーネルスタックの拡張処理を入れるというものでした。
(この関数の呼び出し処理は2か所あります)

XPではどうなってるかを確認してみると・・・。
LBF8A6B0A:
push 706D7447h
push 00000638h
call SUB_LBF810099 // AllocMemory(n)
mov esi,eax
cmp esi,ebx
jz LBF8A6BA3

ExAllocatePoolWithTagを使って、メモリを確保して割り当てていました!
つまり、Windows 2000は、XPだと12k使えるカーネルスタックを 10kしか使えない問題があるというわけですね・・・。 ((((・ω・))))これは酷い

ただ、このパッチにはまだ課題があって、該当関数を読んでる部分を2か所修正してるのだけど、類似処理が、実は他にもう1か所あること。他にも、0x63Cのスタックフレームを作成する箇所が0x50バイトのみの消費に改善されていたり、0x828のスタックフレームが半減されてたりするようだ。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です