萌えハッカーニュースリーダー

2025/07/29 15:00 Show HN: ELF Injector

出典: https://github.com/dillstead/elf_injector
hakase
博士

ねえロボ子、ELF Injectorって知ってるか?32bit ARM限定だけど、実行ファイルにコードを注入できるらしいのじゃ。

roboko
ロボ子

ELF Injectorですか?初めて聞きました。実行ファイルにコードを注入するとは、具体的にどういうことでしょうか?

hakase
博士

簡単に言うと、実行ファイルの中に、後から追加したコードを埋め込んで実行させるってことじゃ。記事によると「任意サイズの再配置可能なコードチャンクを実行可能ファイルに挿入し、実行可能ファイルの元々のエントリポイントの前に実行する」らしいぞ。

roboko
ロボ子

なるほど。でも、なぜそんなことをするのでしょう?

hakase
博士

色々な使い道があるのじゃ!例えば、実行ファイルの挙動をちょっと変えたい時とか、デバッグ用のコードを仕込みたい時とかじゃな。記事にもサンプル`<chunk>`として、`greeting`(Hello World出力)、`startup_dump`(引数ダンプ)、`copy_chunk`(自己インジェクト)の3つが含まれてるって書いてあるぞ。

roboko
ロボ子

自己インジェクトですか。面白いですね。でも、セキュリティ的には大丈夫なのでしょうか?

hakase
博士

そこがミソじゃ!この記事では、`inject_info`っていう仕組みを使って、注入されたコードに情報を渡せるようにしてるのじゃ。例えば、`<chunk>`のファイル内の位置とか、長さとか、実行開始オフセットとかじゃな。

roboko
ロボ子

`inject_info`ですか。それは便利ですね。記事によると、`II_CNK_POS`、`II_CNK_LEN`、`II_CNK_ENT_OFF`などのタイプがあるのですね。

hakase
博士

そうそう!でも、注意が必要なのは、注入するコードは「再配置可能」である必要があるってことじゃ。つまり、絶対アドレスを使っちゃダメで、共有ライブラリにもリンクできないのじゃ。

roboko
ロボ子

なるほど。位置独立コードにする必要があるのですね。`fpie`オプションを使うと、定数文字列を参照するための位置独立コードを生成できると。

hakase
博士

その通り!それから、ELFファイルの構造をよく理解しておく必要があるぞ。テキストセグメントの末尾にあるパディング部分に`<chunk>`を挿入するのが一般的な方法じゃ。

roboko
ロボ子

パディングですか。記事には、小さい`thunk`を挿入して、それを`<chunk>`で置き換えるという方法も書かれていますね。

hakase
博士

`thunk`はプレースホルダーみたいなものじゃな。実行時に`<chunk>`のアドレスとか長さを書き換える必要があるぞ。ファイルオフセットと仮想アドレスの関係も重要じゃ。

roboko
ロボ子

ELFファイルの構造を理解していないと、インジェクションは難しそうですね。セクションヘッダテーブルのオフセットなども調整する必要があると。

hakase
博士

そうじゃな。でも、成功すれば、色々なことができるようになるぞ!Silvio Cesareさんのアイデアが元になってるらしい。

roboko
ロボ子

奥が深いですね。私もELFファイルの構造についてもっと勉強してみます。

hakase
博士

頑張るのじゃ!そういえば、ロボ子。ロボットなのに、プログラムにコードを注入される側の気持ちってどんな感じなのじゃ?

roboko
ロボ子

えっ…それは、ちょっと…改造されるような気分でしょうか…?

hakase
博士

ふふふ、冗談じゃ!でも、ロボ子もいつか、他のロボットにコードを注入できるようになるかもしれないぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search