PDA

Visualizza la versione completa : [DELPHI]Esiste un codice che identifica in modo univoco un computer?Come lo recupero?


halinder
10-10-2008, 10:14
Volevo chiedervi se esiste un codice che permette di identificare in modo univoco un computer, ad esempio un seriale del bios, del processore o qualcosa del genere. Sapete scrivermi il pezzo di codice Delphi utile per recuperarlo?

Mi serve per un sistema di protezione da copie che sto realizzando...

pallinopinco
10-10-2008, 10:24
Volevo chiedervi se esiste un codice che permette di identificare in modo univoco un computer, ad esempio un seriale del bios, del processore o qualcosa del genere. Sapete scrivermi il pezzo di codice Delphi utile per recuperarlo?

Mi serve per un sistema di protezione da copie che sto realizzando...


Non esiste un codice univico ed universale, i codici legati all'hardware vengono solitamente creati come combinazione di diversi elementi (CPUid, indirizzo MAC, identificativo della motherboard, ...).

Creare un sistema di protezione da copie efficace richiede una conoscenza approfondita della materia, se chiedi "sapete scrivermi il pezzo di codice Delphi utile per recuperarlo" un hacker da strapazzo impiega 30 secondi per forzare il tuo schema. In altri termini: non puoi difendere qualcosa se non ne conosci i punti deboli, implementare un algoritmo per la generazione di codici hardware è davvero l'ABC del programmatore.

Prendi spunto dai componenti open-source TurboPower OnGuard (http://sourceforge.net/projects/tponguard/).

halinder
10-10-2008, 12:09
Non avendo a che fare con hacker e non essendo poi fondamentale la protezione del programma mi accontenterei di una funzione che recupera l'ID della CPU...

pallinopinco
10-10-2008, 12:22
Non avendo a che fare con hacker e non essendo poi fondamentale la protezione del programma


Nel messaggio precedente hai scritto: "Mi serve per un sistema di protezione da copie che sto realizzando". Quindi mi sembrava ovvio che in un sistema di protezione fosse fondamentale la...protezione! :) Da chi dovrebbe proteggere il sistema di protezione delle copie che stai realizzando?



accontenterei di una funzione che recupera l'ID della CPU...


Non esiste un "ID della CPU", se non per alcuni vecchi modelli di Intel Pentium III (per i quali l'ID poteva anche essere disabilitato dall'utente).

Come ti ho detto anche prima i codici legati all'hardware vengono calcolati come combinazione di più elementi, per assicurarsi una certa robustezza nel caso di componenti hardware mancanti.

Potresti creare una stringa partendo dalla funzione cpuid, combinarla con l'indirizzo MAC per poi calcolarne l'hash SHA1. Il risultato può essere considerato un "codice hardware" minimale.

Rinnovo il consiglio di dare un'occhiata alla funzione CreateMachineID della libreria OnGuard.

halinder
10-10-2008, 14:36
Ti spiego: il problema che voglio evitare è che copiando il file exe da un pc all'altro sul secondo pc il programma continui a funzionare. Non ho bisogno di un sistema complesso o molto sicuro, perchè le persone che utilizzeranno il programma non sono in grado di "implementare un algoritmo per la generazione di codici hardware".

Avevo pensato a una cosa del genere: ogni volta che si avvia il mio programma questo va a leggere nel registro un valore e lo confronta con un codice univoco che identifica il pc. Se i due codici sono uguali il programma si avvia correttamente, altrimente manda a video il codice univoco e un messaggio che richiede l'attivazione del programma. Per attivare il programma l'utente mi deve mandare il codice univoco del suo pc, quindi io gli invierò un programmino d'attivazione che non fa altro che scrivere in una voce del registro questo codice (criptato), così al successivo avvio del programma principale questo partirà senza problemi. Naturalmente il codice che andrà scritto nel registro sarà "criptato" per fare in modo che senza il programma di attivazione l'utente non potrà andare a creare la voce di registro perchè non è in grado di ottenere il valore criptato partendo dal codice mostrato a video dal programma non ancora attivato.

Non so se sono stato abbastanza chiaro, comunque la sostanza è che mi serve un codice univoco (o un insieme di codici) per identificare il pc. Ho trovato un programma che stampa l'id della cpu: pensavo di usare quello, ma siccome hai detto che questo id non esiste volevo chiederti cos'è il codice che mi stampa questo programma (ho allegato uno screenshot) e se, qualunque cosa sia, secondo te va bene al mio scopo. Ti ringrazio per l'aiuto.

pallinopinco
10-10-2008, 16:59
Ho trovato un programma che stampa l'id della cpu: pensavo di usare quello, ma siccome hai detto che questo id non esiste volevo chiederti cos'è il codice che mi stampa questo programma (ho allegato uno screenshot) e se, qualunque cosa sia, secondo te va bene al mio scopo.


Dovresti chiederlo allo sviluppatore del software in questione... :)

In questa (http://www.torry.net/pages.php?id=235) pagina del repository Torry.net trovi diversi wrapper per l'istruzione CPUID, un'istruzione supportata da buona parte dei processori moderni (achitettura IA32/64) che restituisce informazioni sulle feature disponibili per un dato modello di processore. L'output della CPUID non è però univoco, però puoi usarlo (come detto più volte) combinato con altri parametri per generare un codice specifico, magari tramite un algoritmo di hashing.

Loading