bashファイルには実行可能/バイナリコードが含まれています。

bashファイルには実行可能/バイナリコードが含まれています。

私はこれを見つけましたツールダウンロードしたときにバイナリコードを含むbash実行可能ファイルでした。
まず、これが可能かどうかわからなかった。誰がこれを行うことができるかを知っている人はいますか?また、bashファイルに何が含まれているのか実際には確認できないため、これが一般的にどれだけ安全かわかりません。

答え1

これはいくつかの「トリック」に依存するスタンドアロンJavaプログラムです。

  • META-INF/MANIFEST.MFJavaプログラムは、開始するJavaクラスを指定するマニフェスト()を含むZIPファイルであるJARファイルにパッケージ化できます。
  • java -jarJARファイルが与えられると、マニフェストが検証され、そのクラスが開始され、JARファイルとJavaランタイムから他の必須リソースをロードします(実行する他のクラスを指定することもできますが、ここでは関係ありません)。
  • ZIPファイルは任意のデータから始めることができます。これは自動解凍実行ファイルが機能する方法です(実行可能なZIPファイルは実行時に自動的に解凍されます)。

svg2pngJARファイルにも同様に適用されますが、前にシェルスクリプトが追加されます。

#!/bin/sh

exec java -Xmx1G -jar "$0" "$@"

実行すると、シェルが実行され、java -Xmx1G -jar「スクリプト」名(svg2png使用されたパスを使用)と引数に置き換えられます。この例では、-Xmx1Gヒープサイズを設定し、-jarJVMで指定されたJARファイルを「実行」するように指示します。svg2png残りはsvg2pngJARファイルで、具体的には次のマニフェストが含まれています。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: sterlp
X-Compile-Target-JDK: 1.8
X-Compile-Source-JDK: 1.8
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Main-Class: org.sterl.svg2png.Main

これはJVMにクラスを実行してorg.sterl.svg2png.Mainプログラムを起動するように指示します。

ZIP形式の詳細を確認できます。ウィキペディアで特に構造的な説明は、フォーマットがファイルの先頭(および他の場所)に任意のデータを配置できる方法を示しています。 ZIPファイルは「中央ディレクトリ」として識別されます。終わるファイル。

関連情報