[PIPython] pyo e pyc files

Alex Martelli aleaxit
Ven 19 Nov 2004 15:16:41 CET


On Wednesday 04 February 2004 08:44 am, Giovanni B. Lenoci wrote:
   ...
> Non mi chiedevo tanto se fosse lecito, ma quanto un programmatore
> potesse stare tranquillo distribuendo il bytecode del proprio programma.

Un programmatore puo` stare _estremamente_ tranquillo: basta praticare la 
meditazione trascendentale, o, per chi ha poca pazienza, usare il Valium, e 
la tranquillita` e` garantita.  "Se non puoi farci niente, che ti agiti a 
fa'"...?-)

> Mi hai comunque risposto in seguito. Credo che valga con tutti i
> linguaggi di programmazione; se trovi un programmatore disonesto che
> vuole utilizzare il tuo codice in pochi passaggi partendo dal bytecode
> puņ ottenere il sorgente.

Esatto (non necessariamente lo stesso sorgente da cui quel bytecode e` stato 
generato, ma comunque uno grosso modo equivalente).  In effetti questo vale 
per qualsiasi linguaggio di partenza e di arrivo.

> Naturale che va contro la legge, ma questa č un'altra storia.

Le protezioni di tipo legale e contrattuale sono l'unica storia.


> Esiste qualche modo per criptare il bytecode? Ad esempio che funziona
> solo passando una determinata chiave?
> Forse dico una castroneria, non lapidatemi :P

Se distribuisci codice che puo` essere eseguito sulle macchine dei clienti, 
chiaramente stai distribuendo anche tutto quel che occorre allo scopo di 
decrittarlo, se no non potrebbe mai venire eseguito.  Solo questione per chi 
fosse interessato al tuo codice di scoprire come lo decritti, e c'e` chi ci 
si diverte e lo fa a puro scopo ludico anche per codice di cui non gli cale 
ne` poco ne` punto, cosi` come un altro risolve cruciverba o rebus.  Basta 
guardare sui siti di "warez" per vedere quanto resistono le "protezioni" 
anche dei videogiochi piu` "corazzati", pieni di trucchi linguaggio-macchina 
ecc ecc.

L'unica vera protezione e` non distribuire TUTTO il codice che serve per 
rendere la tua applicazione pienamente funzionale.  Nel mondo dei giochi 
questo "santo graal" e` stato raggiunto con i giochi che prevedono 
interazioni in internet: la parte "server" e` pienamente sotto il controllo 
degli sviluppatori e nessuno (che non cracchi il server, ma quelli E` 
possibile corazzarli davveror) potra` mai vedere o modificare quel codice. 

Nel mondo business la prospettiva emergente sono i web services.  Ma con un 
minimo di ingegno puoi certo pensare a _qualche_ funzionalita` che richiede 
un accesso alla rete, specificamente ad un server sotto il tuo controllo, e 
quindi ti permette di tenere sotto pieno controllo pirateria et simila.  Un 
esempio delizioso che ho appena scoperto: il gratuito "calculator" dei 
sistemi Mac ha fra le sue funzioni la conversione di valute.  Ovviamente per 
farla bene deve potere aggiornare le sue tabelle dei tassi di cambio, e 
questo lo fa connettendosi all'opportuno server, naturalmente.  Ora e` chiaro 
che ad Apple poco interessa se qualcuno pirateggia o hackera quel particolare 
programmillo che tanto lei distribuisce gratis come parte di un sistema 
ricchissimo.  Ma il punto e` che grazie a funzionalita` perfettamente 
legittime e desiderabili ormai in pratica QUALSIASI programma ha un'ottima 
scusa per connettersi in rete ogni tanto, e in queste connessioni sta la tua 
opportunita` di proteggere efficacemente il valore aggiunto dei tuo 
programma.  L'hacker puo` studiare il codice che distribuisci, e rimuovere le 
chiamate di rete, ma se lo fa perde funzionalita` importanti (tipo 
l'aggiornamento automatico dei tassi di cambio, nell'esempio).  Metti sui 
server le parti piu` importanti, idealmente indispensabili, e tutto il 
problema si sposta sulla sicurezza dei tuoi server (hint: OpenBSD).


Alex




More information about the Python mailing list