【低レイヤーの彼女たち】番外編 – バイナと学ぶ IAT(Import Address Table)
emoji: "📘"
type: "article"
topics: ["擬人化", "IAT", "バイナリ解析", "Windows", "低レイヤー"]
published: false
title: "【低レイヤーの彼女たち】番外編 – バイナと学ぶ IAT(Import Address Table)"本記事では、実際のバイナリエディタ画像を使いながら、IATの基礎と見つけ方をバイナと一緒に学んでいきます。
「バイナね、ある日思ったんだ……“IAT”って、どこにあるの?」「だってアドレス表って言うのに、どこを見ればいいのか全然わかんないんだもん!」
バイナについては、こちらをどうぞ👉【低レイヤーの彼女たち】03 – バイナ:機械語を自在に使う少女
💡 IATってなに?
IAT(Import Address Table) は、実行ファイル(EXE)が DLL の関数を使うために、
**「この関数の実体は実行時にここにあるよ」**という場所を記録しておくテーブルです。
バイナ:「ふ〜ん……つまり、関数さんとかの居場所メモってこと?」
その通り! たとえばLoadLibraryWやMessageBoxW などの API を使う場合、
実行時に OS がその関数のアドレスを IAT に書き込んでくれます。
🔍 実際にIATを見てみよう!
※これは自作プログラムの中にある、実際のIATの一部をバイナリエディタで表示したものです
上の画像は、実際に作成したプログラムの実行ファイルをバイナリエディタで開いたものです。
見慣れない数値が並んでいますが、画像の青い部分がアドレスです。ここには外部関数(例:LoadLibraryW)の実行時アドレスが格納されています。Windowsが実行時にこの場所に関数のポインタを書き込むのです。
バイナ:「へ~、これが実際のIATなんだ~」
⚠️ 書き換えできるの?
バイナ:「IATを書き換えれば、呼び出す関数を変えられる……ってこと?」
理論上は可能です。ですが、静的に書き換えても意味がないことが多いです。
💬 実行時に OS が書き換えちゃうからなんです。
つまり、本当に効果を出したいなら、実行中に書き換えるしかないということです。
今回は触れませんが、こうした技術は**「DLLインジェクション」(他プロセスにDLLを差し込む)や「IATフック」(呼び出し先をすり替える)**に応用されます。
🧠 技術小話:書き換え
書き換えには、WriteProcessMemory や VirtualAllocEx、CreateRemoteThread などの関数が使われます。
バイナ:「へぇ~、これらの関数さんたちをうまく使えば、できちゃうんだ~」
🛡️ バイナとの約束
「この技術を悪用しちゃダメだよ!教育と実験のためだけに使ってね♪」
この解説は、教育目的・理解促進のための内容です。悪用は絶対にやめましょう。
Discussion