bash 文件包含可执行/二进制代码

bash 文件包含可执行/二进制代码

我找到了这个工具当我下载它时,它是一个包含二进制代码的 bash 可执行文件。
首先我不知道这是可能的。有谁知道谁可以做到这一点?另外,我不确定这通常有多安全,因为我无法真正确定 bash 文件包含什么

答案1

这是一个独立的 Java 程序,它依赖于一些“技巧”:

  • Java 程序可以打包为 JAR 文件,这些文件是包含清单 ( META-INF/MANIFEST.MF) 的 ZIP 文件,该清单指定要启动的 Java 类;
  • java -jar给定一个 JAR 文件,将查看清单并启动相应的类,从 JAR 文件和 Java 运行时加载任何其他所需的资源(也可以指定要运行的另一个类,但这与这里无关);
  • ZIP 文件可以以任意数据开头;这就是自解压可执行文件的工作原理(可执行 ZIP 文件在运行时会自行解压)。

svg2pngJAR 文件也是如此,但带有前置的 shell 脚本:

#!/bin/sh

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

运行时,这将运行一个 shell,然后将其自身替换为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 文件由其“中心目录”标识,该目录位于结束文件的。

相关内容