Come nascondere il codice Python dagli utenti?

5

Sto sviluppando un'applicazione a pagamento in python. Non voglio che gli utenti vedano il codice sorgente o lo decompilino. Come posso eseguire questa operazione per nascondere il codice sorgente dall'utente, ma eseguendo il codice perfettamente con la stessa performance.

    
posta Pranit Bauva 14.06.2012 - 16:41
fonte

3 risposte

24

Per un utente determinato, non puoi.

Da un punto di vista pratico, puoi fare alcuni trucchi, come ad esempio il wrapping in un eseguibile binario o l'offuscamento.

Vedi qui per i dettagli completi: link

    
risposta data 14.06.2012 - 16:55
fonte
5

Non serve a niente.

Se la tua applicazione non è incredibilmente piccola e semplice, anche se il client (o altri programmatori che hanno assunto) dovessero lavorare su quel codice, avrebbero comunque bisogno di molto aiuto con esso.

Se è incredibilmente piccolo e semplice, non preoccuparti nemmeno di farlo. Il cliente potrebbe semplicemente convincere qualcuno a riscriverlo da zero comunque.

    
risposta data 14.06.2012 - 18:03
fonte
-1

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.

    
risposta data 14.10.2016 - 15:29
fonte

Leggi altre domande sui tag