Serial key, programeren

Status
Niet open voor verdere reacties.

Vliegtuigfan

Gebruiker
Lid geworden
21 feb 2011
Berichten
625
Hoi. Ik weet het. Ik ben vandaag veel aan het posten...:rolleyes:

Mijn vraag is: ik heb een programma gemaakt met visual basic. een Free edition en een PRO editie.

Nou wil ik graag dat de gebruikers een serial key moeten invullen als ze het programma voor de eerste keer gebruiken. Is dit mogelijk?

Bedankt!:thumb:
 
Hoi. Ik weet het. Ik ben vandaag veel aan het posten...:rolleyes:

Ik denk dat er nog nooit in de hele bestaanstijd van Helpmij.nl iemand geweest is die in 1.5 maand zoveel topics geopend heeft.Wat dat betreft ben jij de recorddrager.;)
 
Laatst bewerkt:
lol, ben eh.. Nog niet zo lang op helpmij, en ik begin nu al erg geïnteresseerd in dingen te raken. Zoals programmeren. En het zou best een kunnen dat ik een recorddrager ben :)
 
Ik abboneer mij even op dit onderwerp, want dit is wel interessant, ben zelf al eens aan het brainstormen geweest, maar kreeg er helaas niets succesvol uit. Behalve dat het programma eerst contact ging maken met een server om de serial te controleren, alleen dit is geen optie voor gebruikers die niet altijd internet hebben. :(
 
Ik denk dat er nog nooit in de hele bestaanstijd van Helpmij.nl iemand geweest is die in 1.5 maand zoveel topics geopend heeft.Wat dat betreft ben jij de recorddrager.;)

Eénmalig offtopic, die gaat als een vliegtuig de gehele helpmij door.:D
 
hallo,

ik heb de bovenstaande link even kort bekeken, dus als die beter is, sorry daarvoor
maar ik zou MD5-hash gebruiken, dit is een one-way encryptor die dus onmogelijk terug te "vertalen" is.
in code:
Code:
Imports System.Security.Cryptography
Imports System.Text


Sub encode()
        Dim strPlainText As String = "Encrypt me!"
        Dim hashedDataBytes As Byte()
        Dim encoder As New UTF8Encoding()
        Dim md5Hasher As New MD5CryptoServiceProvider()
        hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(strPlainText))
        Dim s As String = ""
        For x = 0 To hashedDataBytes.Length - 1
            s &= Chr(hashedDataBytes(x))
        Next

        Dim strPlainText2 As String = "Encrypt me"
        Dim hashedDataBytes2 As Byte()
        Dim encoder2 As New UTF8Encoding()
        Dim md5Hasher2 As New MD5CryptoServiceProvider()
        hashedDataBytes2 = md5Hasher2.ComputeHash(encoder2.GetBytes(strPlainText2))
        Dim s2 As String = ""
        For x = 0 To hashedDataBytes2.Length - 1
            s2 &= Chr(hashedDataBytes2(x))
        Next

        MsgBox(s & Chr(13) & s2)
        Me.Close()
    End Sub

je ziet, het verschilt slechts een uitroepteken, maar de uitput is heel anders:

s = øã*ûÙX牫U>¯.àÍJ
s2 = ?’>”»£ýÎÅççÉ.ÞÜ

in php bestaat ook een MD5-hash, zodat je hem aan kunt passen,
het enige probleem bij mij is dat als ik een code NA het debuggen toe wil voegen, dat dat via een txt-file gaat, dit betekent dat die file veranderd kan worden, daarom gebruik ik tot nu toe een internet verbinding hiervoor

ik hoop dat ik je verder help

mvg rowano
 
Laatst bewerkt:
Ik ga allemaal proberen!

De 2e code van rowano is me iets beter in de smaak gevallen.

Sorry,ellasar...

De vraag is opgelost!!!
 
Laatst bewerkt:
Geen verontschuldigingen nodig hoor, het zijn 2 oplossingen voor eenzelfde probleem welke allebij voor en nadelen zullen hebben.

Met de MD5 methode moet je de hashcode vastleggen in de applicatie waardoor je 1 code voor elke gebruiker hebt (dus niet voor elke gebruiker een eigen) of je moet voor elke gebruiker de applicatie opnieuw maken met een andere hash erin.
 
hallo,

dat klopt, met MD5 moet je de code vooraf in het programma vastleggen, maar ik heb uw link niet volledig gelezen omdat deze nogal lang is
maar omdat ik niet voor elke gebruiker wil moeten debuggen, zal ik , zoals ik als zei, een php script op een website zetten die dit controleerd...

rowano
 
Nou, is het me nog niet helemaal gelukt. Ik ben een beginner... Maar waar moet ik deze code plaatsen? als ik hem plaats in de form1. zegt hij dat ik hem niet kan Debuggen!
 
Met de MD5 methode moet je de hashcode vastleggen in de applicatie waardoor je 1 code voor elke gebruiker hebt (dus niet voor elke gebruiker een eigen) of je moet voor elke gebruiker de applicatie opnieuw maken met een andere hash erin.

+

dat klopt, met MD5 moet je de code vooraf in het programma vastleggen

En volgens welke logica is dat dan? De TS gebruikt immers enkel en alleen het MD5 algoritme om de sleutel te genereren, voor de rest verandert er uiteraard helemaal niks. En dus kan de TS prima iets als het onderstaande schrijven:

[cpp]
if (inputSerial == GetMD5(inputName)) {
/* jippie, een geldige serial! */
}
[/cpp]

Je kunt jezelf echter afvragen of het verstandig is om hiervoor het MD5 algoritme te gebruiken. Het algoritme is immers zeer bekend en alleen al het zien van een geldige serial (= hash) kan voldoende zijn om het algoritme te herkennen.
 
Het algoritme is immers zeer bekend en alleen al het zien van een geldige serial (= hash) kan voldoende zijn om het algoritme te herkennen.

het is inderdaaad erg bekend, maar wel veilig...
het wordt immers (volgens mij) vaak gebruikt bij het opslaan van wachtwoorden op een server

elke hacker kan het algoritme van MD5 inderdaad ontdekken, maar dat wil niet zeggen dat hij van elke hash het origineel kan ontdekken

vergelijk het met dit: (een andere manier om iets te beveiligen, zelf gemaakt uit aantal wiki pagina's, lijkt een beetje op wat banken gebruiken volgens wiki)
men neemt 2 priemgetallen: bijv: 61,53 (zijn niet bekend voor de gebruiker)
vermenigvuldigt die: 3233
plaatst in een code:
Code:
dim p as double = 3233

bij het openen:
Code:
if p mod JouwIngevuldeGetal = 0 then 'mod is VB statement voor de rest
'toegang
end if

oftewel, alleen als je ofwel 61 ofwel 53 invult krijg je toegang,
iedereen begrijpt dit de code wel, maar weet niet de uitkomst (tenminste niet als je met grote getallen werkt)
en dus zul je elk priemgetal af moeten gaan om de goede te vinden

bijv: 7.243.464.231.030.700.634.999.874.837.289
Uitkomst
ik heb uitgerekend dat als je per sec 1.000.000 getallen afgaat, je nog steeds jaren bezig bent, en dat geld ook voor MD5 (als de code tenmiste lang genoeg is (+/- 8 tekens en langer)
 
het is inderdaaad erg bekend, maar wel veilig...
het wordt immers (volgens mij) vaak gebruikt bij het opslaan van wachtwoorden op een server
[/quote]

Voor het maken van die hashes wordt normaal gesproken wel een salt gebruikt (en dus is het gebruikte algoritme ook niet meer bekend).

elke hacker kan het algoritme van MD5 inderdaad ontdekken, maar dat wil niet zeggen dat hij van elke hash het origineel kan ontdekken

Maar waarom zou hij/zij de originele waarde willen ontdekken in het geval van een serial? Weten welk algoritme er gebruikt wordt is immers voldoende om je eigen serial(s) te genereren.

vergelijk het met dit: (een andere manier om iets te beveiligen, zelf gemaakt uit aantal wiki pagina's, lijkt een beetje op wat banken gebruiken volgens wiki)
men neemt 2 priemgetallen: bijv: 61,53 (zijn niet bekend voor de gebruiker)

Maar die vergelijking gaat in dit geval toch niet op? Alle informatie is immers bekend (als het gebruikte standaard algoritme herkend wordt). :p


ik heb uitgerekend dat als je per sec 1.000.000 getallen afgaat, je nog steeds jaren bezig bent, en dat geld ook voor MD5 (als de code tenmiste lang genoeg is (+/- 8 tekens en langer)

Nogmaals, het is nergens voor nodig om de oorspronkelijke waarde te achterhalen in het geval van een serial. Een geldige serial genereren om het programma te registreren is immers genoeg.
En het zou inderdaad een eeuwigheid kunnen duren om de waarde te brute forcen.

ps: een moderne PC zal heel wat meer dan 1.000.000 hashes/sec afgaan hoor. In 2009 deed een enkele 8800 GT met CUDA al 200.000.000+ hashes/sec.
 
Behalve dat het programma eerst contact ging maken met een server om de serial te controleren, alleen dit is geen optie voor gebruikers die niet altijd internet hebben. :(

Of je checkt het 1 keer en slaat daarna ergens (lokaal) op dat het een geldige versie is...
 
@viletung

Ik abboneer mij even op dit onderwerp
Dat je je abboneert op deze vraag is prima, heel goed zelfs. Maar nu ga je de vraag overnemen en dat is niet gewenst. Graag een eigen vraag maken a.u.b.
 
hierbij hoef je alleen 1 programma te maken en niet dat je 2 aparte versies maakt (pro/express)

ik denk dat dit de beste oplossing is.

In dit specifieke geval zouden twee versies (waarbij er in de probeer/gratis versie alleen de functionaliteit beschikbaar is (aanwezig) welke je beschikbaar wenst te hebben) weleens veel veiliger kunnen zijn. Het is in zekere zin uiteraard 'security through obscurity', want er hoeft maar één (wel een betalende) ******** te zijn die het lekt, maar bij software die minder populair is blijkt het toch zeer goed te werken. (er valt namelijk niks te kraken aan de gratis versie)

(de 'pro' versie kan je dan uiteraard wel gewoon beveiligen met een serial/key file)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan