Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-16 Per discussione enrico franchi
2010/11/16 Enrico Franchi :
>
> On Nov 13, 2010, at 12:23 PM, lex mlist wrote:


Scusate, partito per errore. Avevo gia' risposto.



-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-16 Per discussione Enrico Franchi

On Nov 13, 2010, at 12:23 PM, lex mlist wrote:

> Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente 
> decompilabile, hai quindi una qualche alternativa?
> oppure un programma python è destinato a rimanere open source!?

Open source vuole dire una cosa ben precisa. 

-enrico

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 13/11/2010 20:01, Manlio Perillo ha scritto:
> [...]
> 
> 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).
> 
> Oppure dai una occhiata a
> http://www.python.org/dev/peps/pep-0302/
> 

Ecco un proof of concept, basato sul PEP 302:
http://paste.pocoo.org/show/290997/

Vantaggi

può essere implementato in C senza problemi; ti basta, dopo aver
inizializzato l'interprete, aggiungere il tuo importer in sys.meta_path.

L'importer lo puoi anche scrivere in C.


Svantaggi
=

Per disabilitare la verifica delle firme, all'utente basta (a scelta):
* modificare la funzione __import__
* rimuovere l'importer da sys.meta_path

Ovviamente questo è un problema solo se permetti di importare moduli
"untrusted"; ma il caricamento di un modulo untrusted fallirà comunque,
con la politica di default (permetti solo l'import di moduli "noti" ed
integri).

L'unica precauzione è *disabilitare* gli hook eseguiti all'avvio
dell'interprete, ad esempio il caricamento di site.py; questo perchè gli
hook permettono di eseguire codice utente arbitrario *prima* che
l'importer hook sia stato registrato (XXX check me).



> [...]


Ciao   Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkzfCAYACgkQscQJ24LbaUTGzwCfTgjnKrlpunVPmqNI+j8tFAY4
cMYAmwS+dJ+uLr+/Zgs+FnYzkd33vKdo
=kXzb
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Il giorno 13 novembre 2010 20:01, Manlio Perillo
ha scritto:

> Si. Un semplice hash (SHA1, SHA 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!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 13/11/2010 17:23, lex mlist ha scritto:
> 
> 
> Il giorno 13 novembre 2010 15:22, Manlio Perillo
> mailto:manlio.peri...@gmail.com>> ha scritto:
> 
> 
> In casi come questo, invece che criptare/nascondere potresti firmare
> crittograficamente i vari moduli.
> 
> Intendi che dovrei ricavare l'hash del file originale e compararlo con
> il file che vad ad eseguire per accertarmi che non ci siano manomissioni?

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

> Se è questo, l'idea è geniale! Non ci avevo pensato mai prima d'ora. 
> 

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).


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).

Oppure dai una occhiata a
http://www.python.org/dev/peps/pep-0302/


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



Ciao  Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkze4HYACgkQscQJ24LbaUQS4gCgi1qVShPCaFuRqeAv4FrkbaaW
HxcAoI9QJky0q19j/ff9WPBznozX3mse
=X5yG
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Il giorno 13 novembre 2010 19:44, Raffaele Salmaso <
raffaele.salm...@gmail.com> ha scritto:

> On 11/12/2010 09:36 PM, lex mlist wrote:
> > Esattamente che cosa intendi con "lua è molto più parco di risorse"?
> che è pensato per girare con meno risorse: l'interprete pesa circa 100kb
>
Ti ringrazio per la precisazione, ora mi è più chiaro :)


> no.
> se la cosa ha senso, e solo tu come creatore del programma lo sai,
> potresti fare una cosa del genere: quando hai bisogno di elaborare i
> dati, li mandi al server che poi li restituisce al client. In pratica
> esponi un'api rest.
> Ovvio questo non ha sempre senso, dipende anche dal contesto del programma.
>
Si nota che non ho mai usato un approccio di questo tipo, non ci avevo
pensato, ed in effetti è una bella soluzione.
Non la userò per il progetto corrente perchè davvero non serve, ma la
realizzerò cosi, a tempo perso per test e curiosità personale,
che fonte di illuminazione questa MailingList :D

> ok, allora ti basta questo
>
> http://bitbucket.org/ubernostrum/django-funserver/src/tip/funserver/management/commands/funserver.py
>
> :D
>
ahahahaha, buono spunto. ma è una cosa che funziona per davvero?
non resisto, vado a provarlo :p
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Raffaele Salmaso
On 11/12/2010 09:36 PM, lex mlist wrote:
> Esattamente che cosa intendi con "lua è molto più parco di risorse"?
che è pensato per girare con meno risorse: l'interprete pesa circa 100kb

> Uhm, in termini pratici il programma a runtime dovrebbe prendere
> attraverso la rete i file (.py) necessari e leggerli?
no.
se la cosa ha senso, e solo tu come creatore del programma lo sai, 
potresti fare una cosa del genere: quando hai bisogno di elaborare i 
dati, li mandi al server che poi li restituisce al client. In pratica 
esponi un'api rest.
Ovvio questo non ha sempre senso, dipende anche dal contesto del programma.

> Beh diciamo che il mio fine ultimo è quello di evitare i .py
> modificabili con la criptazione per evitare che un semplice editor hex
> possa permettere di leggerlo. Se poi l'utente ha voglia di farsi del
> reverse engineering, studiarsi il flusso del programma e generare dei
> file alternativi, beh la vedo dura, perchè davvero dovrebbe conoscere la
> chiave di crittazione, dovrebbe sapere ogni file .py quali funzioni deve
> esporre e tante altre variabili, e poi non mi preoccupo certo di quel
> livello, alla fine il gioco non ne vale la candela.
ok, allora ti basta questo
http://bitbucket.org/ubernostrum/django-funserver/src/tip/funserver/management/commands/funserver.py

:D

-- 
()_() | That said, I didn't actually _test_ my patch.  | +
(o.o) | That's what users are for! | +---+
'm m' |   (Linus Torvalds) |  O  |
(___) |  raffaele dot salmaso at gmail dot com |
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Il giorno 13 novembre 2010 15:22, Manlio Perillo
ha scritto:

>
> In casi come questo, invece che criptare/nascondere potresti firmare
> crittograficamente i vari moduli.
>
Intendi che dovrei ricavare l'hash del file originale e compararlo con il
file che vad ad eseguire per accertarmi che non ci siano manomissioni?
Se è questo, l'idea è geniale! Non ci avevo pensato mai prima d'ora.

> Ciao  Manlio
>
Ciao Ciao Manlio, grazie mille =)


Il giorno 13 novembre 2010 15:53, enrico franchi
ha scritto:

> Perche' so cosa vuole dire open source. Se ti leggi la definizione, e'
> piuttosto banale vedere che hai errato

Mi sembra piuttosto arrogante questa tua risposta, perdonami se te lo dico.
Comunque beh, premettendo che non voglio assolutamente discutere ne
scatenare flame di qualsiasi genere, penso che sia una definizione piuttosto
personale di ciò che si intende correlato ad un software. Io sono cresciuto
con la convinzione di non fidarmi di nessuno, e non assumo per oro ciò che
mi dice il sito "opensource.org". Ti spiego perchè penso che sia una cosa
molto personale (ma non per questo non la rispetto essendo opinione altrui):
"no discrimination against persons or groups". Qui si parla tutto tranne che
di software, mi sembra un aspetto molto più "umanistico" e rivolto al
sociale, "license must be technology-neutral". Più che una definizione di
quello che si può voler intendere per open source a me sembra una chiara
linea guida da seguire se vuoi sottoporre una tua licenza al sito, poi ad
ognuno il suo pensiero. Continuerò a tenermi per buona la mia convinzione di
open source e rispetto la tua, al massimo se la cosa ti infastidisce in
futuro cercherò di evitare open-source in favore di altri termini.

Buona serata.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione enrico franchi
2010/11/13 lex mlist :

>> > Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
>> > decompilabile, hai quindi una qualche alternativa?
>> > oppure un programma python è destinato a rimanere open source!?
>>
>> Open source vuole dire una cosa ben precisa. Avere i sorgenti in mano non
>> vuole dire essere open source.
>
> Uhm solitamente si tende a confondere open source con freeware, io non
> intendo dicendo "open source" che deve essere gratuito, sia chiaro, intendo
> proprio quello che vuol dire ovvero a sorgenti aperti (visibili), perchè
> ritieni che l'abbia usato impropriamente?

Perche' so cosa vuole dire open source. Se ti leggi la definizione, e'
piuttosto banale vedere che hai errato:


Open source doesn't just mean access to the source code. The
distribution terms of open-source software must comply with the
following criteria:


Il resto continua qui: http://www.opensource.org/osd.html



-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione enrico franchi
2010/11/13 lex mlist :

>> Open source vuole dire una cosa ben precisa. Avere i sorgenti in mano non
>> vuole dire essere open source.
>
> Uhm solitamente si tende a confondere open source con freeware, io non
> intendo dicendo "open source" che deve essere gratuito, sia chiaro, intendo
> proprio quello che vuol dire ovvero a sorgenti aperti (visibili), perchè
> ritieni che l'abbia usato impropriamente?

Perche' so cosa vuole dire open source. La prima riga della
definizione  dice chiaramente che quello che tu chiamo open source non
e' open source.

"""
Open source doesn't just mean access to the source code. The
distribution terms of open-source software must comply with the
following criteria:


"""

da: http://www.opensource.org/osd.html

Poi se vuoi vedere i criteri, sono dentro la pagina. ;)


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 12/11/2010 20:55, lex mlist ha scritto:
> Sera a tutti.
> 
> Pensavo di incorporare l'interprete di python in un mio progetto C,
> visto che ho bisogno di permettere ad alcuni non-sviluppatori di
> sviluppare facilmente le loro idee.
> La scelta pende totalmente su di me, ero indeciso tra Python e LUA, ma
> sebbene LUA lo conosco solo di vista, mi sembra che python sia più
> completo, almeno in termini di package già pronti (se sbaglio vi prego
> di correggermi).
> 
> Avrei però la necessità di produrre per la release del programma un
> sistema di "protezione" per evitare che l'utente possa modificare i
> sorgenti di python e compromettere il flusso di esecuzione del
> programma.

In casi come questo, invece che criptare/nascondere potresti firmare
crittograficamente i vari moduli.



Ciao  Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkzenxUACgkQscQJ24LbaUQZjQCffPaNunLymscCJ6tG+olNh0Cd
vQ8AoIZHaHHhRnjV0F4cjx73Q/wUfShe
=f9XW
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Il giorno 13 novembre 2010 14:24, Enrico Franchi
ha scritto:

>
> On Nov 13, 2010, at 12:23 PM, lex mlist wrote:
>
> > Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
> decompilabile, hai quindi una qualche alternativa?
> > oppure un programma python è destinato a rimanere open source!?
>
> Open source vuole dire una cosa ben precisa. Avere i sorgenti in mano non
> vuole dire essere open source.
>
Uhm solitamente si tende a confondere open source con freeware, io non
intendo dicendo "open source" che deve essere gratuito, sia chiaro, intendo
proprio quello che vuol dire ovvero a sorgenti aperti (visibili), perchè
ritieni che l'abbia usato impropriamente?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Enrico Franchi

On Nov 13, 2010, at 12:23 PM, lex mlist wrote:

> Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente 
> decompilabile, hai quindi una qualche alternativa?
> oppure un programma python è destinato a rimanere open source!?

Open source vuole dire una cosa ben precisa. Avere i sorgenti in mano non vuole 
dire essere open source.

-enrico

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Il giorno 13 novembre 2010 12:32, Paolo Bernardi  ha
scritto:

> Ben detto! Un ragionamento di questo tipo (costi/benefici) è proprio
> quello che devi fare.
>

=)) beh sono contento ogni tanto di far qualcosa nel senso giusto :D


>
> > Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
> > decompilabile, hai quindi una qualche alternativa?
> > oppure un programma python è destinato a rimanere open source!?
>
> L'alternativa più sicura, come detto (mi pare) in questo thread, è avere
> la parte più significativa del programma lato server. Tuttavia devi
> sempre valutare i costi e i benefici della scelta; da quanto ho capito
> nel tuo caso distribuire i file pyc, magari inclusi in un qualche
> eseguibile, dll o quant'altro, è più che sufficiente.
>
>
Si nel mio caso và più che bene la soluzione .pyc, però mi piace conoscere
le cose sia per possibiltà future che per innata curiosità :)
Tanto per, proverò comunque qualcosa di tipo client-server perchè mi
interessa davvero molto.

2010/11/13 Massimiliano Pippi 

> Dai un'occhiata anche a questo vecchio thread
> http://lists.python.it/pipermail/python/2009-June/006900.html
>
Grazie, me lo leggo subito :)


> Ciao
>

Ciao, e grazie di nuovo a tutti!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Massimiliano Pippi
2010/11/13 lex mlist :
> Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
> decompilabile, hai quindi una qualche alternativa?
Dai un'occhiata anche a questo vecchio thread
http://lists.python.it/pipermail/python/2009-June/006900.html

Ciao


-- 
M.

http://twitter.com/maxpippi :: http://masci.wordpress.com
http://www.pypg.org
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Paolo Bernardi
On Sat, 2010-11-13 at 12:23 +0100, lex mlist wrote:
> Beh, sperando che rimanga cosi... supporta solo python 2.5 e
> python2.6, io mi stò già appoggiando a Python3 direttamente.
> 
> Lo sò che non è una soluzione al problema unpyc che prima o dopo ci
> arriverà (magari già è in sviluppo), comunque ripeto, non è che ci sia
> da difendere chissà che in termini di proprietà intellettuale, una
> eventuale decompilazione non espone a rischi di natura pecuniaria, ma
> dovrebbe servire semplicemente da dissuasore per le modifiche, poi se
> qualcuno ha voglia di farsi tutto quello, beh...

Ben detto! Un ragionamento di questo tipo (costi/benefici) è proprio
quello che devi fare.

> Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
> decompilabile, hai quindi una qualche alternativa?
> oppure un programma python è destinato a rimanere open source!?

L'alternativa più sicura, come detto (mi pare) in questo thread, è avere
la parte più significativa del programma lato server. Tuttavia devi
sempre valutare i costi e i benefici della scelta; da quanto ho capito
nel tuo caso distribuire i file pyc, magari inclusi in un qualche
eseguibile, dll o quant'altro, è più che sufficiente.

Paolo



signature.asc
Description: This is a digitally signed message part
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Beh, sperando che rimanga cosi... supporta solo python 2.5 e python2.6, io
mi stò già appoggiando a Python3 direttamente.

Lo sò che non è una soluzione al problema unpyc che prima o dopo ci arriverà
(magari già è in sviluppo), comunque ripeto, non è che ci sia da difendere
chissà che in termini di proprietà intellettuale, una eventuale
decompilazione non espone a rischi di natura pecuniaria, ma dovrebbe servire
semplicemente da dissuasore per le modifiche, poi se qualcuno ha voglia di
farsi tutto quello, beh...

Comunque, visto che ritieni la soluzione .pyc (giustamente) facilmente
decompilabile, hai quindi una qualche alternativa?
oppure un programma python è destinato a rimanere open source!?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione Paolo Bernardi
On Sat, 2010-11-13 at 01:04 +0100, Daniele Varrazzo wrote:
> Basta che distribuisci solo i file .pyc invece dei .py: quelli sono
> sufficienti ad eseguire il programma e vengono trovati dall'import. Questo
> non è criptare, ma sembra quello che ti serve: è una protezione sufficiente
> per evitare tampering da parte di chi non è *veramente* motivato e che
> sappia leggere il bytecode.

Direi che basta motivazione sufficiente a spendere 5 minuti per una
ricerchina:

http://sourceforge.net/projects/unpyc/

Se le pretese sono minori invece basta il modulo "dis":

>>> def test(a):
... print a
... 
>>> test(23)
23
>>> import dis
>>> dis.dis(test)
  2   0 LOAD_FAST0 (a)
  3 PRINT_ITEM  
  4 PRINT_NEWLINE   
  5 LOAD_CONST   0 (None)
  8 RETURN_VALUE

Quest'ultimo però in sola lettura, mentre con unpyc si può fare un
intero ciclo decompila->modifica->ricompila.

Paolo


signature.asc
Description: This is a digitally signed message part
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-13 Per discussione lex mlist
Grazie sia a Daniele che a Marco per le risposte :)

Non mi devo preoccupare di hacking sui sorgenti, tanto gira e rigira un modo
chi è determinato lo trova sempre, e poi dovrei fare anche l'obfuscation del
codice macchina prodotto dalla compilazione in C, e non mi serve.
Penso che l'idea di distribuire il solo bytecode sia sufficiente,
l'importante è "tamponare" l'utente che vede il file di testo e pensa di
guardarlo/modificarlo senza sapere quel che stà facendo.
Ho già provato a includere l'interprete di Python e non mi sembra una cosa
affatto difficile!
Ci sono proprio tutti gli strumenti necessari, io mi stò studiando un po'
l'architettura di python per interesse personale, ma trovo che anche senza
saperne un tubo sia fattibile scrivere con le Python C/API.
(e quindi immagino che Lua sia davvero semplice da incorporare)


Il giorno 13 novembre 2010 01:04, Daniele Varrazzo  ha
scritto:

>
> PyInstaller fornisce anche supporto per creare un unico bundle che
> contiene sia l'eseguibile che i .pyc delle librerie che servono (e i
> .so/.dll). Probabilmente è facile modificarlo per fargli creare un bundle
> con l'eseguibile che vuoi tu invece dell'interprete Python., magari lo fa
> già...
>
> Ciao!
>

Gli darò un'occhiata, grazie per la segnalazione!

Vediamo un po' cosa riesco a fare...
questo Python mi piace sempre di più =))
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-12 Per discussione Daniele Varrazzo
On Fri, 12 Nov 2010 20:55:15 +0100, lex mlist  wrote:
> Sera a tutti.
> 
> Pensavo di incorporare l'interprete di python in un mio progetto C,
visto
> che ho bisogno di permettere ad alcuni non-sviluppatori di sviluppare
> facilmente le loro idee.
> La scelta pende totalmente su di me, ero indeciso tra Python e LUA, ma
> sebbene LUA lo conosco solo di vista, mi sembra che python sia più
> completo,
> almeno in termini di package già pronti (se sbaglio vi prego di
> correggermi).

Sì. Forse Lua è più facile da embeddare (Python non è troppo difficile
comunque). Ma hai il vantaggio di una libreria molto più sostanziosa, come
hai visto.


> Avrei però la necessità di produrre per la release del programma un
> sistema
> di "protezione" per evitare che l'utente possa modificare i sorgenti di
> python e compromettere il flusso di esecuzione del programma. 

Basta che distribuisci solo i file .pyc invece dei .py: quelli sono
sufficienti ad eseguire il programma e vengono trovati dall'import. Questo
non è criptare, ma sembra quello che ti serve: è una protezione sufficiente
per evitare tampering da parte di chi non è *veramente* motivato e che
sappia leggere il bytecode.

PyInstaller fornisce anche supporto per creare un unico bundle che
contiene sia l'eseguibile che i .pyc delle librerie che servono (e i
.so/.dll). Probabilmente è facile modificarlo per fargli creare un bundle
con l'eseguibile che vuoi tu invece dell'interprete Python., magari lo fa
già...

Ciao!

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-12 Per discussione Marco Giusti
On Fri, Nov 12, 2010 at 08:55:15PM +0100, lex mlist wrote:
> Sera a tutti.
> 
> Pensavo di incorporare l'interprete di python in un mio progetto C, visto
> che ho bisogno di permettere ad alcuni non-sviluppatori di sviluppare
> facilmente le loro idee.
> La scelta pende totalmente su di me, ero indeciso tra Python e LUA, ma
> sebbene LUA lo conosco solo di vista, mi sembra che python sia più completo,
> almeno in termini di package già pronti (se sbaglio vi prego di
> correggermi).

Non conosco lua, ma so' che lo scopo principale, o uno dei principali, è
proprio quello di funzionare da interprete embedded, quindi dipende dai
tuoi bisogni. Python sicuramente ha una grande community e qua la
quantità di codice è sterminata. Inoltre conoscere bene i propri
strumenti è importare, trovo.

> Avrei però la necessità di produrre per la release del programma un sistema
> di "protezione" per evitare che l'utente possa modificare i sorgenti di
> python e compromettere il flusso di esecuzione del programma. Probabilmente
> la risposta sarebbe "non dovresti usare python", ma scrivere un interprete
> porta via troppo tempo e sinceramente non mi và di usare altri linguaggi
> visto che quasi sempre sono per uno specifico scopo e non general purpose.
> Pensavo di crittare il file con Rijndael e di scrivere quindi su un file
> binario, e a runtime decrittare, e passare il file in memoria "in chiaro"
> all'interpete.

Allora, di fatto anche i binari sono modificabili, quindi se uno vuol
pestarsi i piedi da solo un modo lo trova sempre, inoltre il bytecode
python è distribuibile e binario. Potresti distribuire quello, ma
ho l'impressione che lo scopo finale non sia proprio quello di evitare
pasticci da parte degli utenti, ma non sono affari miei.

> Come sistema pensavo potesse andare (se avete esperienze e volete
> condividerle sono tutt'orecchie), ma poi ho pensato che se uno di questi
> sorgenti include un'altro modulo, sorgerebbero problemi perchè python
> cercerebbe un python ".py" in chiaro e non lo troverebbe.

Quale file python dovrebbe cercare, uno facente parte la libreria
standard oppure consideri il caso in cui l'estenzione sia composta da
più di un file? Credo che il caso in esame sia il secondo (dopotutto è
possibile includere la libreria standard nell'estenzione stessa).

In questa ottica prendi in esame il modulo ``zipimport`` (e il pep
302[1]), costruisci un wrapper che nel momento in cui va' a leggere il
file prima lo decripta. Lavorare con gli archivi zip (o gli egg) credo
che semplificherà un po' le cose.

[1] http://www.python.org/dev/peps/pep-0302/

Comunque in linea di massima si tratta sempre di costruire un import
hook, ma dove salverai la chiave per decifrare i file? Se lo scopo è
scoraggiare un utente a modificare un sorgente python allora la
soluzione migliore è distribuire il bytecode dei sorgenti, se lo scopo è
tenere nascosto il codice sorgente dai curiosi, questo è solo un
placebo.

m.


-- 
Dalle virtù che si esigono in un domestico, l'Eccellenza Vostra conosce molti
padroni degni d'esser servitori?
-- Pierre Augustin Caron de Beaumarchais
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-12 Per discussione lex mlist
Il giorno 12 novembre 2010 21:11, Raffaele Salmaso <
raffaele.salm...@gmail.com> ha scritto:

> Ni, py ha molte più librerie pronte, lua è molto più parco di risorse e
> molto più semplice da includere in un programma c. Dipende dagli usi
> (molti giochi usano lua e non python per implementare la logica)
>

Si infatti sono a conoscenza del fatto che molti videogame usino lua, e non
solo i videogame, per questo l'avevo messo tra le possibiltà.
Esattamente che cosa intendi con "lua è molto più parco di risorse"?


> Sinceramente. Non distribuirlo.
>
> Fallo client-server, sposta la logica in rete.
>

Uhm, in termini pratici il programma a runtime dovrebbe prendere attraverso
la rete i file (.py) necessari e leggerli?


> Se invece non vuoi/puoi, se vuoi semplicemente evitare che un appena
> appena intraprendere hakaro giochi con i tuoi file, prendili e compilali
> dentro un file c, e falli caricare dall'interprete.
>

Beh diciamo che il mio fine ultimo è quello di evitare i .py modificabili
con la criptazione per evitare che un semplice editor hex possa permettere
di leggerlo. Se poi l'utente ha voglia di farsi del reverse engineering,
studiarsi il flusso del programma e generare dei file alternativi, beh la
vedo dura, perchè davvero dovrebbe conoscere la chiave di crittazione,
dovrebbe sapere ogni file .py quali funzioni deve esporre e tante altre
variabili, e poi non mi preoccupo certo di quel livello, alla fine il gioco
non ne vale la candela.

Grazie mille per la tua risposta, ciao!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Criptazione dei file sorgenti per evitare la manomissione

2010-11-12 Per discussione Raffaele Salmaso
On 11/12/2010 08:55 PM, lex mlist wrote:
> Sera a tutti.
>
> Pensavo di incorporare l'interprete di python in un mio progetto C,
> visto che ho bisogno di permettere ad alcuni non-sviluppatori di
> sviluppare facilmente le loro idee.
> La scelta pende totalmente su di me, ero indeciso tra Python e LUA, ma
> sebbene LUA lo conosco solo di vista, mi sembra che python sia più
> completo, almeno in termini di package già pronti (se sbaglio vi prego
> di correggermi).
Ni, py ha molte più librerie pronte, lua è molto più parco di risorse e 
molto più semplice da includere in un programma c. Dipende dagli usi 
(molti giochi usano lua e non python per implementare la logica)

>
> Avrei però la necessità di produrre per la release del programma un
> sistema di "protezione" per evitare che l'utente possa modificare i
> sorgenti di python e compromettere il flusso di esecuzione del
> programma.
...
> Avete da proporre qualche soluzione/workaround per questo problema?
Vuoi essere sicuro che nessuno che abbia voglia di decifrare il 
programma per farne quello che vuole? Semplice! Non distribuire il 
programma!

Sinceramente. Non distribuirlo.

Fallo client-server, sposta la logica in rete.

Se invece non vuoi/puoi, se vuoi semplicemente evitare che un appena 
appena intraprendere hakaro giochi con i tuoi file, prendili e compilali 
dentro un file c, e falli caricare dall'interprete.

-- 
()_() | That said, I didn't actually _test_ my patch.  | +
(o.o) | That's what users are for! | +---+
'm m' |   (Linus Torvalds) |  O  |
(___) |  raffaele dot salmaso at gmail dot com |
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python