7 Stimmen

Abrufen eines reinen Textskripts aus einem kompilierten Bash-Skript

Vor einiger Zeit habe ich einige Bash-Skripte für meine Schule geschrieben. Ich dachte, es wäre sehr clever, sie zu "schützen", also habe ich sie mit shc in eine Binärdatei. Einige Wochen später habe ich die nicht kompilierten Skripte verloren und jetzt habe ich nur noch meine Binärdateien.

Gibt es eine Möglichkeit, die Skripte aus dem shc generierten Binärdateien? Ich habe mir den Quellcode von shc Ich habe vergeblich versucht, einen Weg zur Dekompilierung der Binärdateien zu finden.

61voto

sloth Punkte 95218

Die Verwendung von shc zum Kompilieren Ihrer Skripte schützt diese nicht. Sie erhalten auf diese Weise nicht mehr Sicherheit. Die mit shc kompilierte Binärdatei entschlüsselt und lädt das Skript beim Start in den Speicher. Sie könnten dann direkt nach dem Start der Binärdatei einen Segfault ausführen und Ihr Skript aus dem Coredump abrufen.

Hier ist ein kleines Beispielskript namens test.sh:

#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"

Kompilieren Sie es mit shc:

shc -f test.sh

Starten Sie ihn als Hintergrundprozess und lassen Sie ihn sofort segfaulen:

./test.sh.x&  ( sleep 0.2 && kill -SIGSEGV $! )

sleep 0.2 gibt dem Binary genug Zeit, um zu starten und das Originalskript zu entschlüsseln. Die Variable $! enthält die PID des zuletzt gestarteten Hintergrundprozesses, so dass wir ihn leicht mit dem Segmentierungsfehlersignal SIGSEGV (wie kill -11 $!) beenden können.

[1]  + segmentation fault (core dumped)  ./test.sh.x

Jetzt können wir den Speicherauszug nach dem Originalskript durchsuchen:

cat core | strings

Wir leiten die Daten in der Dump-Datei an Strings weiter, die uns dann alle druckbaren Zeichen in der Datei anzeigen, und wir können jetzt das ursprüngliche Skript zwischen dem Müll sehen:

...
4.0.37(2)-release
BASH_VERSINFO
BASH_VERSINFO
release
i686-pc-linux-gnu
BASH_EXECUTION_STRING
BASH_EXECUTION_STRING
                           #! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
1000
EUID
EUID
1000
...

Wenn das Skript ziemlich groß ist, müssen Sie vielleicht die Größe der Kerndatei mit ulimit anpassen. Ziemlich einfach, oder?

4voto

belousov Punkte 31

Halten Sie es einfach! :)

Um die Skripte aus den von shc generierten Binärdateien zurückzubekommen, speichern Sie einfach die Kopie der ursprünglichen ausführbaren Datei sh, benennen Sie dann cat system executable in sh um und führen Sie die von shc generierte Binärdatei aus :) So sehen Sie den entschlüsselten Quellcode des Shell-Skripts in der Konsole.

3voto

ycam Punkte 11

UnSHc, ein automatisches Skript zur Wiederherstellung von *.sh.x verschlüsselten Dateien, die mit dem SHc-Tool verschlüsselt wurden, wurde veröffentlicht auf github hier .

UnSHc ist ein Werkzeug zur Umkehrung der Verschlüsselung eines beliebigen SHc-verschlüsselten *.sh.x-Skripts. Es basiert auf der automatischen Extraktion aller kryptographischen Daten, die in der *.sh.x eingebettet sind, und kehrt diese automatisch um. Mit diesen kryptographischen Daten (die bei der Verschlüsselung verwendet wurden), generiert das Tool die ursprüngliche *.sh-Datei im Klartext neu.

So verwenden Sie UnSHc :

[root@server:~/unshc]$ ./unshc.sh -h
 _   _       _____ _   _
| | | |     /  ___| | | |
| | | |_ __ \ `--.| |_| | ___
| | | | '_ \ `--. \  _  |/ __|
| |_| | | | /\__/ / | | | (__
 \___/|_| |_\____/\_| |_/\___|

--- UnSHc - The shc decrypter.
--- Version: 0.6
------------------------------
UnSHc is used to decrypt script encrypted with SHc
Original idea from Luiz Octavio Duarte (LOD)
Updated and modernized by Yann CAM
- SHc   : [http://www.datsi.fi.upm.es/~frosal/]
- UnSHc : [https://www.asafety.fr/unshc-the-shc-decrypter/]
------------------------------

[*] Usage : ./unshc.sh [OPTIONS] <file.sh.x>
         -h | --help                          : print this help message
         -a OFFSET | --arc4 OFFSET            : specify the arc4() offset arbitrarily (without 0x prefix)
         -d DUMPFILE | --dumpfile DUMPFILE    : provide an object dump file (objdump -D script.sh.x > DUMPFILE)
         -s STRFILE | --stringfile STRFILE    : provide a string dump file (objdump -s script.sh.x > STRFILE)
         -o OUTFILE | --outputfile OUTFILE    : indicate the output file name

[*] e.g :
        ./unshc.sh script.sh.x
        ./unshc.sh script.sh.x -o script_decrypted.sh
        ./unshc.sh script.sh.x -a 400f9b
        ./unshc.sh script.sh.x -d /tmp/dumpfile -s /tmp/strfile
        ./unshc.sh script.sh.x -a 400f9b -d /tmp/dumpfile -s /tmp/strfile -o script_decrypted.sh

Das Demonstrationsvideo ist zu sehen aquí (in englisch und französisch).

1voto

pmod Punkte 9810

Nur eine Vermutung Sie können Systemaufrufe aufzeichnen, indem Sie zum Beispiel strace oder etwas Ähnliches und versuchen Sie dann, zumindest die Grundfunktionen wiederherzustellen.

Oder Sie können den Autor von shc ( http://www.datsi.fi.upm.es/~frosal/quellen/shc.html ).

PS

Es geht das Gerücht um, dass jemand deshc geschrieben hat ( http://www.linuxjournal.com/article/8256 )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X