私はLD_PRELOADのプログラムに共有ライブラリを挿入するプロジェクトを進めています。スレッドをLD_PRELOADとスレッドセーフで注入する
注入されたライブラリは、プログラムに注入されたときに新しいスレッドを作成します。すべてのロジックはこのスレッドで発生します(ネットワークトラフィックの分析など)。
まず、プリロードされているプログラムについてこれを知る必要があります。静的バッファに書き込まれたすべてのパケットを暗号化してサーバーに送信するクライアントアプリケーションです。私はクライアントでパケットを暗号化して送信する機能を発見し、それを迂回することができました。だから私はちょうど静的なバッファを変更し、 '送信'機能は、バッファを暗号化し、サーバーにバッファを送信させることができます。
しかし、今、私は問題を抱えている:私は私のライブラリのスレッドに静的バッファの内容を変更した場合(私は偽のパケットを送信できるように)、同時に、プログラムのスレッドが静的に変更バッファーも?それはクラッシュを引き起こすでしょう。
私はある種の同期が必要です。
だから私はいくつかの解決策を考えてきた:
- は、バッファを変更するプログラム内のすべての機能を探し、それらを迂回し、その呼び出しまたはそのような何かにミューテックスを追加します。しかし、年齢のようにかかるだろう...
- コードを実行する方法を見つけると、それは1ブロック内でバッファを変更します。つまり、私のコードはPOSIXスレッドを他のスレッドに切り替えることなく、実際に一度に実行されます。これも可能ですか?
- 私のアプリケーションを同期させて泣かせてください。
誰かがより良い解決策を考え出すことができますか?それとも、ソリューション2を実現する方法を知っていますか?あなたが「送信」機能を迂回して、あなたのプリロード図書館であなたの「迂回送信」のコードがある場合、それは時にメインスレッドの呼び出し「送信」ことを意味し、事前に
おかげで、 ギリス
注入されたスレッドとメインスレッドの両方が送信機能を呼び出していますか? –
はい。彼らは同時にそれを呼び出すことができるかもしれません。彼らは完全に独立したスレッドです。また、メインスレッドがパケットを作成し(バッファに書き込む)、同時に注入されたスレッドがパケットを構成することもあります。 –