Wie kann ich mein Shell-Skript entweder verschlüsseln oder unlesbar machen?


9

Wie kann ich mein Shell-Skript verschlüsseln oder verschlüsseln, damit es mit bloßem Auge nicht lesbar ist? Jede Methode wäre akzeptabel. Bitte geben Sie bestimmte Schritte an.


Meiner Meinung nach hat shc einige Mängel: Ich habe ein laufendes Projekt zu Github (Obash), in dem ich versuche, diese Probleme anzugehen. Vielleicht möchten Sie sehen, ob es besser zu Ihnen passt als shc.
Louigi600

Antworten:


11

SHC

Sie können die auf dieser Website beschriebenen Schritte mit dem Titel " So verschlüsseln Sie Ihr Bash Shell-Skript unter Linux mit SHC" ausführen . Dieser Artikel beschreibt die Verwendung eines Tools namens SHC - Shell Script Compiler .

URL-Ressourcen

Dies ist eine ausführbare Datei, die Sie mit gcc / g ++ erstellen müssen.

Verwendungszweck

$ ./shc -f random.sh

Sobald Sie es ausführen, wird Ihr Shell-Skript random.shin diese Datei konvertiert:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

Ist das narrensicher?

Nein, es gibt eine gute Analyse der vom SHC-Tool verwendeten Methode, die zeigt, dass sie nicht übermäßig stark ist und umgangen werden kann, wenn Sie wissen, was Sie tun. Der Artikel wurde auf der Website linuxjournal.com mit dem Titel: Paranoid Penguin - Limitations of shc, ein Shell Encryption Utility, veröffentlicht .

HINWEIS: Diese Werkzeugklassen werden wahrscheinlich besser als Verschleierer beschrieben.


@sim Danke. Gibt es eine Möglichkeit, dieses Skript zu entschlüsseln?
Ram

@ Ram - ja das ist keineswegs kinderleicht. Was versuchst du zu verstecken? Benutzer- / Passwortinformationen oder wie funktioniert das Skript?
slm

@sim Ich versuche zu verbergen, wie das Skript funktioniert?
Ram

@Ram - OK, dafür ist es wahrscheinlich in Ordnung. Ich würde es nicht empfehlen, um Passwörter zu verbergen. Als ich diese App ausprobierte, verhielt sie sich auf meinem Computer etwas seltsam. Ich würde es versuchen, aber die resultierenden ausführbaren Dateien wurden gestartet, als wären sie im Hintergrund, und ich musste den Befehl fgausführen, um sie in den Vordergrund zu bringen, und dann funktionierte es einwandfrei. Ich suche immer noch nach Alternativen.
slm

9
Trotz des Namens verschlüsselt SHC das Skript nicht auf sinnvolle Weise. Verschlüsselung bedeutet, dass es vor der Verwendung entschlüsselt wird. Wenn das Skript ausgeführt werden kann, muss es zuerst entschlüsselt werden und kann an diesem Punkt extrahiert werden. Das Transformieren eines Programms, um das Verständnis zu erschweren, ohne sein Verhalten zu ändern, wird als Verschleierung bezeichnet. Es lohnt sich sehr, sehr selten, und für ein Shell-Skript ist das eine grobe Überschätzung seiner Nützlichkeit.
Gilles 'SO - hör auf böse zu sein'

29

Wenn Sie ein Shell-Skript verschlüsseln möchten, verwenden Sie GPG . Wer Ihr Skript ausführen möchte, muss es natürlich zuerst entschlüsseln.

Wenn Sie möchten, dass jemand das Skript ausführen, aber nicht lesen kann, ist dies ein völlig anderes Problem, das nichts mit Verschlüsselung zu tun hat. Es heißt Verschleierung .

Wenn Sie ein Passwort oder andere vertrauliche Informationen in diesem Skript haben, wird es durch keine Verschleierung ausgeblendet. Früher oder später verwendet das Skript das Passwort, um etwas zu tun, und an diesem Punkt erscheint das Passwort jedem, der danach sucht, deutlich.

Wenn Sie die Funktionsweise Ihres Skripts verbergen möchten, weil Sie befürchten, dass jemand es kopiert, vergessen Sie es. Niemanden interessierts.

Wenn Sie Ihr Skript ausblenden möchten, weil Sie sich für seine Qualität schämen, beheben Sie es.

Wenn Sie die Funktionsweise Ihres Skripts verbergen möchten, weil Sie die Funktionsweise Ihres Skripts verbergen möchten, ist dies nicht möglich. Jemand kann sich Ihr Skript ansehen, während es ausgeführt wird, und beobachten, was es tut.

Wenn Sie so weit gelesen haben und Ihr Skript dennoch „verschlüsseln“ möchten, verstehen Sie etwas Wichtiges falsch. Senden Sie Ihr Skript nicht an Dritte oder im Klartext.


4
+1 für 'niemand kümmert sich'. außer dass es einigen etwas ausmacht - ich würde einen Blick auf ein verschleiertes Shell-Skript werfen und denken, "auf keinen Fall werde ich das auf meinem System ausführen".
Cas

1
Sorry, die Leute kümmern sich darum und es ist wichtig. Sie haben eine Perspektive und es gibt eine alternative Perspektive. Beide werden es nehmen. In der Zwischenzeit funktioniert die Antwort unten für mich zunächst gut. Meistens möchten wir uns vor gelegentlichen Hackern / Benutzern schützen. Verstehe gut, dass entschlossene Hacker alles durchbrechen werden.
Anil

@anil Sie schützen nur vor Personen, die nicht klug oder kompetent genug wären, um etwas mit dem Quellcode zu tun. Sie fühlen sich vielleicht besser, aber Sie sind nicht sicherer.
Gilles 'SO - hör auf böse zu sein'

@ Gilles Vielleicht habe ich dich falsch gelesen. Ich versuche tatsächlich, mich vor Leuten zu schützen, die befugt sind, etwas mit dem Quellcode zu tun, wenn sie ihn haben (Quellcode = Inhalt des Skripts). Nur diese Leute wissen möglicherweise nicht, wie man eine verschlüsselte Datei hackt, ohne große Probleme damit zu haben, herauszufinden, wie. Gegen die wirklich entschlossenen _ stimme ich zu, dass es keine wirklich guten Abwehrkräfte gibt.
Anil

11

Ich habe dies bei der Suche im Internet mit freundlicher Genehmigung von Claudio P. erhalten.

  1. Schreiben Sie Ihr Skript (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
  2. Verschlüsseln Sie Ihr Skript (geben Sie ein Passwort ein):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. Schreiben Sie de Wrapper (script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
  4. Führen Sie "script-final.sh" aus, geben Sie das Kennwort ein, und das Skript wird ausgeführt, ohne das Nur-Text-Skript auf die Festplatte zu schreiben.


1

Grundsätzlich können Sie Ihr Skript verschleiern, aber nicht kompilieren. Der einfache Grund ist, dass Shell-Skripte einzelne Befehle interpretieren, die einzeln vom System ausgeführt werden müssen, und dass Sie diese Befehle so sehen können, wie sie einzeln vom System mit dem sh -xFlag (und möglicherweise auch -v) ausgeführt werden Flagge)

Für die meisten Programmierer reicht das aus, um zu verstehen, was los ist.

Sie können Ihre Variablen und den allgemeinen Ablauf verschleiern, wenn Sie möchten, aber Sie können nicht die einzelnen Befehle verschleiern, die von Ihrem Programm ausgeführt werden - bei Shell-Skripten sind dies normalerweise alle .

Die einfachste Lösung besteht wahrscheinlich darin, das Shell-Skript in einer kompilierten Sprache wie C neu zu schreiben.


1
Sogar eine kompilierte Binärdatei kann zerlegt und rückentwickelt werden, wenn eine ausreichend bestimmt ist.
Joseph R.

3
Alles, was ausführbar ist, kann rückentwickelt werden. Die Anforderung hier war, dass es für das bloße Auge unlesbar sein sollte
Thorbjørn Ravn Andersen

Ich kenne. Ich hinterlasse nur eine Notiz für zukünftige Leser.
Joseph R.

-2

Versuchen Sie, Ihr Skript an diese Site zu senden, wenn Sie es vor der Öffentlichkeit verbergen möchten.

Während viele mit der Idee, den Quellcode eines in einer interpretierten Sprache geschriebenen Skripts zu verschlüsseln oder zu verschleiern, nicht einverstanden sind, verstehe ich, warum die Leute dies tun wollen.

Als jemand, dem seine Arbeit oft gestohlen wurde, ist es mir einfach egal, ob "Verschleierung" oder "Verschlüsselung" ein Tabu ist. Solange mein Skript geschützt ist und wie vor der Verschlüsselung funktioniert, bin ich ziemlich zufrieden. Nie wieder werde ich jemand anderem erlauben, meine Ideen zu übernehmen und damit zu rennen. und nein, das Schreiben meines Skripts in einer kompilierten Sprache ist keine Option. Ich weiß nicht wie.

Wenn Sie die oben genannte Site nicht verwenden möchten, versuchen Sie es mit der neuesten Version von shc. Ich glaube, sie haben es in Github aktualisiert, um die vielen Sicherheitsbedenken auszuräumen, die andere erwähnt haben. Geben Sie Folgendes in Google " shc github " ein und Sie sehen eine Vielzahl verfügbarer Optionen, die Sie ausprobieren können.

Viel Glück!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.