我下载了一个存档文件.在存档中将有一个文件,其中包含.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
Run Code Online (Sandbox Code Playgroud)
我可以通过执行java -jar file或"./file" 来运行jar .
有人可以解释一下发生了什么吗?你怎么能创建这样的文件?
自行尝试以下命令。开始创建包含任何内容的普通 jar 文件,或者使用您拥有的人。我将其命名为“myjar.jar”
接下来,创建一个文件“hello.sh”,其内容为:
#!/bin/bash
exec echo hello
Run Code Online (Sandbox Code Playgroud)
现在,在新 jar 文件的开头添加此文件:
cat hello.sh myjar.jar > mytrick.jar
chmod 700 mytrick.jar
Run Code Online (Sandbox Code Playgroud)
最后,有趣的部分,输入:
./mytrick.jar
jar -tf mytrick.jar
unzip mytrick.jar
Run Code Online (Sandbox Code Playgroud)
换句话说,通常 jar/unzip 会跳过任何内容,直到它们自己的标头。此外,shell 脚本在调用“exec”的行中“结束”(因为此时 shell 解释器被 exec 行中的命令替换)。
然而,这个技巧是基于 jar/unzip 的行为,可能不符合标准。请注意,例如,此语句失败(没有任何效果):
jar -xf mytrick.jar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |