プログラムで生成された一時ファイルを傍受する方法は? [コピー]

プログラムで生成された一時ファイルを傍受する方法は? [コピー]

長い話を短く:プログラムが作成されてから削除されることを知っています/tmp。これを確認するためにどのようにブロックできますか?

コンテキスト:

私が信頼していない特定のファイルが1つあります.jar。何らかの理由で、そのファイルのソースコードにはftmメソッドと接続設定機能が含まれていますstrace。 、Unixドメインソケットを意味するわけではないがAF_INET6)。 Wiresharkで確認したところ、使用中に発信TCPまたはUDP接続が見つかりませんでした。

それでも、私はそれを信じていません。出力から一時ファイルを作成してから削除するstraceのがわかります。/tmpこれらのファイルを傍受して内容を確認する方法はありますか?

答え1

より良い方法は、悪意のあるJavaバイナリをリバースエンジニアリングしたい場合は、ファイルを傍受するのではなく、疑わしい.jarファイルをデコンパイルすることです。

これには、次のものを使用できます。CFR - 別のJavaデコンパイラ

CFRはJava 9の大部分を含む最新のJava機能をデコンパイルしますが、Java 6で完全に書かれており、どこでも使用できます。

使用するには、デコンパイルするクラス名(クラスファイルのパスまたはクラスパスの完全修飾クラス名)で特定のバージョンのjarを実行するだけです。 (--helpにはパラメータが一覧表示されます)。

または、jar全体をデコンパイルするにはjarパスを指定し、ファイルをエクスポートするには(おそらくそうします)、--outputdir /tmp/putithereを追加します。

代替案が不足しているわけではありませんが、CFRプロジェクトは2018年のアップデートを通じてよく維持されているようです。

免責事項:私は2005年以来、Java / JARバイナリをリバースエンジニアリングしたことがありません。

答え2

ノート:改善されたソリューション重複した質問に投稿

読書から一時ファイルを作成した後に直接アクセスするにはどうすればよいですか?inotifyファイル自体へのハードリンクを使用して作成する方法を考えました。もちろん、これはハードリンクが作成される前にファイルのリンクが解放される可能性があるため、競合状態ですが、アプリケーションによって生成された一時ファイルのデータを回復しました。これは、実際のコマンドを実行するターミナルタブBと共にターミナルタブAに結合された短いパイプです。

inotifywait -m -r /tmp/hsperfdata_xie/ 2>&1 | 
while IFS= read -r line; do 

    awk '$2 == "CREATE"{system("ln /tmp/hsperfdata_xie/"$3" /tmp/BACKUP")}' <<< "$line"
    echo "$line" # unnecessary, only if you want to know what's inotify is writing
done

3つの欠点は次のとおりです。

  • 競争条件(上記の通り)
  • awk私は特定のファイルを非常に迅速に分類しました。ただしawk、出力を解析し、inotifywatchパス名をファイル名に関連付けるより一般的で柔軟なコマンドは、行、変数、および転送のすべての内容を解析するのに時間がかかる場合があります。解析が完了したら、前のポイントに戻るときにリンク可能なファイルがあってはなりません。$1$3sprintf()system()
  • 2つの端末タブが必要ですが、1つはパイプライン全体をバックグラウンドに配置できます。より賢明なアプローチは、分岐した子プロセスを含む完全なPythonスクリプトを持ち、実際にinotifyPythonモジュールを使用することです(おそらく今後これを行うでしょう)。

0...sun.rt._sync_Inflations問題のファイルは、繰り返される発生と0...sun.rt._sync_Deflations文字列(おそらく以下に関連する)バイナリデータの形で表示されます。 Javaマルチスレッド)。しかし、この質問に関する限り、それは問題ではありません。私たちはすでにそれを持っています。私が望む唯一のことは、ファイル自体を取得することです。

関連情報