Licenze, codici seriali e gabole giuridiche nella fase di distribuzion...

mercoledì 14 aprile 2010 - 15.06

cicciociccio83 Profilo | Newbie

Innanzitutto un salutone a tutti, sono felice di potervi scrivere.
Vengo subito al problema. Ho sviluppato fino ad oggi alcuni applicativi gestionali client/server su commissione. Mi trovo ora ad affrontare un nuovo progetto che, potenzialmente, potrebbe prevedere lo sviluppo di un software da poter poi distribuire su larga scala, anche a livello internazionale. Ho bisogno di sapere, se qualcuno di voi ha esperienze in proposito, quali passi si devono affrontare prima di poter distribuire software su larga scala senza incasinarsi in gabole giuridiche-burocratiche che potrebbero rovinare tutto. In particolare mi chiedo:
1) Qual'è secondo voi il miglior sistema di gestione licenze e codici di serie? Cioè, distribuisco un cd col software all'interno, fin qui ci siamo. Come faccio a creare codici di serie per ogni copia venduta? In mente avrei una roba di questo tipo: creo un algoritmo che genera ed invia il codice seriale e il seriale dell'hard disk o della macchina sul quale il software viene installato ad un database remoto, tramite il quale viene restituito un codice di attivazione. Questo garantisce che sulla stessa macchina il software non possa essere reinstallato 2 volte. Potrebbe andare?
2) Conscete qualche studio legale o comunque qualche professionista che sappia indicarmi un modello standard di contratto/licenza da stipulare col compratore? C'è bisogno di essere iscritti a qualche albo per poter distribuire softwares? Insomma, c'è qualcuno che sappia dirmi quali sono le problematiche giuridiche alle quali potrei andare incontro?

Grazie mille ragazzi.

PS: se tra di voi c'è qualche professionista esperto del settore, non pretendo che mi risponda e fornisca una "consulenza" GRATIS. Nel qual caso sarò bene felice di essere ricontattato, anche in privato, per avviare una collaborazione attiva e duratura.

Cimperiali Profilo | Newbie

Ti rispondo per la parte tecnica e non leguleia
se è .net hai un problema: qualunque sistema usi per verificare il seriale, ti ritrovi a fare i conti con reflector. Una possibile contromisura (ma di veramente efficaci non ne esistono, neanche a pagamento) a costo zero è eazfuscator che trovi qui:
http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx

Poi, per cerare di evitare che il software sia utilizzato su una macchina diversa, il codice potrebbe verificare l'hd e/o il macaddress della macchina su cui gira rispetto a qualcosa che ti sei fatto mandare prima (vedi ad esempio WMI con google per questo e anche System.Management.ManagementObject nell' msdn)[In pratica, l'utente ti invia macadrress e seriale del volume (o te lo prendi tu con un client che gli chiedi di far girare all'upo, ma lo devi avvisare di cosa fa), tu con quei dati crei la chiave, composta da quei dati stessi che cripti con un algoritmo simmetrico]. Hai un altro problema, oltre a quello di evitare che si legga i sorgenti e capisca come fare: devi anche evitare che l'utente capisca com'è fatta la licenza (cosa cerchi di confrontare con cosa), quindi, oltre a offuscare come si deve il codice, dovresti anche criptare le informazioni che gli rimandi (quindi da qualche parte il tuo "file" di licenza deve restare sulla macchina di destinazione, criptato, il tuo software lo deve trovare, lo deve poter leggere e confrontare coi valori che trova sulla macchina, cioè il codice deve recuperare le info dalla macchina su cui gira e poi criptarle allo stesso modo per conforntarle . Ma questo confronto non può avvenire solo in fase di installazione, bensì ogni volta che il programma si avvia (e anche più spesso: ogni volta che fa qualcosa di "importante", tanto per aumentare la sicurezza), altrimenti basterebbe copiarsi il tutto su una macchina col framework adeguato e il programma funzionerebbe.
Una difficoltà di questa logica è che, mentre per l'installazione è (quasi) normale usare utenti con privilegi di Admin, l'utente con cui gira quotidianamente il software potrebbe non avere abbastanza privilegi per recuperare le info necessarie...

impedire la reinstallazione sulla stessa macchina due volte è un ulteriore "altro paio di maniche": se mi dai un pacchetto msi, e questo pacchetto è autorizzato ad installare una volta, nulla mi vieta di conservare l'originale per installare quante volte voglio. Di norma si scrive qualcosa di criptato da qualche parte per segnare che l'installazione è avvenuta (tipo registry) ma anche qui c'è chi poi se ne accorge, e basta cancellare la chiave per essere a posto. Alcuni ridondano questa informazione in n posti (nchiavi di registro, files sull hd), ma non ci vuole moltissimo a capire cosa c'è di nuovo su una macchina. Gli unici sistemi robusti sono quelli che si basano su dispositivi fisici (tipo chiave fisica abbinata ad una macchina), ma finirebbe per costarti uno sproposito. Insomma, una soluzione definitiva non esiste, anche se ci puoi provare (e se la trovi, dimmela!)

cicciociccio83 Profilo | Newbie

Grazie mille per la risposta. Il software che vado a sviluppare è potenzialmente appetibile su scala internazionale, ma è comunque un software di nicchia. Con questo cosa intendo? Se sviluppi un pacchetto come Microsoft Office puoi stare certo che i tentativi di hackeraggio o reverse engeneering saranno una valanga, ma se sviluppi un software fortemente tipizzato rivolto, che ne so, a ditte che producono chiodi (ho sparato giusto un esempio), puoi aspettarti che quel software possa interessare a tutte le ditte produttrici di chiodi nel mondo (che saranno moltissime) ma i tentativi di crackare quel software saranno comunque infinitamente minori, non so se mi spiego. Quindi, per quanto riguarda "l'offuscamento" del codice, ok, anche io avevo pensato a quelle soluzioni. Per il resto, la questione del codice o numero di serie è indubbiamente un bel problema. L'unico modo che ho è quello di usare il sistema più comune, quello che usano tutti. Attivazione tramite internet con chiave di apposita di ritorno e, se internet non c'è, attivazione telefonica. Le possibilità che il sistema venga hackerato, come ti ripeto, sono molto basse. Capisco crackare l'office o il photoshop, ma un software gestionale per aziende che producono chiodi no!!!
Hai qualche link da suggerimi in merito? Classi in vb o c# a riguardo già scritte? Non che non abbia voglia, ma sai meglio di me che se si può risparmiare un po di tempo usando moduli già usati e testati è molto meglio!

Cimperiali Profilo | Newbie

Classi che già fan tutto no, però
per cifrature (simmetriche - asimmetriche), dal download che puoi fare alla pagina linkata qui sotto, prendi spunto dalla classe "Encryption.vb" che si trova nella ClassLibrary
http://www.dotnetmonster.com/Uwe/DirItem.aspx/Articles/NET-Framework/Security/NET-Encryption-Simplified

per licenze, hai anche la possibilità di creare un controllo personalizzato da piazzare sui tuoi form che verifichi la sua licenza
se te la cavi a leggere in inglese:
cerca con google: licenseProvider dot net sample
oppure segui questo link alla msdn: http://social.msdn.microsoft.com/Search/en-US/?Query=licenseprovider
ma sappi che l'unico articolo decente che ho trovato sull'argomento è in C# ed è qui:
http://www.codeguru.com/columns/Experts/print.php/c5469/

Poi, in generale, questi due articoli sono molto istruttivi
http://webdon.com/vitas/antihack.asp
http://www.searchlores.org/protec/protec.htm

E devo dire che concordo con quello dei due che dice "non divulgare mai i tuoi segreti" ovvero: se hai un sistema di licencing che usi, non lo spiegare in giro, o finirai craccato prima di subito, ed è anche questo il motivo per cui non trovi quel che cerchi (classi che già facciano il lavoro in questione)

cicciociccio83 Profilo | Newbie

Beh sono assolutamente daccordo. Grazie mille.

Cimperiali Profilo | Newbie

Prego. Ti do ancora una dritta (se non l'ho già detto prima) : cerca qualcosa sulla firma digitale. Tipo questo:
http://msdn.microsoft.com/en-us/library/ms229745(VS.90).aspx

cicciociccio83 Profilo | Newbie

Grazie ancora, sei davvero gentile. Ora spero che qualcuno possa darmi delucidazioni sull'aspetto giuridico della cosa. Per distribuire un software su larga scala (è solo una speranza...) cosa devo fare? Che tipo di licenza e contratto devo stipulare con ogni singolo acquirente? Meglio affidarsi a qualche distributore che pensi a tutto?

Cimperiali Profilo | Newbie

Piacerebbe anche a me leggere la risposta di qualche "esperto" del settore leguleio. Intanto che la attendiamo insieme:
qui trovi un po' di informazioni di tipo legale che è bene sapere:
http://www.consulentelegaleinformatico.it/approfondimenticatinc.asp?IdC=6
tra le cose interessanti che ti racconta:
http://www.consulentelegaleinformatico.it/approfondimentidett.asp?id=45
http://www.consulentelegaleinformatico.it/approfondimentidett.asp?id=14
http://www.consulentelegaleinformatico.it/approfondimentidett.asp?id=7

Per i Contratti
http://www.oscon.it/ scarica il pacchetto: contiene dei doc in formato rtf,
tra cui un modello di contratto di fornitura software che ti può dare qualche idea
per assegnare ai tuoi clienti un diritto non esclusivo all'utilizzo del software fornito
(se non ho capito male, è quello che vorresti. Gurada in particolare i punti 9 e 10)

Per i tipi di Licenza d'Uso
http://it.wikipedia.org/wiki/Licenza_(informatica)
o anche
http://www.osservatoriotecnologico.it/software/approfondimenti/licenze.htm

poi scaricati questo Pdf per vedere bene di chi è alla fine il copyright e cosa significa essere gli "autori morali" di un'opera
http://www.oitos.it/opencms/opencms/oitos/Allegati/Presentazioni_eventi/SlidesQuadri.pdf


[Concretamente, se devi mettere un EndUserAgreement o altra licenza d'uso, ti consiglio di prendere spunto da qualcuna già fatta - ne trovi quante ne vuoi, sia con google, si anel vario software che sicuramente hai sul computer. Un solo consiglio: potendo, scegli la più corta, non la più lunga].
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5