Proteggere l'esecuzione di un foglio excel

giovedì 18 gennaio 2007 - 13.48

pitstop Profilo | Newbie

Vorrei sapere se qualcuno sa come proteggere una applicazione VBA implementata su in foglio excel.
In pratica, io vorrei proteggere utilizzando le caratteristiche univoche della macchina su cui il foglio excel va in esecuzione, allo scopo di non consentirne l'esecuzione su un'altra macchina.
So che esistono dei tools che permettono di proteggere un'applicazione ma non so se funzionano su un foglio Excel.

Brainkiller Profilo | Guru

>So che esistono dei tools che permettono di proteggere un'applicazione
>ma non so se funzionano su un foglio Excel.

Allora, Excel ti offre un layer di protezione che penso sia sufficiente per ciò che devi fare tu. E' possibile proteggere celle, fogli, cartelle o direttamente il file Excel, sia per lettura che per modifica. In questo modo chiunque lo apre prima di poter leggere cosa c'è scritto dentro e far partire l'applicazione VBA deve digitare la password corretta.

Nell'applicazione VBA puoi inoltre proteggere il codice con ulteriore password.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

pitstop Profilo | Newbie

Si, quello che dici è indubbiamente esatto ma, se metto una password e la comunico all'utente, nulla gli vieta di dare una copia del mio programma ad altri comunicandogli anche la password!
A me servirebbe (e non so se è possibile implementare qualcosa del genere in VBA, all'interno di Excel) una routine che legge ad esempio il codice seriale dell'hard-disk installato sulla macchina e restituisca un valore che l'utente deve comunicarmi. Io dovrei quindi restituirgli un seriale che sia legato a quel valore e che ovviamente il programma sia in grado di verificare, permettendo quindi lo sblocco dello stesso.

Brainkiller Profilo | Guru

>A me servirebbe (e non so se è possibile implementare qualcosa
>del genere in VBA, all'interno di Excel) una routine che legge
>ad esempio il codice seriale dell'hard-disk installato sulla
>macchina e restituisca un valore che l'utente deve comunicarmi.
>Io dovrei quindi restituirgli un seriale che sia legato a quel
>valore e che ovviamente il programma sia in grado di verificare,
>permettendo quindi lo sblocco dello stesso.

Si, leggere il serial dell'hard disk se non ricordo male non è così semplice, o per lo meno è sicuramente più semplice leggere una chiave dal registro e in particolare io andrei a leggere qui:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Dove è presente il seriale di Windows. A quel punto, tu puoi usare il Seriale per creare con una funzione Hash un codice particolare che poi fornisci al tuo utente. In questo modo il foglio di Excel può essere distribuito achiunque, ma l'applicazione VBA partirà solo se lanciata su quella macchina con quella copia di Windows.

Poi dipende insomma, uno può anche modificare la chiave nel registro e farlo partire su altre macchina, però a quel punto diventa un po' complicato. Inoltre se la security è impostata correttamente e l'utente è un domain user o comunque non un Administrator non può usare il registry e modificare le chiavi e quindi sei a posto.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

axxxxo Profilo | Newbie

Ciao, vorrei sapere se ci sei riuscito
sarei anc'io interessato allo stesso problema ma non ho trovato ancora una soluzione
grazie

Dainesi Profilo | Senior Member

Se ti basi solo sul seriale di Windows ..... sei a posto!!!! Con tutte le copie taroccate che ci sono in giro!
Potresti invece basare il tuo codice da trasmettere su una combinazione fatta di seriali e configurazioni.

Faccio un esempio:

Con GetVolumeInformation ottieni il seriale dell'HardDisk sul quale è installato il tuo programma (o risiede il tuo file Excel)

In HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion trovi il seriale di Windows

Con questo

Public Function MBSerialNumber() As String 'RETRIEVES SERIAL NUMBER OF MOTHERBOARD 'IF THERE IS MORE THAN ONE MOTHERBOARD, THE SERIAL 'NUMBERS WILL BE DELIMITED BY COMMAS 'YOU MUST HAVE WMI INSTALLED AND A REFERENCE TO 'Microsoft WMI Scripting Library IS REQUIRED Dim objs As Object Dim obj As Object Dim WMI As Object Dim sAns As String Set WMI = GetObject("WinMgmts:") Set objs = WMI.InstancesOf("Win32_BaseBoard") For Each obj In objs sAns = sAns & obj.SerialNumber If sAns < objs.Count Then sAns = sAns & "," Next MBSerialNumber = sAns End Function

ti trovi il seriale della Motherboard.

Sommi i tre numeri (ognuno di questi lo converti in numero sommando i valori dei codici ANSI associati), applica un algoritmo predefinito (al limite eleva al quadrato il numero risultante) e fatti inviare questo.

In risposta devi inviare un numero a cui il tuo programma applichi un altro algoritmo che, unito col numero generato sulla macchina del cliente ritorni 0.

In questo modo, riesci ad identificare la macchina, il disco e la copia di Windows ottenendo una combinazione univoca.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5