2010-08-04 13 views
5

Vor einiger Zeit schrieb ich einige Bash-Skripte für meine Schule. Ich dachte, es wäre sehr schlau, sie zu "schützen", also habe ich sie mit shc in eine Binärdatei kompiliert. Einige Wochen später habe ich die unkompilierten Skripte verloren und jetzt sind nur noch meine Binärdateien übrig.Abrufen von Nur-Text-Skript aus kompilierten Bash-Skript

Gibt es eine Möglichkeit, die Skripts aus den shc generierten Binärdateien zurück zu erhalten? Ich schaute in den Quellcode von shc, um einen Weg zu finden, die Binarys ohne Glück zu dekompilieren.

+4

Hoffentlich lernen Sie Ihre Lektion und starten ein Versionskontrollsystem! (Git ist ein großartiger) – Daenyth

Antwort

48

Mit SHC Ihre Skripte zu kompilieren geschrieben hat ist sie nicht schützen. Sie erhalten auf diese Weise nicht mehr Sicherheit. Die shc kompilierte Binärdatei entschlüsselt und lädt das Skript beim Start in den Speicher. Sie könnten dann, direkt nachdem Sie die Binärdatei gestartet haben, diese einfach segfault und Ihr Skript aus dem Arbeitsspeicher abrufen.

Hier ist ein kleines Beispiel-Script test.sh genannt:

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

Kompilieren mit SHC:

shc -f test.sh 
es als Hintergrundprozess starten

und segfault es sofort:

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

sleep 0.2 gibt der Binärdatei genug Zeit, um das ursprüngliche Skript zu starten und zu entschlüsseln. Die Variable $! enthält die PID des letzten gestarteten Hintergrundprozesses, so dass wir sie leicht mit dem Segmentierungsfehlersignal SIGSEGV löschen können (dasselbe wie kill -11 $!).

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

Jetzt können wir den Dump für das Original-Skript suchen:

cat core | strings 

Wir Rohr die Daten in der dumpfile in Strings, die dann uns zeigen, die alle druckbaren Zeichen in der Datei und wir können sieht nun das Original-Skript zwischen dem Müll:

... 
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 ist ziemlich groß, vielleicht müssen Sie die Kerndateigröße mit ulimit einzustellen. Ziemlich einfach, oder?

+0

Ich würde dies mehr als einmal abstimmen, wenn ich könnte. Gute Antwort! –

3

Halten Sie es einfach! :)

Um die Skripte zurück von den shc generierten Binärdateien zu erhalten, speichern Sie einfach die Kopie der ursprünglichen sh System ausführbare Datei, dann Katzen System ausführbare Datei umbenennen sh und führen Sie die shc generierte binäre :) So sehen Sie die entschlüsselte Quelle von das Shell-Skript in der Konsole.

+1

Bitte seien Sie vorsichtig mit dem Ersetzen des Systems sh, kann viel schief gehen ... Sie könnten dies in einer chroot Umgebung tun –

+0

Könnten Sie dies weiter ausführen – mebjas

-1

UnSHc, ein automatisches Skript zum Wiederherstellen * verschlüsselter * .sh.x-Dateien, die mit dem SHc-Tool verschlüsselt wurden, wurde unter github here veröffentlicht.

UnSHc ist ein Tool zum Rückgängigmachen der Verschlüsselung von SHc-verschlüsselten * .sh.x-Skripten. Es basiert auf der automatischen Extraktion aller kryptografischen Daten, die im * .sh.x eingebettet sind, indem es automatisch umgekehrt wird. Mit diesen kryptografischen Daten (die bei der Verschlüsselung verwendet werden) erstellt das Tool die ursprüngliche * .sh-Datei im Klartext neu.

Wie UnSHc zu verwenden:

[[email protected]:~/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 

Demonstration Video here (in Englisch und Französisch) zu sehen ist.

+3

Ein Link zu einer möglichen Lösung ist immer willkommen, aber bitte [Kontext hinzufügen um den Link] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers/8259#8259) so Ihre Mitbenutzer werden einige haben Idee was es ist und warum es da ist. Zitiere immer den relevantesten Teil eines wichtigen Links, falls die Zielseite nicht erreichbar ist oder permanent offline geschaltet wird. Berücksichtigen Sie, dass das * kaum mehr als ein Link zu einer externen Site * ein möglicher Grund dafür ist, [warum und wie werden einige Antworten gelöscht?] (Http://stackoverflow.com/help/deleted-answers). –

+0

Angesichts der Tatsache, dass dies nur Englisch ist, scheint ein Link zu Informationen, die nur auf Französisch verfügbar sind, unangebracht. –

Verwandte Themen