我下载archive file。在存档中,将有一个.sh
的文件。延期。当我用VI打开该文件时,我在文件的开头找到了以下代码:
#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1
我可以通过执行java -jar file
或`./file'。
有人可以解释一下发生了什么吗?你怎么能创建这样的文件?
答案 0 :(得分:4)
自己尝试以下命令。开始创建包含任何内容的普通jar文件,或者使用您拥有的人。我将它命名为“myjar.jar”
接下来,创建一个包含内容的文件“hello.sh”:
#!/bin/bash
exec echo hello
现在,在新的jar文件的开头添加此文件:
cat hello.sh myjar.jar > mytrick.jar
chmod 700 mytrick.jar
最后,有趣的部分,输入:
./mytrick.jar
jar -tf mytrick.jar
unzip mytrick.jar
换句话说,通常jar / unzip跳过任何内容,直到他们自己的标题。此外,shell脚本在一行中“结束”,调用“exec”(因为shell解释器此时由exec行中的命令替换)。
然而,这个技巧基于jar / unzip的行为可能超出标准。请注意,例如,此语句失败(没有效果):
jar -xf mytrick.jar
答案 1 :(得分:3)
如果解压缩tar文件后的文件是 start-superbeam.sh ,请尝试chmod +x start-superbeam.sh && ./start-superbeam.sh
或/bin/sh ./start-superbeam.sh
。
如果程序有参数,请在结束后提供。它将在superbeam.sh上运行java,最后作为jar文件。
如果您需要特殊的java参数设置,例如内存大小,您可以在环境变量java_args
中设置它们。
至于发生了什么,这是一个shell脚本,在exit
之后的一端有一个jar文件。引用ReallyExecutable Jars:
长期以来,某些人都知道黑客攻击,但并不广泛 已知,使chars真正可执行,在chmod + x意义上。黑客 利用jar文件是zip文件和zip的事实 文件允许任意cruft被添加到zip文件本身 (这是自解压zip文件的工作原理)。
至于如何创建,请参阅接受的答案或链接。