Come posso crittografare o rendere illeggibile il mio script shell?


9

Come posso crittografare o rimescolare il mio script shell in modo che sia illeggibile ad occhio nudo? Entrambi i metodi sarebbero accettabili, si prega di fornire passaggi specifici.


A mio avviso, shc ha alcuni difetti: ho un progetto in corso su github (obash) in cui provo ad affrontare questi problemi. Potresti vedere se ti sta meglio, quindi shc.
louigi600,

Risposte:


11

SHC

Puoi provare i passaggi descritti in questo sito Web, intitolato: Come crittografare lo script Bash Shell su Linux usando SHC . Questo articolo discute l'uso di uno strumento chiamato SHC - Shell script Compiler .

Risorse URL

Questo è un eseguibile che dovrai compilare usando gcc / g ++.

uso

$ ./shc -f random.sh

Una volta eseguito, lo script della shell random.shverrà convertito in questo file:

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

Questo è infallibile?

No, esiste una buona analisi del metodo utilizzato dallo strumento SHC che mostra che non è eccessivamente forte e può essere aggirato se sai cosa stai facendo. L'articolo è stato pubblicato sul sito Web linuxjournal.com, intitolato: Paranoid Penguin - Limitazioni di shc, un'utilità di crittografia della shell .

NOTA: queste classi di strumenti sono probabilmente meglio descritte come offuscatori.


@sim Grazie. C'è un modo per decifrare quello script ???
Ram

@Ram - sì, questo non è assolutamente infallibile. Cosa stai cercando di nascondere? Informazioni utente / password o come funziona lo script?
slm

@sim sto cercando di nascondere come funziona lo script?
Ram

@Ram - OK probabilmente è OK, non lo consiglierei per cercare di nascondere le password. Quando ho provato questa app si stava comportando in modo un po 'strano sul mio computer. Ci proverei, ma gli eseguibili che ne risultavano si avviavano come se fossero in background, e ho dovuto eseguire il comando fgper portarlo in primo piano e poi ha funzionato bene. Sto ancora cercando alternative.
slm

9
Nonostante il nome, SHC non crittografa lo script in alcun modo significativo. La crittografia implica che viene decrittografato prima dell'uso. Se lo script può essere eseguito, deve essere prima decrittografato e può essere estratto in quel punto. Trasformare un programma per renderlo più difficile da capire senza cambiare il suo comportamento si chiama offuscamento. Molto, molto raramente, vale la pena, e per uno script di shell, questa è una grave sopravvalutazione della sua utilità.
Gilles 'SO- smetti di essere malvagio' l'

29

Se vuoi crittografare uno script di shell, usa GPG . Chiunque voglia eseguire il tuo script dovrà ovviamente decifrarlo prima.

Se vuoi che qualcuno sia in grado di eseguire lo script ma non di leggerlo, questo è un problema completamente diverso che non ha nulla a che fare con la crittografia. Si chiama offuscamento .

Se hai una password o altre informazioni riservate in quello script, nessuna quantità di offuscamento lo nasconderà. Prima o poi lo script utilizzerà la password per fare qualcosa e a quel punto la password apparirà chiaramente a chiunque la cerchi.

Se vuoi nascondere come funziona la tua sceneggiatura perché temi che qualcuno la copi, dimenticala. A nessuno importa.

Se vuoi nascondere la tua sceneggiatura perché ti vergogni della sua qualità, correggila.

Se vuoi nascondere come funziona la tua sceneggiatura perché vuoi nascondere ciò che fa, non è fattibile. Qualcuno può guardare la tua sceneggiatura mentre viene eseguita e guardare cosa sta facendo.

Se hai letto così lontano e vuoi ancora "crittografare" la tua sceneggiatura, stai fraintendendo qualcosa di importante. Non inviare lo script a nessuno o inviarlo in testo semplice.


4
+1 per "a nessuno importa". a parte il fatto che alcuni se ne curano - darei un'occhiata a uno script di shell offuscato e penserei "assolutamente no all'inferno lo farò funzionare sul mio sistema".
Cas

1
Scusa, la gente se ne frega ed è importante Hai una prospettiva ed esiste una prospettiva alternativa. Entrambi ne avranno l'acquirente. Nel frattempo la risposta qui sotto funziona bene per me per cominciare. Il più delle volte vogliamo proteggere da hacker / utenti occasionali. Comprendi bene che determinati hacker supereranno qualsiasi cosa.
anil,

@anil Stai proteggendo solo da persone che non sarebbero abbastanza intelligenti o competenti da fare qualsiasi cosa con il codice sorgente. Potrebbe farti sentire meglio, ma non ti rende più sicuro.
Gilles 'SO- smetti di essere malvagio' il

@gilles forse ti ho letto male. In realtà sto cercando di proteggere dalle persone competenti a fare qualcosa con il codice sorgente, se lo avevano (codice sorgente = contenuto dello script). Solo queste persone potrebbero non sapere come hackerare un file crittografato senza avere troppi problemi per capire come. Contro il veramente determinato _ Sono d'accordo che non ci sono davvero buone difese.
anil

11

Ho capito mentre cercavo Internet, per gentile concessione di Claudio P.

  1. Scrivi il tuo script (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
    
  2. Crittografa il tuo script (inserisci una password):

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

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
    
  4. Esegui "script-final.sh", inserisci la password e lo script verrà eseguito senza scrivere lo script in chiaro sul disco.


1

Fondamentalmente puoi offuscare ma non compilare la tua sceneggiatura. La semplice ragione è che gli script di shell sono interpretati come singoli comandi che devono essere eseguiti uno ad uno dal sistema e che questi comandi possono essere visualizzati uno dopo l'altro dal sistema con il sh -xflag (e forse anche -v bandiera)

Per la maggior parte dei programmatori sarà sufficiente capire cosa sta succedendo.

È possibile offuscare le variabili e il flusso generale se lo si desidera, ma non è possibile offuscare i singoli comandi eseguiti dal programma, che per gli script di shell di solito sono tutti .

La soluzione più semplice è probabilmente riscrivere lo script della shell in un linguaggio compilato come C.


1
Anche un file binario compilato può essere disassemblato e retroingegnerizzato se uno è abbastanza determinato.
Joseph R.,

3
Tutto il file eseguibile può essere retroingegnerizzato. Il requisito qui era che doveva essere illeggibile ad occhio nudo
Thorbjørn Ravn Andersen,

Lo so. Sto solo lasciando una nota per i futuri lettori.
Joseph R.,

-2

prova a inviare il tuo script a questo sito se desideri nasconderlo dalla vista pubblica.

mentre molti potrebbero non essere d'accordo con l'idea di crittografare o offuscare il codice sorgente di uno script scritto in un linguaggio interpretato, capisco perché la gente vuole farlo.

come qualcuno a cui è stato rubato il lavoro molte volte, semplicemente non mi interessa se "offuscamento" o "crittografia" è un tabù. fintanto che il mio script è protetto e funziona come prima della crittografia, sono abbastanza contento. mai più permetterò a qualcun altro di prendere le mie idee e correre con essa. e no, scrivere la mia sceneggiatura in un linguaggio compilato non è un'opzione. non so come.

comunque, se non si desidera utilizzare il sito di cui sopra, provare l'ultima versione di shc. Credo che lo abbiano aggiornato in github per affrontare le molte preoccupazioni di sicurezza che altri hanno menzionato. digita quanto segue in " shc github " di Google e vedrai una serie di opzioni disponibili che puoi provare.

in bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.