Ero in una situazione simile a questo non molto tempo fa. Ma sono riuscito a trovare un modo per nascondere il mio codice sorgente, almeno, abbastanza da scoraggiare la maggior parte dal tentativo di hackerarlo.
Contrariamente alla credenza comune, l'offuscamento e / o la crittografia degli script di lingua interpretati è possibile. La domanda è: hai il tempo (e la motivazione) da dedicare ad esso? Dovrai assicurarti che il metodo "offuscamento / crittografia" che utilizzi sia molto difficile da decifrare e che non rallenti i tempi di esecuzione dello script in modo evidente.
Se desideri crittografare uno script python, senza dover eseguire alcun lavoro da parte tua, puoi farlo utilizzando questo sito .
Ho testato il seguente script utilizzando il sito sopra menzionato e ha prodotto un risultato molto intimidatorio, che ha funzionato (almeno per i miei scopi):
#!/usr/bin/env python2
# vim: ft=python
import sys, json, urllib2
URL = 'http://127.0.0.1:8080/optimization/resources/_harness/status?_fields=health.summary'
try:
response = urllib2.urlopen(URL).read()
except:
print('HEALTHCHECKS CRITICAL - Error fetching health check at %s' % URL)
sys.exit(2)
parsed = json.loads(response)
resource = parsed["resource"] if "resource" in parsed else parsed
status = resource["health"]["summary"]["status"]
incidents = resource["health"]["summary"].get("incidents", [])
warning = len([incident for incident in incidents if incident["status"] == "WARNING"])
critical = len([incident for incident in incidents if incident["status"] == "CRITICAL"])
if warning or critical:
print('HEALTHCHECKS %s - %d WARNING - %d CRITICAL' % (status, warning, critical))
else:
print('HEALTHCHECKS OK - no incidents')
print(json.dumps(resource, indent=2))
sys.exit({"OK":0, "WARNING":1, "CRITICAL":2}.get(status, 3))
È possibile violare il codice offuscato prodotto? Forse sì forse no. Ma è sicuro di scoraggiare la maggior parte delle persone persino dal tentare di farlo.
Se hai del tempo a disposizione e desideri crittografare il tuo copione da solo usando il tuo metodo improvvisato, ti consigliamo di utilizzare il comando openssl. Perché? Perché sembra essere l'unico strumento di crittografia disponibile su molti sistemi Unix. Ho verificato che esiste su Linux (ubuntu, centos, redhat, mac) e AIX. SunOS credo utilizzi invece il comando "crypt".
Il modo più semplice per usare Openssl per crittografare uno script è:
1. cat <thescript> | openssl aes-128-cbc -a -salt -k "specify-a-password" > thescript.enc
OR
2. openssl aes-128-cbc -a -salt -in <path-to-your-script> -k "yourpassword"
Per decodificare uno script usando Openssl (nota la '-d'):
1. cat thescript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > thescript.dec
OR
2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > thescript.dec
Il trucco qui sarebbe quello di automatizzare la fornitura di password in modo che gli utenti non debbano specificare una password ogni volta che vogliono eseguire lo script.