Avatar billede amoelle Nybegynder
23. maj 2001 - 11:58 Der 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.

På forhånd tak

Anne



Avatar billede delphidaner Nybegynder
23. maj 2001 - 13:24 #1
Prøv at læse lidt om shareware her: http://www.spiderwebsoftware.com/shareware.html

Jeg mener, at jeg har læst noget om fordele og ulemper ved de forskellige måder at begrænse og sælge sit produkt på.
Avatar billede amoelle Nybegynder
23. maj 2001 - 13:36 #2
- 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...
Avatar billede delphidaner Nybegynder
23. maj 2001 - 17:21 #3
Ærgerligt, at du ikke kunne bruge det. Hvor kan det mon så være, at jeg har læst om det?

PS: Du er ikke i en forkert gruppe.
Avatar billede nebula Nybegynder
02. juni 2001 - 06:35 #4
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å)

2) Ja, præcist hvad ønsker du info om? hvordan man skriver til reg databasen? Jeg har fundet et link på MSDN: http://support.microsoft.com/support/kb/articles/Q237/4/36.ASP der viser hvordan man læser/skriver til reg databasen fra Visual Basic.

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).
Avatar billede delphidaner Nybegynder
02. juni 2001 - 09:35 #5
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.
Avatar billede nebula Nybegynder
02. juni 2001 - 18:45 #6
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.
Avatar billede amoelle Nybegynder
02. juni 2001 - 22:18 #7
delphidaner > \"Jeg vil kraftigt fraråde at bruge registreringsdatabasen til brug af \"unlocking\" af et program\"

- hvad ville du så foreslå i stedet ?
Avatar billede delphidaner Nybegynder
04. juni 2001 - 11:02 #8
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.
Avatar billede nebula Nybegynder
05. juni 2001 - 08:15 #9
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...
Avatar billede delphidaner Nybegynder
05. juni 2001 - 11:38 #10
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.
Avatar billede nebula Nybegynder
05. juni 2001 - 11:52 #11
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.
Avatar billede delphidaner Nybegynder
05. juni 2001 - 16:51 #12
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.
Avatar billede amoelle Nybegynder
08. juni 2001 - 15:14 #13
Hej igen,
tak for en lærerig og seriøs diskussion. Jeg øger til 120 med 60 til hver.
/Anne
Avatar billede amoelle Nybegynder
08. juni 2001 - 15:21 #14
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.

Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester