[delphi] Uniek Computer ID op Windows/Linux

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

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik heb twee vragen:

Ik wil een licentie systeem maken, en hiervoor wil ik voor elke computer een aparte key genereren. Deze wordt gemaakt aan de hand van een uniek computer id. Nu wil ik graag weten hoe ik onder Windows een computer id kan opvragen. Het liefste wil ik een OS ID gebruiken, dus het ID van de Windows die je hebt. Hoe kan ik deze opvragen? En werkt deze ook vanaf Win98? (ik wil niet naar hardware kijken)

Het programma dat deze keys gaat maken komt online op een Linux server te staan. Een PHP script checkt in een MySQL database de licentie gegevens, en roept dan het programma aan. Als papameters wordt ook het unieke ID (dat van hierboven) doorgegeven, en de keygen maakt dan een nieuwe key.
Deze key moeten de gebruikers van het programma dan weer invoeren, en dan pas werkt het programma.
Nu wil ik er alleen voor zorgen, dat je die keygen alleen op de server kunt draaien. De keygen zal dus voordat ie start moeten kijken of hij dus op de server draait. Hoe dit precies gecheckt kan worden weet ik niet, omdat het dus op Linux is. Heb je daar ook OS ID's, of kun je de computer herkennen aan de hand van iets anders?

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik heb de ProductID van windows in het register gevonden. Maar is deze nu niet te manipuleren? Of geeft windows een melding als deze gewijzigd is? Anders moet ik naar een andere oplossing zoeken die niet te wijzigen is. Ik had bijv. iets gelezen over de ID opvragen van je HD.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dit is eigenlijk niet Delphi specifiek, maar gewoon een licentie systeem in het algemeen. Er zijn volgensmij al vele topics over geweest. Maar om er even over wat te zeggen: Er bestaat geen manier die niet gekraakt kan worden. Het is dus de vraag hoe ver je wilt gaan, hoeveel extra winst je er mee maakt en hoeveel klanten en tijd je verliest door het zo te maken.

We adore chaos because we like to restore order - M.C. Escher


  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik weet dat je het nooit 100% kunt beveiligen. In mijn geval wil ik gewoon freeware proggies met licenties hebben. Voor het geval ze shareware worden.
Het eigenlijke doel van mijn licentie systeem is, dat ik mooie statistieken kan krijgen van de gene die mijn software gebruiken. Ook wil ik gewoon wat kloten met Delphi om bepaalde dingen onder de knie te krijgen (ben lerende) en dit leek me wel een leuk projectje.

Het enigste wat ik nog moet weten is hoe je met Kylix een id kan krijgen van de pc, zodat ik dus mijn keygen kan beveiligen.

[edit]
Nu heb ik de volgende code gevonden:
Delphi:
1
{hier stond onzinnige Turbo Pascal code...}

Alleen krijg ik dan de volgende error: Operand size mismatch. (op r.27)

Iemand een idee?

[ Voor 86% gewijzigd door bgever op 05-07-2003 13:53 ]


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Ja, de 'I'-variabele die je ingeeft, is gedeclareerd als een 'var'; dat wil zeggen, je function krijgt een pointer naar die variabele mee. Onder windows is een pointer een 32-bits doubleword.
Wat je nu probeert op regel 27, is een 32-bits waarde in een 16-bits register te kopieren - vandaar de operand size mismatch

Overigens, ik zie 'int 21h' staan - dit zijn DOS-interrupts - en alleen maar 16-bits registers... is dit niet heel toevallig oude DOS-code? Goede kans dat dit niet zonder meer draait onder Windows...

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Hmm... ben nog 's ff door MSDN aan 't bladeren geweest... ik gok dat je de functie
DeviceIoControl() kunt gebruiken voor wat jij wilt...

http://msdn.microsoft.com...eiocontrol.asp?frame=true

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
MrBucket bedankt voor je uitleg. Ik vond het al vreemd dat alles niet werkte, en dat er soms ook 'DOS' in de uses list stond. Het waren vaker Turbo Pascal units. Blijkbaar staat in de BDN nogal veel oude code. (heb tientallen posts gezien met allemaal ongeveer de zelfde code).
Om de HD Serial onder Windows te vinden heb ik geen probleem, daarvoor kan ik de GetVolumeInformation method gebruiken uit de Windows unit. Het probleem is alleen, dat deze dus niet zal werken onder Kylix en dus Linux. Ik ben nu al twee uur aan het zoeken, maar kan geen code vinden om de HD Serial onder Linux te vinden...

Verwijderd

Onder linux kan je in de speciale 'proc' directory bij allerlei configuratiegegevens komen in de vorm van files. Kijk bijvoorbeeld eens in de /proc/ide/hda/ directory (dit kan bij jouw verschillen), ik zie daar een 'identify' file met daarin een nummertje...

Toch is dit denk ik niet de oplossing die je graag zou willen, daarvoor is het veel te low-level en te specifiek. Maar als je niets beters vindt?

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Verwijderd schreef op 05 July 2003 @ 14:27:
Toch is dit denk ik niet de oplossing die je graag zou willen, daarvoor is het veel te low-level en te specifiek. Maar als je niets beters vindt?
Altijd het proberen waard. Alleen ben ik bang dat ik misschien geen permissies heb tot die dir, want ik heb te maken met een online server, waar ook nog andere sites op gehost worden, en mijn hosting provider zal wel niet zo blij zijn met een proggie dat in configs gaat zoeken...

Ik had nog een ander 'simpel' alternatief bedacht, dat ik gewoon ergens in mijn mappen een file neer zet, en het proggie daar naar laat zoeken. Welke file dat is is dus onbekend, en daardoor kun je het programma niet zomaar op een andere pc draaien... Ook een ander alternatief zou een IP check zijn. Alleen vraag ik me af of een webserver ook één enkele specefieke IP heeft die dan ook nog eens te tracken is. Mocht iemand weten hoe je het IP kunt krijgen op een Linux server, laat het me dan weten...

  • Mr. B.
  • Registratie: Mei 2000
  • Niet online
oikoyama schreef op 05 July 2003 @ 13:51:
MrBucket bedankt voor je uitleg. Ik vond het al vreemd dat alles niet werkte, en dat er soms ook 'DOS' in de uses list stond. Het waren vaker Turbo Pascal units. Blijkbaar staat in de BDN nogal veel oude code. (heb tientallen posts gezien met allemaal ongeveer de zelfde code).
Om de HD Serial onder Windows te vinden heb ik geen probleem, daarvoor kan ik de GetVolumeInformation method gebruiken uit de Windows unit. Het probleem is alleen, dat deze dus niet zal werken onder Kylix en dus Linux. Ik ben nu al twee uur aan het zoeken, maar kan geen code vinden om de HD Serial onder Linux te vinden...
Ook die HD serial is makkelijk te wijzigen... voor FAT(32) partities heb ik er zelf ooit een programmaatje voor geschreven in TP7. Voor NTFS partities gebruik ik VolumeID van SysInternals (freeware). SysInternals heeft ook een aantal tools verzameld onder de naam PsTools, waaronder ook een programma om je System ID uit te lezen (PsGetSid); dat kan misschien wel van pas komen (voor Windows dan) :)

http://www.sysinternals.com/ntw2k/utilities.shtml... suc6 :)

StatBar.nl - @GoT

Het verschil tussen theorie en praktijk is in de praktijk altijd veel groter dan in theorie.


  • Mr. B.
  • Registratie: Mei 2000
  • Niet online
oikoyama schreef op 05 July 2003 @ 14:39:
[...]
Mocht iemand weten hoe je het IP kunt krijgen op een Linux server, laat het me dan weten...
Het makkelijkste lijkt me om de output van ifconfig te parsen... maar een server heeft al snel meerdere IP adressen en/of meerdere NICs, dus daar schiet je ook niet echt veel mee op denk ik.

StatBar.nl - @GoT

Het verschil tussen theorie en praktijk is in de praktijk altijd veel groter dan in theorie.

Pagina: 1