<br><br><div class="gmail_quote">Il giorno 13 novembre 2010 20:01, Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com">manlio.perillo@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Si. Un semplice hash (SHA1, SHA<bits> e simili) oppure una firma tramite<br>
cifratura a chiave pubblica. </blockquote><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Tieni conto che è comunque suscettibile di attacchi, dato che devi<br>
memorizzare le firme da qualche parte.<br>
Se il core è in C, la manomissione è difficile ma non impossibile<br>
(credo, non ho esperienze a riguardo).<br></blockquote><div><br>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 :))<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
La parte tecnicamente più complessa è verificare l'hash.<br>
Una idea è farlo al momento in cui avviene l'import di un modulo; per<br>
questo prova a dare una occhiata al modulo ihooks (non documentato, devi<br>
leggere il codice).<br></blockquote><div><br>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.<br>
La cosa è fattibile e per altro segna una svolta decisiva contro gli strumenti già pronti per la decompilazione dei file sorgenti criptati.<br>Purtroppo (o non) si va a sacrificare l'interprete CPython standard perchè il programma deve essere eseguito dalla versione modificata dell'interprete.<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Oppure dai una occhiata a<br>
<div class="im"><a href="http://www.python.org/dev/peps/pep-0302/" target="_blank">http://www.python.org/dev/peps/pep-0302/</a><br>
<br>
<br></div></blockquote><div> 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.<br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
</div>La cosa non è comunque banale; magari se trovi una soluzione condividila!<br></blockquote><div> </div><div>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 :)<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">
<br>
Ciao Manlio</div></blockquote></div>Ciao e buona serata!<br>