NTOSKRNL.EXEのエクスポートテーブルを書き換えて関数を増やしてみる実験

Windows2000のカーネル関数 IoSetCompletionRoutineExがないせいで、iPod Touchや iPhoneは動作しないわけですが、新しいドライバが出るたびに毎回Patch当てするのは面倒なので、Kernelに直接関数を追加できないか実験してみました。


まず、マルチコアカーネルのエクスポートテーブルのアドレス
13AB40を 13AB30にずらして、前のリソーステーブルのサイズをd40からd30に変更。

リソーステーブルのオフセット
+0c 関数名テーブルへのオフセットアドレス
+10 序数の開始値
+14 序数の終了値
+18 関数の数
+1c 関数の実行アドレステーブル
+20 関数名テーブルのテーブルへのオフセットアドレス
+24 関数のHint値のテーブルへのオフセットアドレス

これを整合性が取れるように書き換えて、最後に IoSetCompletionRoutineEx の文字列を追加して、リソーステーブルのサイズの整合性も取れるように書き換え。

0x4000 付近に冗長なテキスト領域があるので、ここに関数の内容を追加。

リロケートテーブルが 0x193f80から始まるが、手前に空きがあるので、0x193f70にずらして、追加したプログラムのリロケートテーブルを追加。

ちなみにリロケートテーブルは
リロケートテーブルサイズ+テーブル(WORD)xテーブルの数
と言う構成になっています。

最後に、CheckSUMを修正して、完成。

NTOSKRNL.EXEと置換して起動してみる。

ntos
Windows2000はエラーもなく起動できて、追加できた様子。

しかし、
ntos2
ドライバがなぜか動かない orz

(多分続く)

おすすめ

コメントを残す

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