私はこれを見つけましたツールダウンロードしたときにバイナリコードを含むbash実行可能ファイルでした。
まず、これが可能かどうかわからなかった。誰がこれを行うことができるかを知っている人はいますか?また、bashファイルに何が含まれているのか実際には確認できないため、これが一般的にどれだけ安全かわかりません。
答え1
これはいくつかの「トリック」に依存するスタンドアロンJavaプログラムです。
META-INF/MANIFEST.MF
Javaプログラムは、開始するJavaクラスを指定するマニフェスト()を含むZIPファイルであるJARファイルにパッケージ化できます。java -jar
JARファイルが与えられると、マニフェストが検証され、そのクラスが開始され、JARファイルとJavaランタイムから他の必須リソースをロードします(実行する他のクラスを指定することもできますが、ここでは関係ありません)。- ZIPファイルは任意のデータから始めることができます。これは自動解凍実行ファイルが機能する方法です(実行可能なZIPファイルは実行時に自動的に解凍されます)。
svg2png
JARファイルにも同様に適用されますが、前にシェルスクリプトが追加されます。
#!/bin/sh
exec java -Xmx1G -jar "$0" "$@"
実行すると、シェルが実行され、java -Xmx1G -jar
「スクリプト」名(svg2png
使用されたパスを使用)と引数に置き換えられます。この例では、-Xmx1G
ヒープサイズを設定し、-jar
JVMで指定されたJARファイルを「実行」するように指示します。svg2png
残りはsvg2png
JARファイルで、具体的には次のマニフェストが含まれています。
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ファイルは「中央ディレクトリ」として識別されます。終わるファイル。