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?
Hoffentlich lernen Sie Ihre Lektion und starten ein Versionskontrollsystem! (Git ist ein großartiger) – Daenyth