
Linuxシステム上で実行中のプロセスのメモリとコードを検査・操作できるライブラリです。
raminspect は、Linux システム上で実行中のプロセスのメモリとコードを検査・操作するためのクレートです。プロセスのメモリ内で検索語を検出・置換する関数、プロセスに属する新しいメモリを割り当てる関数、そしてプロセスのコンテキスト内で実行される任意のシェルコードを注入できるインターフェースを提供します。当然のことながら、これらすべてには root 権限が必要です。
demo
Firefox がインストールされていれば、firefox_search サンプルを実行できるはずです。実行するには、まず Firefox のインスタンスを開き、検索バーに「Old search text」と入力してください。うまくいけば、sudo cargo run --example firefox_search --release というコマンドでサンプルを root として実行したときに、そのテキストが「New search text」に置き換わるはずです。ただし、新しいテキストを描画させるには、おそらく検索バーをもう一度クリックする必要があります。
検索と置換の機能はカーネルモジュールの有無にかかわらず利用できますが、シェルコードを注入したり新しいバッファを割り当てたりする場合は、前提となるカーネルモジュールを先にビルドしてロードする必要があります。これを行うには、お使いのディストリビューションのカーネルヘッダーパッケージをインストールし、git clone を実行した後、リポジトリの kern_module サブフォルダで以下のコマンドを実行してください(何らかの理由でビルドが失敗する場合は、issue を作成してください):
make all
sudo insmod raminspect.ko
また、シェルコード注入部分は現在、任意のアーキテクチャで動作するように設計されています(実際のシェルコード自体はプラットフォーム固有である必要があります)が、任意のメモリ割り当て部分は現在 x86-64 に限定されています。より多くの CPU アーキテクチャで任意の割り当てをサポートするための PR を歓迎します。
このプロジェクトはまだ安定した状態ではありません。破壊的な変更やバグが発生することを想定してください。クレートにバグを見つけた場合、またはいずれかのサンプルがお使いのマシンで動作しない場合は、速やかに修正できるよう、リポジトリに issue を作成してください。