2015-06-21 3 views
6

Загружаю archive file. В архиве будет файл с .sh. расширение. Когда я открыл файл с VI Я нашел следующий код в начало файла:Сценарий оболочки с файлом jar в конце

#!/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 "[email protected]" 
exit 1 

я могу запустить банку, выполнив java -jar file или `./file».

Может кто-нибудь объяснить мне, что происходит? Как вы можете создать такой файл?

+1

Хм, я удивлен, что это работает. Я думал, что JAR-файл был всего лишь ZIP-файлом с другим расширением, и ZIP должен начинаться с определенного заголовка. Можете ли вы дать ссылку на скачивание? – Thomas

+0

Каков результат команды 'file '? –

+0

@EugeniuRosca это принт данные.Я добавил ссылку на файл, если вы хотите его протестировать. – Hunsu

ответ

3

Попробуйте сами следующие команды. Начните создавать обычный файл 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 

другими словами, как правило, банку/распаковать скачет любое содержимое, пока их голову э. Более того, сценарий оболочки «заканчивается» в строке, которая вызывает «exec» (поскольку интерпретатор интерпретатора заменяет в этой точке командой в строке exec).

Однако этот трюк основан на поведении jar/unzip, возможно, вне стандартов. Обратите внимание, например, на то, что этот оператор не работает (не имеет последствий):

jar -xf mytrick.jar 
3

Если файл после извлечения файла дегтя start-superbeam.sh пытается делать chmod +x start-superbeam.sh && ./start-superbeam.sh или /bin/sh ./start-superbeam.sh.

Если у программы есть аргументы, поставьте их в конце. Он будет запускать java на том, что superbeam.sh, который как файл jar в конце.

Если вам нужны специальные параметры java, такие как размер памяти, вы должны установить их в переменной окружения java_args.

Что касается этого, это скрипт оболочки с файлом jar в конце его после exit. Цитирую ReallyExecutable Jars:

Там давно хак известный в некоторых кругах, но не широко известно, чтобы банки реально выполнимый в CHMOD + х смысле. В hack используется тот факт, что файлы jar являются zip-файлами, а файлы zip позволяют произвольно использовать трещины для самого zip-файла (так работают самораспаковывающиеся zip-файлы).

Что касается создания, см. Принятый ответ или ссылку.

+0

Я бы принял ваш ответ, если вы добавили детали, которые приведены в статье, которую вы связываете. – Hunsu

Смежные вопросы