Newsgroup: it.comp.programmare
Titolo: [semi OT. Scusate, lungo] Protezione librerie

Salve,
 
Vorrei sapere se esistono tecniche per proteggere parzialmente 
una libreria dal reverse engineering. Spiego il contesto 
sperando di non essere bloccato da "non è possibile farlo": so 
che non si può proteggere alcun software in modo veramente 
efficace.
 
Di fatto al momento lavoro per una sola ditta e al momento non 
ho prospettive di altri incarichi, quindi non posso porre 
condizioni. Premetto questo perché ci sono spesso in rete 
risposte il cui tenore è che una ditta che tenta di fare giochi 
sporchi è una causa persa ed è meglio cercare lavoro altrove. 
Lo so. Ma di questo periodo, potete immaginare, è già molto 
avere anche poco lavoro piuttosto che niente. E' stato 
riutilzzato il mio codice in termini non previsti dagli accordi 
ma come sopra posso fare solo difesa passiva. Fin qui l'accordo 
era di fornire i sorgenti (e potete immaginare che quello che 
paventavo è accaduto) ma da ora in poi dal mio PC usciranno 
solo una o più librerie.
 
Il software girerà su qualche microcontrollore Atmel o simili. 
Ancora non so esattamente cosa, ma si tratta di dispositivi 
portatili, quindi niente a che fare con PC. Naturamente non 
conosco i piani futuri ma so a grandi linee di cosa si occupa 
la ditta.
 
1) Presumo che continuerò a usare GCC, ma non posso contarci.
 
2) Un punto a mio favore è la natura del software su cui 
lavoro: posso farne gradualmente peggiorare le prestazioni 
allontandandosi dal valore limite di certi parametri senza 
compromettere la sicurezza. Posso inserire in una dozzina di 
punti delle sequenze di istruzioni adatte. Il codice crescerà 
un po' ma pazienza: un grande vantaggio è l'indipendenza dal 
target. Uno svantaggio è che una persona sufficientemente 
determinata decompilerà l'eseguibile, alla fine capirà cosa sta 
succedendo e "rimedierà".
 
3) Ho visto in altro contesto che è stato possibile crittare 
l'eseguibile sul microcontrollore (posso sbagliare, questo è 
quello che mi pare di ricordare). Potrebbero esistere tecniche 
simili per le librerie? Suppongo che questo sia possibile solo 
con un hardware adatto che supporti nativamente la tecnologia, 
ma meglio chiedere.
 
Questo è il contesto. Non so niente in questo campo e quel che 
vi chiedo è come farmi un'idea di quello che posso ottenere, a 
cominiciare da parole chiave e links. Per esempio, se cerco con 
google "how to encrypt a library", mi escono i risultati sulle 
librerie di crittografia che non è quel che mi occorre.
 
Il mio obiettivo, come dicevo, non è chiedere l'impossibile. 
Vorrei solo che il lavoro di reverse engineering che 
sicuramente so che faranno non gli convenga e percepiscano che 
gli costi meno continuare il rapporto di consulenza con me. 
Oltretutto so che la persona preposta a questo "lavoro" è un 
consulente esterno come me e nella decisione conterà solo il 
minor numero di ore di lavoro.
 
Non è un grande lavoro o chi sa quale segreto industriale; 
ovviamente solo io posso valutare le "grandezze in gioco", ma 
almeno vorrei essere informato sulle tecniche attuali, per 
quanto modeste o inesistenti possano essere in relazione a quel 
che vorrei ottenere. Grazie per ogni dritta.
 
Dr Crash
 
 

 
 
Credo di aver capito la tua domanda, ma.. visto che più che una domanda tecnica
è una domanda pratica (che si spera sempre non trasformarsi mai in una legale)
te ne faccio altre, più qualche osservazione.
 
Dipende semplicemente dai vostri accordi, dal vostro rapporto di fornitura.
 
Per dirne una, se sei pagato ad ore per scrivere un codice, mi pare più che
ragionevole che il cliente richieda il codice sorgente; se invece avete
stabilito un prezzo per un firmware funzionante a prescinere (magari gli dai
anche delle garanzie di funzionamento/manutenzione) allora non lo è più.
 
Oltre a questo, la tua paura è che non ti paghino o che riusino/rivendano
software che appartiene a te (e che puoi/vuoi rivendere anche ad altri)?
Per il primo caso ci sono i contratti e gli avvocati; diluisci il lavoro in
alcune milestones e aspetta i pagamenti, se saltano gli ultimi fagli scrivere
una lettera.
Per il secondo caso ci sono le licenze e gli avvocati; applica sul tuo codice
una licenza (non è detto che debba essere una open o una famosa, la puoi
scrivere anche te a patto che sia legalmente valida). Appena vieni a conoscenza
di una mossa sporca, beh, hai capito il concetto.. :)
Tieni presente che, facendo come sopra, puoi anche dar via il sorgente
facendo loro firmare che non lo rivenderanno/riuseranno.
 
In ogni caso, quando si tratta di soldi, più che dalla tecnologia cerca di
farti proteggere dalla legge.
Ovviamente nessuno ha la voglia di andare in tribunale, però cerca di
mostrarti sempre come quello che, tra le due parti, ne ha di più ;)
 
Ciao!


 
 
Ti ringrazio tanto del tempo che mi hai dedicato (risposta 
quasi più lunga della domanda!) ma quel che non avevo detto è 
che avevo già tentato di far inserire nel primo contratto delle 
salvaguardie. Semplicemente mi hanno detto che per "ragioni 
interne" non possono prendere quel tipo di accordi. Non solo, 
ma l'hanno messa sul piano che queste mie richieste erano 
indice di scarsa stima e fiducia da parte mia verso di loro. Io 
sapevo perfettamente come sarebbe andata a finire ma di questo 
periodo... Non ero né sono preso per il collo ma non ho voluto 
né vorrei in futuro dare un calcio a una possibilità di lavoro.
 
Certamente questa prima esperienza mi darebbe il precedente per 
richiedere garanzie ma il fatto è che non ho le prove nero su 
bianco di cosa abbiano fatto coi mie sorgenti anche se lo so 
benissimo. E' questo il punto fondamentale. Conoscendoli 
direbbero che sì, hanno utilizzato i sorgenti per capire ma 
hanno implementato un progetto totalmente nuovo e che nel caso 
li portassi in tribunale. Non è un lavoro da un milione di euro 
e non mi conviene.
 
Comunque grazie lo stesso. Sono consapevole che l'unica strada 
efficace è quella legale e la tua risposta è molto sensata. 
Speravo solo che esistesse una soluzione che si ponesse allo 
stesso scarso livello etico e professionale da loro dimostrata 
in modo da ingaggiare una specie di battaglia di logoramento 
che mi limitasse i danni :D
 
Dr Crash
 
 

 
 
Ah, di trucchetti ce ne sono a bizzeffe..
 
Per citarne uno molto gettonato, dagli solo il compilato, se ti chiedono il
sorgente dagli qualcos'altro (o glielo dai parziale, con alcuni pezzi
precompilati): se ne accorgeranno solo se provano a compilarlo e/o a leggere
determinati pezzi. Questa cosa la puoi fare ad oltranza, e mi raccomando
lamentati ogni volta di più che ai loro tecnici non va mai bene nulla, così
anche se hanno ragione si prenderanno una caziata lo stesso e alla fine
smetteranno di chiedere a chi di dovere di chiamarti ;)
 
Non metterti mai dalla parte del torto però, altrimenti finisce pure che
hanno ragione!
 
Ciao!