macOS: プログラム実行の傍受

macOS: プログラム実行の傍受

任意の実行可能ファイルの実行をインターセプトしたいです。バイナリがあるとします/usr/bin/binary。誰かがそのバイナリを起動するたびに、代わりに自分の実行可能ファイルを起動したいです。そこから、元のバイナリを起動するかどうかを決定したいです。最終的には、元のバイナリとユーザーの間にシムを挿入したいです。

同様の Windows の質問が寄せられています:特定のプログラムが実行される前にそれを傍受し、最初に自分のプログラムを実行したい

私はシステムの管理者権限を持っています。ただし、元のバイナリを他の場所に再配置することはできません。

上院@dirkt の質問:

  • 傍受したいバイナリのリストがハードコードされているはずです。

答え1

免責事項: 私は MacOS の世界にはまったく無知ですが、GNU/Linux でそれを実行する方法をいくつか紹介します... 役に立つかもしれません。

うーん... @dirkt と同じように返信します (つまり、binaryを指す と呼ばれるラッパーbinary.real) が、次のようになります。

  1. ユーザーがメカニズムを認識している場合は、binary.real直接起動できます。
  2. 「監視」したいプログラムごとにこのメカニズムを複製する必要があります。

それで、どこか別の場所を少し掘り下げてみましょう...

カーネルモジュール

GNU/Linux の世界では、exec システム コールをフックして ACL を必要に応じて実装するカーネル モジュールを作成しますが、これは少しやりすぎです。Mac OS 用のカーネル モジュールを開発することは可能のようですが、Apple がそのようなハックを許可するかどうかはわかりません。

LD_PRELOAD ハック

よく知られているLD_PRELOADメカニズム(DYLD_INSERT_LIBRARIES あなたの世界で) を使用すると、システムの任意のライブラリの任意の C 関数を書き換えることができます。つまり、次の操作を行うだけです。

  1. exec*() を実装する動的ライブラリを作成します。
  2. ACL を実装します。
  3. DYLD_INSERT_LIBRARIES)により、すべてのユーザーセッション (グラフィカルセッション、ターミナルセッション) がライブラリをプリロードした状態で起動されることを確認します。

さあ、どうぞ!

関連情報