問題タブ [library-interposition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C のメモリ マップト ファイル
私は C でメモリ マップ ファイルをいじっていましたが、fopen の FILE * をメモリ マップ ファイルに透過的に置き換える方法があるかどうか疑問に思っていました。
例:
しかし、代わりに、 FILE *fp = my_fopen(...) を持つことは可能ですか?
私自身の関数がディスク上のファイルを mmap で開く場所では、内容を変更して FILE * を返しますが、プログラムは新しい my_fopen() と my_fclose() 以外の違いを認識しません。
これは、プログラムで操作を行う方法を書き直さなくても可能ですか?
c - LD_PRELOADを使用したLinuxシステムコールの置き換えの問題
バイナリを実行できるプログラムを作成しようとしています。要求されたときに特定のファイルを別のファイルに置き換えます。これは、LD_PRELOADで使用される、システムコール関数の単純な置換を備えたライブラリです。問題は、読み取り用にオープンをキャッチすることです(代わりに代替ファイルが読み取られます)が、書き込みは常に実際の指定されたファイルに戻ります。他に知っておくべき「オープンな」システムコールはありますか?
xlib - 介在ライブラリ: XOpenDisplay
X11/Xlib.h で定義されている XOpenDisplay 関数の動作を変更する必要があるプロジェクトに取り組んでいます。
探していることを正確に実行するexampleを見つけましたが、コンパイルすると、次のエラーメッセージが表示されます。
XOpenDisplay_interpose.c:14: エラー: »XOpenDisplay« のタイプが競合しています /usr/include/X11/Xlib.h:1507: エラー: »XOpenDisplay« の以前の宣言がここにありました
誰でもその問題で私を助けることができますか? 私は何が欠けていますか?
これまでの私のプログラムコード - 上記の例に基づいています:
よろしく、アンディ。
c++ - C++ クラス メソッドの LD_PRELOAD
C++ プログラムのメソッド呼び出しに介入する必要があります (クラスは別の共有ライブラリに存在します)。LD_PRELOAD を使用できると思いましたが、これがどのように機能するかわかりません (C 関数の例しか見つかりませんでした): 挿入されたクラスの実装からコードをコピーせずに、単一のメソッドの挿入を設定する方法はありますか?
c++ - 受け取ったポインタが文字列、ushort、配列のいずれであるかを調べる
ターゲット アプリケーションが文字列を連結するために memcpy() 関数を使用し、どの文字列が作成されているかを調べたいので、C で memcpy() 関数を挿入しています。コードは次のとおりです。
関数は正常に呼び出されますが、最初のパラメーターは何でもかまいません。結果が文字列または配列の場合にのみトレースしたいのです。配列か文字列かを尋ねる必要があります。私はこれが簡単にできないことを知っています.RETが何を指しているのかを知る方法はありますか?
私は MACOSX の下で作業しており、DYLD を介在させています。
どうもありがとうございました。
python - LinuxでPythonからC関数を動的に挿入する方法(LD_PRELOADなし)?
実行時に (いいえ)、 Linux のLD_PRELOAD
ように C 関数をインターセプト/フックするにはどうすればよいですか? fopen()
これを Python から実行したいと思います (したがって、プログラムは既に CPython VM を実行していると想定しています)。また、Python コードに再ルーティングします。共有ライブラリ関数をフックするだけで問題ありません。また、プログラムの実行方法を変更せずにこれを行いたいと思います。
1 つのアイデアは、に基づいて独自のツールを作成するか、PLTptrace()
と一緒にまたは PLT で見つかったコードを書き換えて、生成された C 呼び出し可能な関数dlsym()
をターゲットctypes
にすることですが、最初にここで質問すると思いました。ありがとう。
c - dlsym による関数割り込みのクリーンアップ
malloc ラッパーとして、次の従来のコード スニペットを使用します。
プログラムの最後に dlsym によって割り当てられたバッファがまだあるため、Valgrind は動揺します。
これらのリソースを解放するにはどうすればよいですか? ありがとう
macos - OS X システム コールの割り込み
クローズドソース ソフトウェアの欠陥を克服するために、いくつかの OS X システム コールを挿入する(元の関数の代わりに自分の関数を呼び出す)必要があります。
結果として得られるソリューションは 10.5 (Leopard) 以降で機能することが望ましいですが、議論が十分に強力であれば、10.6 (Snow Leopard) を要求できるかもしれません。
結果として得られるソリューションは実行可能ファイルであることが望ましいですが、私はスクリプトで解決するかもしれません。
結果として得られるソリューションは、ターゲット アプリケーションが実行された後でも介入(「ベクトルを盗む」)できることが望ましいですが、アプリケーションのロード中に自分自身を挿入する必要があるテクノロジに落ち着くことができます。
結果として得られるソリューションは C または C++ で開発されることが望ましいですが、Objective-C などで解決することもできます。
これまでのところ、次のことを試しました。
1) DTraceスクリプトは私に多くのことを教えてくれましたが、D 言語の制限(制限されたフロー制御など)により、結果がスクリプトになることは言うまでもなく、私がやっていることは大きな苦痛になります。これは、私が撮影しているものほど整然とした自己完結型ではありません。
2) DYLD_INSERT_LIBRARIES介入。これは多くの点で滑らかですが、おそらく名前空間の平坦化が原因で(これが何を意味するのかを深く理解するふりはしません)、より単純な実行可能ファイルに対してはうまく機能しますが、ビルドしてもターゲット アプリケーションがチョークします。実際には呼び出しを介在させない何もしないライブラリ。
私の最新のアイデアは、mach_star ( https://github.com/rentzsch/mach_star ) を試してみることですが、まずここでやめて、常に私よりも多くのことを知っている Stack Overflow コミュニティに尋ねます...
…次は mach_star 以外を見てみようかな。
macos - 実行する前に新しいプロセスのPIDを取得するにはどうすればよいですか?
inject_and_interposeコードを使用してインジェクションとインターポーズを実行できるように、実際に実行する前に、新しく起動したプロセス(一般的なクローズドソースユーザーアプリケーション)のPIDを取得する方法が必要です。
明確にするために、私は単に「すぐに気付く」よりもうまくやる必要があります。ポーリングしたり、アクションを実行するまでにプロセスがすでに数ミリ秒実行されていることを意味する非同期通知を受信したりすることはできません。
単一のステートメントが実行される前に、注入と介入を行う機会が必要です。
特定の名前のプロセスが発生したときに同期的に通知されるバックグラウンドプロセスを作成することはできます。また、ターゲットアプリケーションを起動するランチャーアプリケーションを作成することもできます。
すべてのソリューションは、少なくとも10.5(Leopard)から10.8(Mountain Lion)未満の64ビットコードをサポートする必要があります。
これが非常に単純であることが判明した場合は、先に進んで、OSXを初めて使用することを認めます:)ありがとうございます。
macos - OS X システム コールは、システム全体でオーバーライドまたは挿入できますか?
OS X Lion の下で作業している私は、最近、コード インジェクションを使用して、プロセスごとにシステム コールを挿入する作業を行いました。
私はその過程で多くのことを学びましたが、少なくとも研究目的では、 などの特定のシステム関数へのすべてのpwrite
呼び出しを「単に」挿入することが可能であれば、より理にかなっているように見えます。
すべてのプロセスから特定のシステム コール (例: ) を呼び出すたびに、OS の代わりにコードを呼び出すことはできますか?pwrite
もしそうなら、どのプロセスが呼び出しを行ったかを知ることができますか?
編集:私の質問の性質上、誰も私がマルウェアの作成者だと思わないように、私が今ここにいる理由を説明し、私が尋ねていることを尋ねます。
私は、クローズドソース ソフトウェアの大きくて複雑な部分を正常に動作させようとしています。ベンダーが修正するのを待ちませんか?2 年前、彼らは別の政党を非難し始めましたが、その政党はすぐに反論しました。この状況はばかげており、このソフトウェアは、創造的かつ技術的に高度な努力に対して 1 時間あたり数百ドルを請求する映画やビデオ制作の人々によって使用されており、無駄であってはならないため、どちらの当事者の支援もなしに克服することを試みる価値があります。ツールと格闘する彼らの時間。
これまでの私の取り組みの問題点は、問題の原因を見つけるためにコード インジェクションと介入を使用する必要があることです(これは、上記で「調査」と呼んでいるものです)。問題の原因を見つけたら、解決策はインジェクションと介入、または動的ライブラリの置換、またはあいまいな低レベル システムのチューニング、または誰が何を知っているかである可能性もあります。私が分析しているソフトウェアは無秩序に広がっており、他のフレームワーク、ライブラリ、およびバックグラウンド タスクを利用しています。その一部は OS X の一部であり、一部は問題のソフトウェア パッケージの一部です。コンポーネントごとのコード インジェクションとインターポーズは少しおかしくなっています。そのため、システム コールの最後で何が起こっているかをスパイしたいので、たとえば次のように確認できます。pwrite
コールの発信とコールの詳細。
この説明が役に立ち、誰かが私を正しい方向に向けてくれることを願っています. ありがとう!