Comment puis-je chiffrer ou rendre mon script shell illisible?

9

Comment chiffrer ou brouiller mon script shell pour qu'il soit illisible à l'œil nu? L'une ou l'autre méthode serait acceptable, veuillez fournir des étapes spécifiques.

RAM
la source
À mon avis, shc a quelques lacunes: j'ai un projet en cours sur github (obash) où j'essaie de résoudre ces problèmes. Vous aimerez peut-être voir si cela vous convient mieux que shc.
louigi600

Réponses:

11

SHC

Vous pouvez essayer les étapes décrites sur ce site Web, intitulées: Comment chiffrer votre script shell Bash sous Linux à l'aide de SHC . Cet article explique l'utilisation d'un outil appelé SHC - Compilateur de scripts Shell .

Ressources URL

Il s'agit d'un exécutable que vous devrez créer à l'aide de gcc / g ++.

Usage

$ ./shc -f random.sh

Une fois que vous l'exécutez, votre script shell random.shsera converti dans ce fichier:

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

Est-ce infaillible?

Non, il y a une bonne analyse de la méthode utilisée par l'outil SHC qui montre qu'elle n'est pas trop forte et peut être contournée si vous savez ce que vous faites. L'article a été publié sur le site linuxjournal.com, intitulé: Paranoid Penguin - Limitations of shc, a Shell Encryption Utility .

REMARQUE: ces classes d'outils sont probablement mieux décrites comme des obscurcisseurs.

slm
la source
@sim Merci. Existe-t-il un moyen de décrypter ce script ???
Ram
@Ram - oui ce n'est en aucun cas infaillible. Qu'essayez-vous de cacher? Informations sur l'utilisateur / mot de passe ou comment fonctionne le script?
slm
@sim j'essaye de cacher comment fonctionne le script?
Ram
@Ram - OK c'est probablement OK pour ça, je ne le recommanderais pas pour essayer de cacher les mots de passe. Lorsque j'ai essayé cette application, elle se comportait un peu bizarrement sur mon ordinateur. Je l'essayerais, mais les exécutables résultants se lancaient comme s'ils étaient en arrière-plan, et j'ai dû exécuter la commande fgpour l'amener au premier plan, puis cela a bien fonctionné. Je cherche toujours des alternatives.
slm
9
Malgré son nom, SHC ne crypte pas le script de manière significative. Le chiffrement implique qu'il est déchiffré avant utilisation. Si le script peut être exécuté, il doit d'abord être déchiffré et peut être extrait à ce stade. Transformer un programme pour le rendre plus difficile à comprendre sans changer son comportement est appelé obscurcissement. C'est très très très rarement utile, et pour un script shell, c'est une surestimation grossière de son utilité.
Gilles 'SO- arrête d'être méchant'
29

Si vous souhaitez crypter un script shell, utilisez GPG . Celui qui veut exécuter votre script devra bien sûr le décrypter en premier.

Si vous voulez que quelqu'un puisse exécuter le script sans le lire, c'est un problème complètement différent qui n'a rien à voir avec le cryptage. C'est ce qu'on appelle l' obscurcissement .

Si vous avez un mot de passe ou d'autres informations confidentielles dans ce script, aucune obfuscation ne le masquera. Tôt ou tard, le script utilisera le mot de passe pour faire quelque chose et à ce stade, le mot de passe apparaîtra clairement à quiconque le recherchera.

Si vous voulez masquer le fonctionnement de votre script parce que vous avez peur que quelqu'un le copie, oubliez-le. Tout le monde s'en fout.

Si vous souhaitez masquer votre script parce que vous avez honte de sa qualité, corrigez-le.

Si vous voulez masquer le fonctionnement de votre script parce que vous voulez cacher ce qu'il fait, ce n'est pas faisable. Quelqu'un peut regarder votre script pendant son exécution et regarder ce qu'il fait.

Si vous avez lu jusqu'ici et que vous souhaitez toujours «crypter» votre script, vous vous méprenez sur quelque chose de majeur. N'envoyez votre script à personne et ne l'envoyez pas en texte brut.

Gilles 'SO- arrête d'être méchant'
la source
4
+1 pour «personne ne s'en soucie». sauf que certains do soins - je prendrais un coup d' oeil à un script shell et obfuscation pense que « aucun enfer je vais courir que sur mon système ».
cas
1
Désolé, les gens s'en soucient et c'est important. Vous avez une perspective et une autre perspective existe. Les deux auront des preneurs. En attendant, la réponse ci-dessous fonctionne bien pour moi pour commencer. La plupart du temps, nous voulons nous protéger des pirates / utilisateurs occasionnels. Comprenez bien que les pirates déterminés vont traverser n'importe quoi.
anil
@anil Vous vous protégez uniquement contre les personnes qui ne seraient pas suffisamment intelligentes ou compétentes pour faire quoi que ce soit avec le code source. Cela peut vous faire vous sentir mieux, mais cela ne vous rend pas plus sûr.
Gilles 'SO- arrête d'être méchant'
@ Gilles peut-être que je vous ai mal lu. J'essaie en fait de me protéger contre les gens qui sont compétents pour faire quelque chose avec le code source s'ils l'ont (code source = contenu du script). Seules ces personnes peuvent ne pas savoir comment pirater un fichier chiffré sans avoir beaucoup de mal à comprendre comment. Contre le vraiment déterminé _ Je suis d'accord qu'il n'y a pas vraiment de bonnes défenses.
anil
11

J'ai compris cela en cherchant sur Internet, avec la permission de Claudio P.

  1. Écrivez votre script (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
    
  2. Chiffrez votre script (donnez un mot de passe):

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

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
    
  4. Exécutez "script-final.sh", entrez le mot de passe et le script s'exécutera sans écrire le script en texte brut sur le disque.

P ....
la source
1

Fondamentalement, vous pouvez masquer mais pas compiler votre script. La raison simple est que les scripts shell sont interprétés des commandes individuelles qui doivent être exécutées une par une par le système, et que vous pouvez voir ces commandes lorsqu'elles sont exécutées une par une par le système avec l' sh -xindicateur (et peut-être aussi le -v drapeau)

Pour la plupart des programmeurs, cela suffira pour comprendre ce qui se passe.

Vous pouvez obscurcir vos variables et votre flux général si vous le souhaitez, mais vous ne pouvez pas obscurcir les commandes individuelles exécutées par votre programme - qui pour les scripts shell sont généralement toutes .

La solution la plus simple consiste probablement à réécrire le script shell dans un langage compilé comme C.

Thorbjørn Ravn Andersen
la source
1
Même un binaire compilé peut être désassemblé et reconstitué s'il est suffisamment déterminé.
Joseph R.
3
Tout exécutable peut être rétroconçu. L'exigence ici était qu'elle devrait être illisible à l'œil nu
Thorbjørn Ravn Andersen
Je connais. Je laisse juste une note aux futurs lecteurs.
Joseph R.
-2

essayez de soumettre votre script à ce site si vous souhaitez le cacher au public.

alors que beaucoup peuvent être en désaccord avec l'idée de chiffrer ou de brouiller le code source d'un script écrit dans un langage interprété, je comprends pourquoi les gens veulent faire ça.

en tant que quelqu'un qui s'est fait voler son travail plusieurs fois, je me fiche de savoir si "l'obscurcissement" ou le "cryptage" est un tabou. tant que mon script est protégé et qu'il fonctionne comme avant le cryptage, je suis assez content. plus jamais je ne laisserai quelqu'un d'autre prendre mes idées et courir avec. et non, écrire mon script dans une langue compilée n'est pas une option. je ne sais pas comment.

de toute façon, si vous ne souhaitez pas utiliser le site mentionné ci-dessus, essayez la dernière version de shc. Je pense qu'ils l'ont mis à jour dans github pour répondre aux nombreuses préoccupations de sécurité que d'autres ont mentionnées. tapez ce qui suit dans google " shc github " et vous verrez une multitude d'options disponibles que vous pouvez essayer.

bonne chance!

Surveillance de Nagios
la source