2015-06-21 14 views
6

Pobieram plik archive file. W archiwum znajdzie się plik o numerze .sh. rozbudowa. Kiedy otworzyłem ten plik z VI znalazłem poniższy kod na początku pliku:Skrypt powłoki z plikiem JAR na końcu

#!/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 

mogę uruchomić słoika wykonując java -jar file lub `./file”.

Czy ktoś może mi wyjaśnić, co się dzieje? Jak możesz stworzyć taki plik?

+1

Hmm, jestem zaskoczony, że to działa. Myślałem, że plik JAR był tylko plikiem ZIP z innym rozszerzeniem, a ZIP musi zaczynać się od konkretnego nagłówka. Czy możesz podać link do pobrania? – Thomas

+0

Co to jest wyjście polecenia 'file '? –

+0

@EugeniuRosca to drukowanie danych.Dodałem link do pliku, jeśli chcesz go przetestować – Hunsu

Odpowiedz

3

Spróbuj samodzielnie następujących poleceń. Zacznij tworzyć normalny plik jar z dowolną zawartością lub użyj kogoś, kogo masz. Będę go nazwać „myjar.jar”

Następnie należy utworzyć plik „hello.sh” z zawartością:

#!/bin/bash 

exec echo hello 

Teraz dodaj ten plik na początku nowego pliku jar:

cat hello.sh myjar.jar > mytrick.jar 
chmod 700 mytrick.jar 

I wreszcie, interesująca część wpisz:

./mytrick.jar 
jar -tf mytrick.jar 
unzip mytrick.jar 

innymi słowy, zwykle jar/rozpakuj pomija żadnych treści aż do własnej głowy er. Co więcej, skrypt powłoki "kończy się" w linii, która wywołuje "exec" (ponieważ interpreter powłoki jest w tym momencie zamieniany przez polecenie w linii exec).

Jednak ta sztuczka opiera się na zachowaniu słoika/rozpakowania prawdopodobnie poza standardami. Zauważmy na przykład, że ta instrukcja nie działa (nie ma efektów):

jar -xf mytrick.jar 
3

Jeśli plik po wyodrębnieniu pliku tar jest , uruchom-superbeam.sh spróbuj wykonać chmod +x start-superbeam.sh && ./start-superbeam.sh lub /bin/sh ./start-superbeam.sh.

Jeśli program ma argumenty, podaj je po zakończeniu. Uruchomi java na tym superbeam.sh, który jako plik jar na końcu.

Jeśli potrzebujesz specjalnych parametrów java, takich jak rozmiar pamięci, ustawisz je w zmiennej środowiskowej java_args.

Jeśli chodzi o to, co się dzieje, jest to skrypt powłoki z plikiem jar na końcu po exit. Zacytować ReallyExecutable Jars:

Istnieje od dawna hack znany w pewnych kręgach, ale nie są powszechnie znane , aby słoiki naprawdę wykonywalny, w chmod + x znaczeniu. Hack wykorzystuje fakt, że pliki słoików są plikami zip, a pliki zip umożliwiają automatyczne dodawanie dowolnego pliku do samego pliku zip (tak działają samorozpakowujące się pliki zip).

Informacje na temat tworzenia można znaleźć w zaakceptowanej odpowiedzi lub w linku.

+0

Przyjęłbym twoją odpowiedź, jeśli dodasz szczegóły podane w artykule, który łączysz. – Hunsu