Come si "protegge" un'applicazione basata su CLI Python? [duplicare]

0

Devo fornire un programma basato su CLI Python a uno dei miei clienti. Gli darò sia la versione compilata (usando py2exe o qualcosa di simile) dell'applicazione e il codice sorgente.

La struttura dell'applicazione è la seguente:

  • una cartella cfg che contiene alcuni file di configurazione (il .py principale analizza queste configurazioni usando configparser module ed elabora i dati al loro interno
  • una cartella log che conterrà i file di log generati dall'app
  • in / out cartelle che verranno utilizzate per i file di input / output
  • una cartella elaborata che manterrà i file di input che sono stati utilizzati.

Ora il client fornirà la versione .exe dell'app ad alcuni client e vuole assicurarsi che l'unica persona che utilizzerà l'app sarà quella a cui l'ha gestito. Detto questo, ha chiesto un modo / una soluzione hacky per proteggere l'app in un modo o nell'altro. Ha specificato che non ha bisogno di un sistema di protezione del 100% (sappiamo tutti che se c'è una determinata persona responsabile di questo, se ne andrà comunque) ma decente.

So che Python, essendo un linguaggio interpretato in codice byte compilato, è molto difficile da bloccare. Non sto cercando un modo per proteggere il codice. Ho solo bisogno di una specie di sistema di chiavi di licenza incorporato nel mio codice Python.

La domanda sarebbe: in che modo vuoi proteggere la tua applicazione basata su CLI Python?

    
posta яүυк 04.08.2016 - 19:43
fonte

1 risposta

0

Ecco una soluzione semplice. Non protegge il codice e può essere facilmente compromesso, ma ciò nonostante richiede uno sforzo da parte dei clienti che si stanno comportando male).

Invece di ottenere un eseguibile generico, un cliente riceverà un eseguibile con una password univoca incorporata, la password dovrebbe essere fornita al programma come argomento della riga di comando:

program.exe pseudocode:

USER_KEY_PLACEHOLDER = '0000000000000000' # e.g. 16 chars

password = get_cli_argument('-p')

h_password = hash(password)
if h_password != USER_KEY_PLACEHOLDER:
    raise InvalidPassword()

Il programma firmatario deve essere fornito al cliente.

program_signer.exe pseudocode:

password = get_cli_agument_or_generate_random_string()
h_password = hash(password)

find_user_key_placeholder_in_program_exe()
embed_h_password_into_user_key_placeholder()

Quindi, l'intera catena di fornitura è la seguente:

Il cliente ha il programma e il firmatario . Ogni volta che un utente finale richiede il programma, il cliente utilizza il firmatario come segue:

signed_program = signer(program, password)

Una password - è una stringa univoca, generata casualmente per ogni utente.

L'utente finale riceve un signed_program e una password personale univoca. signed_program verrà avviato solo se viene fornita una password corretta.

    
risposta data 05.08.2016 - 12:45
fonte

Leggi altre domande sui tag