Toon posts:

[VC++ 6.0] opvragen serienummer harde schijf

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
llo noorderburen :P ...

Bij de implementatie van ons eindwerk (software protectie) stoten we op een probleem. Onze licentiesleutel moet platvormafhankelijk zijn om het kopieren tegen te gaan. Hiervoor moeten we het harde schijf nummer kunnen opvragen. Zelfs na raadplegen van de search/FAQ... Op het internet stuiten op GetVolumeInformation, maar ook dit lukt ons niet B) ...

Moest iemand de juiste klasse, of een beetje info/tips kunnen geven, zouden we hem enorm dankbaar zijn _/-\o_

X:

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

C++:
1
2
3
4
5
6
7
8
9
LPTSTR pszVolumeSerial = new TCHAR[10];
DWORD dwVolSerial;

GetVolumeInformation("C:\\", NULL, 0, &dwVolSerial, NULL, NULL, NULL, 0);

_ltot(dwVolSerial, pszVolumeSerial, 16);
MessageBox(NULL, pszVolumeSerial, NULL, 0);

delete [] pszVolSerial;


Zo moet het iig volgens de Bijbel.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Verwijderd

Topicstarter
Bedankt Korben voor jouw snelle reply :). We zullen het onmiddellijk proberen ;). Nochtans zijn we van hetzelfde geloof (die bijbel hebben we ook geraadpleegd ;) )... maar we kwamen er niet uit ;), mischien nu wel :).

Bedankt!

Verwijderd

Delphi 7 O+
code:
1
2
3
4
5
6
7
var 
  VolSerNum: DWORD;
  Dummy1, Dummy2: DWORD;
begin
  if GetVolumeInformation('c:\', NIL, 0, @VolSerNum, Dummy1, Dummy2, NIL, 0) then
    ShowMessage(Format('%.4x:%.4x', [HiWord(VolSerNum), LoWord(VolSerNum)]));
end;

  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 19:55
Verwijderd schreef op 01 April 2003 @ 15:46:
llo noorderburen :P ...

Bij de implementatie van ons eindwerk (software protectie) stoten we op een probleem. Onze licentiesleutel moet platvormafhankelijk zijn om het kopieren tegen te gaan. Hiervoor moeten we het harde schijf nummer kunnen opvragen. Zelfs na raadplegen van de search/FAQ... Op het internet stuiten op GetVolumeInformation, maar ook dit lukt ons niet B) ...

Moest iemand de juiste klasse, of een beetje info/tips kunnen geven, zouden we hem enorm dankbaar zijn _/-\o_

X:
Ik weet het niet 100% zeker, maar volgens mij geeft de functie GetVolumeInformation een serie nummer terug van je volume. Met andere woorden, indien je je harddisk opnieuw formateert krijgt ie een nieuw serienummer. Zelfs partities op dezelfde harddisk hebben een unieke serienummer. Je snapt wel dat dit problemen gaat geven, indien je dus je protectie hierop plaatst. Het is namelijk niet uitgesloten dat iemand ooit zijn harddisk formateert (en die kans is veel groter dan dat zijn harddisk het opgeeft).

Wat jij volgens mij wilt weten is het echte serienummer van de harddisk zoals die door de fabrikant aan jouw specifieke harddisk is gegeven. Dat wordt een ander verhaal. Dat gaat je met Windows niet 1, 2, 3 zo lukken (misschien met WMI, zoek daar maar eens op met de MSDN van Microsoft). Zoek anders ook eens op het Internet naar tutorials/source code om het serienummer van je harddisk uit te lezen.

Nog een kleine toevoeging hierop. Wees er wel van bewust dat er fabrikanten van harddisk's zijn die of geen unieke serienummers toekennen aan hun harddisks of niet consequent aan al de types die zij fabriceren.

Wat misschien een veiliger idee is, is om je beveiliging niet van 1 ding te laten afhangen. Betrek er meer hardware bij als je dat zou willen, bijv. netwerkkaart/processor/floppy etc etc. Let wel: Dit is geen van allen verre van waterdicht en kleven er een hoop nadelen aan vast!!

Als ik ergens onvolledig in ben geweest (of misschien wel foutief), dan graag een reactie.


Een link (of je er wat aan hebt weet ik niet, maar dat is aan jou om het uit te zoeken :) ):

-http://codeguru.earthweb.com/system/DiskId32.shtml

[ Voor 4% gewijzigd door Primal op 01-04-2003 19:15 ]

"The fastest code, is the code that is never called."


Verwijderd

Topicstarter
llo Primal,
Jouw opmerking is terecht! We kunnen inmiddels het volumenummer uitlezen, maar deze wijzigt bij het formateren. We moeten dus inderdaad het productienummer hebben in plaats van het volumenummer. Bedankt voor jouw url, we hadden die ook al bekeken.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Indien mogelijk zou je het beste het MAC adres van de netwerkkaart kunnen gebruiken, dat is gegarandeerd wereldwijd uniek en verandert ook niet zo vaak. Al schijn je het MAC adres in te kunnen stellen in sommige NIC's/drivers geloof ik.

Moet je natuurlijk wel een PC met netwerkkaart hebben, maar als die er niet is, gebruik je gewoon de HD/CPU/etc.

[ Voor 47% gewijzigd door Gerco op 02-04-2003 15:13 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Gerco schreef op 02 April 2003 @ 15:12:
Indien mogelijk zou je het beste het MAC adres van de netwerkkaart kunnen gebruiken, dat is gegarandeerd wereldwijd uniek en verandert ook niet zo vaak. Al schijn je het MAC adres in te kunnen stellen in sommige NIC's/drivers geloof ik.

Moet je natuurlijk wel een PC met netwerkkaart hebben, maar als die er niet is, gebruik je gewoon de HD/CPU/etc.
Een MAC-adres is niet te veranderen, dat is hard-wired op de NIC. Veel routers ondersteunen dit wel. Het probleem is, wat doe je als de gebruiker z'n NIC opblaast en een nieuwe moet kopen? Dit probleem heb je bdw met alle hardware. En bovendien is van het rijtje NIC, HD, CPU de NIC de enige waarvan je 100% zeker weet dat die een unieke identificatie heeft en dat je die ook kunt achterhalen. Ik denk dat je het beste kunt kijken wat het minst waarschijnlijk wordt vervangen bij je doelpubliek.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Verwijderd

Topicstarter
Inderdaard Korben, maar een netwerkkaart is geen zekerheid bij de klant. Mischien het BIOS ID, 'k zie wel.

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 13-08 12:34
Vind het sowieso een beetje kansloos om je software afhankelijk van 1 machine te maken eigenlijk.. als iemand een nieuwe computer koopt, moet ie ook nieuwe software aanschaffen :S

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
lijkt een beetje op de WinXP beveiliging op deze manier :S

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 19:55
Verwijderd schreef op 03 April 2003 @ 08:53:
Inderdaard Korben, maar een netwerkkaart is geen zekerheid bij de klant. Mischien het BIOS ID, 'k zie wel.
Als je perse hardwarecomponenten wilt gebruiken om je beveiliging op te baseren, dan kun je bijv. de volgende simpele, misschien wat omslachtige en absoluut niet waterdichte methode (even mezelf indekken :) ) gebruiken:

1) Schrijf een tool die van netwerkkaarten/harddisks/CPU/etc in staat is om er een unieke serienummer uit te halen en er een (ge-encrypte) sleutel van te genereren
2) De klant start deze tool op en wordt voor de keuze gesteld welk van de componenten (kan er ook 1 zijn) er gebruikt moet worden om een sleutel te laten genereren (schrijf er help instructies bij zodat ie weet waarover het gaat etc. etc)
3) De gegenereerde sleutel wordt samen met de keuze voor het component in een bestand opgeslagen. Deze stuurt de klant naar jullie bedrijf op
4) Jullie bedrijf stopt wat extra data (zoals de licensieperiode etc) bij de van de klant ontvangen data (alles in een structure bijv.), calculeert een 32-bits CRC over de data en stopt die ook in het structure, encrypt het structure met de sleutel van de klant en stuurt het terug naar de klant
5) Jullie applicatie leest de data in (hierin staan nu o.a.: de gegenereerde sleutel, welk component, licensieperiode etc), decrypt de data (met de gebruikte sleutel, leest ie bijv. uit een bestandje dat je bij stap 3 hebt opgeslagen om de schijf van de klant met zijn medeweten!!), verifieert de data middels de 32-bits CRC. Klopt dit alles, dan kunnen er acties ondernomen worden.

Dit is een korte omschrijving van iets dat wel werkt. Zoals ik ook al aangaf: het is misschien wat omslachtig (doet denken aan de public/private key methode) en ook dit is natuurlijk niet waterdicht. Wat wel een voordeel is, is dat de klant op deze manier zelf kan aangeven welk hardware component hij wil gebruiken om zijn sleutel mee te genereren. Als hij bijvoorbeeld de software op 2 computers wil gebruiken (maar niet tegelijkertijd), dan zou hij het bijvoorbeeld op een component kunnen kiezen dat redelijk makkelijk te verwisselen is (als een netwerkkaart).

Tevens zou je tool moeten kijken welke componenten een valid serienummer teruggeven. Als je de WMI API van Windows gebruikt en je vraagt bijv. de CPU-ID van je processor op, dan zul je niet altijd een bruikbare serienummer terugkrijgen afhankelijk van het processortype (soms is het: 123456789, nou dan weet je het wel :) ).

Tevens nog eens de opmerking: zoals ook Korben al opmerkte is alleen je MAC-adres altijd een uniek serienummer wereldwijd. Met een kleine kanttekening: er zijn kaarten die middels drivers een MAC-adres kunnen aannemen. Maar reset je de kaart/installeer je je OS opnieuw etc., dan heeft je kaart zijn oorspronkelijke MAC-adres weer. Ik heb nog geen kaart gezien waarop je het hardgebakken MAC-adres kunt 'flashen', maar als iemand dat wel heeft gezien, dan graag een reactie (leer ik ook weer wat). Er zijn dus harddisks/processoren/floppy die of helemaal geen serienummer hebben of geen unieke of wel natuurlijk :)

BIOS zou ik zowieso niet doen.
Vind het sowieso een beetje kansloos om je software afhankelijk van 1 machine te maken eigenlijk.. als iemand een nieuwe computer koopt, moet ie ook nieuwe software aanschaffen :S
Hier heb je natuurlijk wel gelijk in, maar geef dan tenminste ook een manier waarvan jij denkt dat het wel meer kans van slagen heeft. :)
lijkt een beetje op de WinXP beveiliging op deze manier :S
Same here. :)

[ Voor 8% gewijzigd door Primal op 03-04-2003 23:25 ]

"The fastest code, is the code that is never called."


Verwijderd

Topicstarter
Super antwoord Primal, zeer leerrijk en nuttig voor mijn thesis (y), keep it up!!!

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 22-08 10:56

Delphi32

Heading for the gates of Eden

Ik heb dit topic gelezen omdat ik beroepshalve mijn eigen applicatie moet beveiligen tegen kopiëren, en ik wil toch even wat kwijt.
Het voorstel van Primal zit zeer goed in elkaar en bereikt een zo hoog mogelijke graad van beveiliging, en een vergelijkbaar systeem heb ik ook overwogen. Ik ben uiteindelijk toch terecht gekomen bij de meest simpele beveiliging waar TS ook al mee kwam: de serial van de hd (en dan niet het productienummer maar de volume Id). Waarom? Simpel: andere overwegingen.
- de gebruiker een component van zijn systeem laten kiezen voor de generatie van een key, veronderstelt dat de gebruiker vantevoren al weet welke componenten niet zullen wijzigen gedurende de lifetime van de te licentiëren applicatie. Wijzigt de gekozen hardware alsnog (bv doordat de FD stuk gaat en vervangen wordt, ik noem maar wat), dan wordt de licentie alsnog ongeldig. In essentie is dit hetzelfde probleem als de format waarmee de volumeid wijzigt, toch?
- ik vind het naar de gebruiker toe een behoorlijk technisch verhaal; ben bang dat mn buurman het echt niet gaat snappen wat ie nou moet kiezen (no offence Jan :))
- implementeren van alle code die de unieke IDs van de randapparatuur uitleest, kost me aanzienlijk meer werk dan het ophalen van de VolumeId via een standaard API call; die laatste kostte me inclusief de key generator en de validatiecode misschien een half uurtje.
- en de laatste overweging, niet de onbelangrijkste: ik verwacht geen miljoenen gebruikers, dus de kans dat klanten met een licentieprobleem zitten omdat ze een HD format hebben gedaan, en mij dus bellen, is ook kleiner. Bovendien: van de gebruikers heb ik natuurlijk bijgehouden wie welke licentie heeft, dus iemand die een format heeft gedaan moet mij maar vertellen dat ie een format heeft gedaan en dus een nieuwe code nodig heeft. Ik ken de klant, dus ik regel dat.

Kortom, praktische overwegingen kunnen je doen kiezen voor een theoretisch minder strakke oplossing.

  • DUX
  • Registratie: September 2002
  • Nu online

DUX

blijft ook nu voor Oranje

Ik weet het niet zeker, maar volgens mij is het mogelijk het MAC-adres te wijzigen van mijn netwerkaansluiting op mijn Epox 8RDA+ moederbord.

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

DUX. schreef op 04 April 2003 @ 00:36:
Ik weet het niet zeker, maar volgens mij is het mogelijk het MAC-adres te wijzigen van mijn netwerkaansluiting op mijn Epox 8RDA+ moederbord.
Kwilniemoeilijkdoen maar voor iedere netwerkkaart bestaan die tooltjes. MAC-adres zit geflashed in het ding.

Tis overigens allesbehalve aan te raden om te doen, je kunt er je netwerkverbinding danig onstabiel mee maken.

Professionele website nodig?


  • DUX
  • Registratie: September 2002
  • Nu online

DUX

blijft ook nu voor Oranje

Jawel, maar de wijzigingsmogelijkheden zitten bij dit moederbord gewoon in het BIOS, dus er zal wel enigzins rekening gehouden zijn met wijzigingen van het MAC-adres...

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Korben schreef op 03 April 2003 @ 01:19:
Een MAC-adres is niet te veranderen, dat is hard-wired op de NIC. Veel routers ondersteunen dit wel.
offtopic:
Wel toevallig dat de NICs die ik gebruik (3COM en Intel/DEC; gewone thuisgebruikerkaartjes) er beiden geen moeite mee hebben. Ik had dan ook het idee dat zo'n beetje alle netwerkkaarten 't wel kunnen.

[ Voor 4% gewijzigd door Soultaker op 04-04-2003 10:37 ]

Pagina: 1