23. maj 2001 - 11:58Der er
12 kommentarer og 2 løsninger
check af brugerlicens i egenudviklede programmer ?
Er der nogle der kan hjælpe med tips om, hvordan man gør følgende:
Jeg udvikler og sælger et program (tidligere fik folk tilsendt en diskette med deres unikke serienummer/licensnummer) Nu vil jeg gerne tilbyde nye kunder at downloade det (i trial version) fra min webside. Når de så har betalt for programmet, skal de have tilsendt en e-mail med et licensnummer, som de skal indtaste (f.eks et menupunkt, der hedder \'Registrer programvare\', som kun er synlig, hvis programversionen ikke er registreret endnu)
Programmet skal så \'på en eller anden måde\' (???) checke, at det er et gyldigt/legalt serienummer, så brugeren nu er lovligt registreret. Det medfører, at hver gang programmet startes, kommer der en splash screen op med produktlogo, bitmap og beskeden: \'Dette xxxprogram er licenseret til Jens Jensen\'
Og således kan andre brugere kun \'stjæle\' en licens ved at få et serienummer fra een, der engang har købt det..... ( ligesom ved alle andre prgrammer)
Programmet er kodet i Visual Basic, og er en standalone applikation, der kører på Win95/98/NT.
Det jeg ikke kan få hul på er:
1) skal jeg udvikle min egen algoritme til generering af \'lovlige\' licensnumre, og derefter implementere afkodningsproceduren i programmet ?
2) Skal jeg igang med Windows registreringsdatabasen, i forbindelse med brugerens installation af den downloadede exe fil (som f.eks. er lavet med PaquetBuilder) Og hvis JA, så vil jeg meget gerne have et godt link til info om registreringsdatabasen. Indtil nu er det kun lykkedes mig at lave ulykker i med regEdit ;-)
3) Hvis jeg laver en installationsprocedure, skal der vel være en inputform, hvor brugeren indtaster navn, det modtagne licensnummer etc. Hvor gemmer jeg navn og lignende oplysninger ? Jeg er jo ikke ude i selvmodificerende kode, så jeg kan kun implementere en checkalgoritme, der checker det input (licensnummer) som jeg selv har genereret. Jeg er ikke interesseret i et gemme oplysningerne i en txt fil( eller .ini) i programkataloget. (Selvom jeg jo godt kunne køre det igennem noget kryptering på undersiden af inputformen, før det skrives i fil til disk.
- har lige kigget det igennem. Det er for overordnet og indeholder ikke nogle konkrete tekniske fif. Og alle begynder overvejelserne vedr. forretning er OK, men jeg har solgt produktet siden 1994, så det er ikke forretningsprincipper jeg efterlyser.
- men ellers tak
... men er jeg i en forkert gruppe ? Jeg mener, de principielle tekniske overvejelser vedr. f.eks. Windows registrerings databasen knytter sig jo ikke til om produktet er kodet i C++ eller VB...
1) Tja, du kan lave din egen algoritme, men du *skal* ikke. Der er massere af betalings algoritmer ude på markedet (om de er pengene værd tvivler jeg dog på)
3) Det du skal gøre, er at lave så dit program checker reg databasen for brugernavn, licens, etc - derefter kører du licences igennem din algoritme - er licensen korrekte forsættes med en splash screen der viser brugernavn fra reg databasen.
Og ja, du kan bare lave et lille program (eller en dialogboks under hjælp-menu\'en) der tillader brugeren at indtaste relavante oplysninger (programmet ligger så disse over i reg databasen).
Jeg vil kraftigt fraråde at bruge registreringsdatabasen til brug af \"unlocking\" af et program - det er alt for nemt at snyde med det. Men hvis den endelig skal bruges, så sørg for at der bruges en rimelig kraftig kryptering af licensnøglen.
Snyde hvordan? programmet checker samme licensnummer som der står i splashen - kører den igennem en validerings-algoritme og hvis alt er iorden starter programmet op.
Krypteringen vil virke på samme måde - og kopier du en licens nøgle kan du stadigt bare kopierer den til en anden maskine hvis du vil *snyde*
Nu fornemmer jeg ikke at det drejer sig om et system til flere millioner, hvorfor jeg foreslår en nem og ligefrem løsning.
Hvis jeg skulle lave et shareware-program, vil jeg for det meste foretrække at lave en ekstern, krypteret fil, hvor \"nøglen\" ligger i. Registreringsdatabasen er et af de første steder snydere kigger, og kun de færreste \"har mod\" nok til at rode med et programs egne datafiler, da de ikke ved hvad filerne bruges til.
Hvis det er et program, som skal bruges sammen med Internettet, er online godkendelse også en mulighed, men det tager jeg lidt afstand fra, dels fordi det er temmelig krævende (man skal have en server + det løse), og slutbrugere vil for det meste (med god grund) være utrygge ved at et program skal godkendes over Internettet, da de ikke ved, hvilke oplysninger den sender. Men man skal for alt i verden ikke bruge denne metode, hvis programmet ikke i forvejen er direkte afhængig af Internettet. Det er \"kun\" halvdelen af Danmarks husstande, der er på Internettet, og på det punkt er Danmark endda nr. 1 i verden (i procent naturligvis).
Men hvis det kun er et mindre program, så kan der nok ikke ske så meget ved at bruge registreringsdatabasen. Husk bare hele tiden at tænke på, hvad du ville gøre, hvis du ville snyde, og prøv at lave forhindringer. Folk er mere uærlige, end man skulle tro.
delphidaner>> forklar mig lige igen hvordan du mener du kan snyde? Du kan flytte nøglen rundt mellem maskiner - det er et problem som kun hardware-id\'er kan løse (og det er irriterende som bruger ikke at kunne installeret f.eks. et nyt motherboard uden at skulle gen-registrer/gen-installere) - Ellers ligger jo kun nøglen som firma\'et har sendt til dig i reg\'en. Ud fra den nøgle er det ret svært at generer en algoritme \"bare lige sådan\".
Dyre programmer som photoshop bruger filer på harddisken - og det er det mest tåbelige jeg har set. Vil man \"cracke\" et sådan program ville man bare tage den fra en installeret maskine og flytte folderen over på en anden.
Hvis du har mod på det, så kan du jo prøve følgende - det er noget jeg kalder hedder \"session-hashing\". Her er min ide: 1) programmet installeres. 2) efter installationen checker programmet timestamp på en af de filer der ligger på computeren (pas på med valget af denne - skal helst være en fil inkluderet i dit program, men kunne sagens være en systemfil - men disse kunne jo blive ændret, etc). 3) brugeren taster sin reg-kode ind. 4) programmet hasher reg-koden sammen med timestampet. - når så programmet starter op vil det checke om hashen og timestampet på filen passer... Hashing er forresten meget hurtigere end kryptering, og meget nemmere at have med at gøre.
Så kan man ikke længere \"bare\" flytte programmet mellem computere, da timestampet ændre sig når man gør dette. (ja man kan så bruge programmer til at ændre det med selv.. men man skal jo vide at det er timestampet man skal ændre for at gøre det, og hvilken fil man skal gøre det på).
Geninstallere personen programmet, indtaster hun blot din reg kode og alt funker igen...
Nu er jeg ved at være temmelig forvirret. Jeg tror jeg har misforstået noget et sted. Jeg prøver lige forfra:
Det der efterlyses, er en måde at unlocke et sharewareprogram på vha. et serielnummer, ikke?
Hvad med at lave en algoritme, som omdanner et serielnummer til et andet (hvor man er sikker på at funktionen er injektiv - dvs. hver forskellige serielnumre ikke kan give det sammen nummer). Denne algoritme kan implementeres i programmet sammen med et unikt serielnummer, som er helt unik for dette kopi af programmet. Når køberen bestiller og betaler programmet, oplyser køberen det serielnummer, og du sidder så og fodrer et program med den samme algoritme med det nummer, og får dermed et nyt serielnummer. Det nye nummer oplyses til kunden, som indtaster den i programmet, som så unlockes. Voila! Er det noget i den retning du har forestillet dig?
nebula >> hvem siger, at den fil, hvor koden skal ligge i, behøver at ligge i programmets mappe? Jeg er selv imod at et program skal lægge en masse underlige filer rundt omkring på computeren, så i stedet kan man også gemme oprettelsesdatoen i filen, så programmet kan checke om det passer med filens timestamp. Det vil den jo ikke, hvis man kopierer mappen til en anden computer. Her ville det være smart at kryptere filen, da det bliver meget svært at cracke programmet.
Jamen det er jo fuldstændigt tåbeligt at oprette en fil med koder i og så begynde at smide den rundt på harddisken (desuden er dette at bede om problemer for du kan f.eks. ikke garentere, at en der installerer programmet har rettigheder til andet end en bestemt folder -> men du har altid garenti for at en bruger kan skrive til sit område af reg-databasen) Det jeg mener, at at man blot på f.eks. programmets \"main.exe\" bruger timestampen til at hashe op mod -> simpelt, nemt og hurtigt.
Kort sagt, det jeg gør at hvad du foreslår - bare meget smartere -> jeg ligger alt data i en hashed streng i reg edit.
f.eks. regkode: 14. timestamp 10 hash (1410 * 10) = 14100 (ligges i reg) på program start op gør man så: 14100 (læses fra reg) unhash (14100 / 10) = 1410 -> tag første del [14] som er lisencen (gør den igennem din algoritme) dernæst tag timestampen [10] og check den op mod main.exe stemmer de overens så forsæt med indlæsning af program... vupti.
OK, nebula, nu har jeg forstået dig. Jeg misforstod dig fuldstændigt. Det var også en smart metode at bruge, den havde jeg ikke lige tænkt over. Den må jeg huske. :-)
Jeg vil endnu engang lige sige, at jeg også er meget imod at lægge filer rundt omkring på harddisken, men som jeg skrev i mit forrige indlæg, kan den bare lægges i programmets egen mappe med timestamp\'et gemt i selve filen. Så kan programmet checke om den timestamp stemmer overens med filens timestamp, men i princippet er det det samme, som du har foreslået - forskellen er bare filer og Registreringsdatabasen.
PS jeg burde måske fortælle, at jeg i den gamle version af programmet trak et serienummer til hver kunde. Dette viste så noget om årstal, version, løbenummer etc. Dette unikke serienummer krypterede jeg med en algoritme, som jeg slog op i en gammel lærebog. Serienummeret lå på installationsdisketten, og blev således lagt på maskinen, men under programkataloget. Det betød at enhver kones mand eller store søn kunne flytte den. Afkodningen af serienummer var implementeret i main programmet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.