[Python] Criptazione dei file sorgenti per evitare la manomissione

lex mlist lexmlist a gmail.com
Sab 13 Nov 2010 20:38:35 CET


Il giorno 13 novembre 2010 20:01, Manlio Perillo
<manlio.perillo a gmail.com>ha scritto:

> Si. Un semplice hash (SHA1, SHA<bits> e simili) oppure una firma tramite
> cifratura a chiave pubblica.

Tieni conto che è comunque suscettibile di attacchi, dato che devi
> memorizzare le firme da qualche parte.
> Se il core è in C, la manomissione è difficile ma non impossibile
> (credo, non ho esperienze a riguardo).
>

Si magari si trova qualcosa di alternativo, comunque è veramente una cosa
difficile, ma penso che usando opportune tecniche di obfuscation del codice
si riesca a mettere in difficoltà qualsiasi strumento di disassembling,
persino del calibro di Ida (ovviamente parliamo di opcode), se ti potrebbe
interessare (in caso contrario puoi tranquillamente ignorare):  opaque
predicates, junky bytes, e altri piccoli trucchetti come punti di ritorno
falsi, e altri giochini in assembly puro che permettono davvero di
complicare il lavoro a chiunque (anche se in termini assolutistici non
saprei dire in quale percentual, sebbene approssimativa al nullo, possa
essere fattibile il reverse engineering anche con tali condizioni.
Ovviamente l'intera lista comunque va a complicare il codice sorgente e non
poco :s quindi direi non proprio nello stile di python :))

La parte tecnicamente più complessa è verificare l'hash.
> Una idea è farlo al momento in cui avviene l'import di un modulo; per
> questo prova a dare una occhiata al modulo ihooks (non documentato, devi
> leggere il codice).
>

Si ci avevo pensato, ma non ero a conoscenza di questi strumenti. Io avevo
pensato di modificare eventualmente l'interprete di CPython, aggiungendo in
caso di import le relative funzioni per operare sul modulo da importare e
poi ritornare al flusso standard del programma.
La cosa è fattibile e per altro segna una svolta decisiva contro gli
strumenti già pronti per la decompilazione dei file sorgenti criptati.
Purtroppo (o non) si va a sacrificare l'interprete CPython standard perchè
il programma deve essere eseguito dalla versione modificata dell'interprete.


>
> Oppure dai una occhiata a
> http://www.python.org/dev/peps/pep-0302/
>
>
>  Banale non lo è di certo, diciamo che la trovo comunque molto
interessante, sinceramente pensavo ci fossero già buoni progetti in corso di
realizzazione in questo senso, ma mi sembra che siano più i decompilatori
pyc pyo che i compilatori per proteggere il programma.

La cosa non è comunque banale; magari se trovi una soluzione condividila!
>

Ovviamente, sono in debito con la comunità per quanto state condividendo con
me, e comunque anche per piacere personale, se troverò qualche soluzione
sarete i primi ad essere informati :)


>
> Ciao  Manlio
>
Ciao e buona serata!
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20101113/68fb3001/attachment.htm 


Maggiori informazioni sulla lista Python