Seite 3 von 6

Verfasst: 26.04.2009 20:08
von X360 Andy
Wieso eigentlich so kompliziert ?

Code: Alles auswählen

Kennwort$ = "PureBasic"
If InputRequester("Berechtigung", "Gib das Kennwort ein", "") = Kennwort$
  MessageRequester("Super", "Super du hast richtige Kennwort..:")
Else
  End
EndIf

Oder man setzt das noch vorne rein und kann sein Passwort jeder Zeit ändern.....

Das einzigste was man braucht ist irgendein Webspace wo man zugriff hat.


(Falls die User nicht über Proxy ins Internet gehen)

Code: Alles auswählen

InitNetwork()
WebspacePfad$ = "" ; Pfad zu der Online Datei 
If ReceiveHTTPFile(WebspacePfad$, "Kennwort.txt")
  ReadFile(0, "Kennwort.txt")
  Kennwort$ = ReadString(0)
  CloseFile(0)
  DeleteFile("Kennwort.txt")
EndIf
Die Datei die aufdem Websoace liegt muss einfach nur ein Wort beinhalten.

Verfasst: 26.04.2009 20:18
von Sauer-RAM
oder ich mach es so dass sich das Passwort pro halbe stunde um eins erhöht und man dann das passwort beim ersten aufrufen telefonisch bei mir anforder muss.

Verfasst: 26.04.2009 20:31
von Sauer-RAM
mk-soft
ich hab mal dein Code kopiert und in eine purebasic datei eingefügt, aber es kommt eine fehlermeldung das GetCurrentHWProfile_()
keine funktion makro oder array ist oder nicht in der demo verfügbar ist.

Verfasst: 26.04.2009 20:40
von php-freak
Jo weils WIN-API ist! Das agt der _ zwischen dem Befehl und den Klammern!

Verfasst: 26.04.2009 20:43
von Kaeru Gaman
mk-soft hat geschrieben:Der Freischaltcode kann auch telefonisch angefordert werden. Das Programm so schreiben das erst nach der eingabe des freischaltcode erst alle funktionen verfügbar sind.
ahjo, aber das bringt doch auch nix, oder?
dann kann man doch den freischaltcode mit ner kopie weitergeben....

Verfasst: 26.04.2009 20:46
von Sauer-RAM
nicht wenn ich das datum abfrag und dann irgendwie was draus errechne und das ist dann der freischaltcode.

Verfasst: 26.04.2009 20:56
von mk-soft
Kaeru Gaman hat geschrieben:
mk-soft hat geschrieben:Der Freischaltcode kann auch telefonisch angefordert werden. Das Programm so schreiben das erst nach der eingabe des freischaltcode erst alle funktionen verfügbar sind.
ahjo, aber das bringt doch auch nix, oder?
dann kann man doch den freischaltcode mit ner kopie weitergeben....
Kannst ja mal versuchen das Programm mit kopierten Freischaltcode (liegt in %APPDATA%\mk-soft) auf ein anderen PC laufen zu lassen :wink:
Anwendung:

Code: Alles auswählen

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
  #Menu_Datei
  #Menu_Lizenzcode
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #List
EndEnumeration

;
; Get Hardware Fingerprint
;
#HW_PROFILE_GUIDLEN = $27
#MAX_PROFILE_LEN = $50

Structure HW_PROFILE_INFO
  DockInfo.l
  szHWProfileGUID.c[#HW_PROFILE_GUIDLEN]
  szHwProfileName.c[#MAX_PROFILE_LEN]
EndStructure

Procedure.s HardwareFingerprint()
  Protected hwp.HW_PROFILE_INFO
  Protected result.s
 
  GetCurrentHwProfile_(@hwp)
  result = PeekS(@hwp\szHWProfileGUID[0])
  
  ProcedureReturn result
EndProcedure



Procedure.s CreateQueryCode()
  
  Protected query.s, hw_code.s
  
  hw_code = HardwareFingerprint()
  query = MD5Fingerprint(@hw_code, StringByteLength(hw_code))
  ProcedureReturn query
  
EndProcedure

Procedure CheckCode(productcode.s)
  Protected code.s, Result.s
  code = "key:" + CreateQueryCode()
  result = MD5Fingerprint(@code, StringByteLength(code))
  If result = productcode
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

; ***************************************************************************************

Global productcode.s

Procedure LoadProductCode()
  
  Protected path.s
  
  path = GetEnvironmentVariable("APPDATA")
  If Right(path, 1) <> ""
    path + ""
  EndIf
  path + "mk-soft"
  CreateDirectory(path)
  path + "example.ini"
  If OpenPreferences(path) = 0
    CreatePreferences(path)
  EndIf
  PreferenceGroup("Lizence")
  productcode = ReadPreferenceString("productcode" , "")
  ClosePreferences()

EndProcedure

Procedure SaveProductCode()
  
  Protected path.s
  
  path = GetEnvironmentVariable("APPDATA")
  If Right(path, 1) <> ""
    path + ""
  EndIf
  path + "mk-soft"
  CreateDirectory(path)
  path + "example.ini"
  If OpenPreferences(path) = 0
    CreatePreferences(path)
  EndIf
  PreferenceGroup("Lizence")
  WritePreferenceString("productcode" , productcode)
  ClosePreferences()
EndProcedure

Procedure Freischaltung()
  
  Protected query.s, result.s
  
  query = CreateQueryCode()
  
  result = InputRequester("Freischaltung", "Anfragecode: " + query, productcode)
  If result
    If CheckCode(result)
      productcode = result
      MessageRequester("Info" , "Produktcode gültig -  Ihre Software ist jetzt freigegeben")
      SaveProductCode()
    Else
      MessageRequester("Fehler" , "Produktcode ungültig")
    EndIf
  EndIf
EndProcedure

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x,y,dx,dy
  Protected mn,st,tb
  
  x = 0
  y = 0
  mn = MenuHeight()
  st = StatusBarHeight(#StatusBar)
  ;tb = ToolBarHeight(#ToolBar)
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - mn - st - tb
  ResizeGadget(#List, x, y, dx, dy)
  
EndProcedure

Procedure WriteLog(Info.s)
  Protected temp.s
  temp = FormatDate("%YYYY.%MM.%DD %HH:%II:%SS - ", Date()) + Info
  AddGadgetItem(#List, -1, temp)
  If CountGadgetItems(#List) > 500
    RemoveGadgetItem(#List, 0)
  EndIf
EndProcedure

;- Globale Variablen
Global exit = 0

LoadProductCode()
  
;- Fenster
style = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", style)
  ; Menu
  If CreateMenu(#Menu, WindowID(#Window))
    MenuTitle("&Datei")
      MenuItem(#Menu_Exit, "Be&enden")
    MenuTitle("&Extras")
      MenuItem(#Menu_Lizenzcode, "&Freischaltung")
  EndIf
  ; Statusbar
  CreateStatusBar(#Statusbar, WindowID(#Window))
  ; Gadgets
  If CreateGadgetList(WindowID(#Window))
    ListViewGadget(#List, 0,0,0,0)
  EndIf
  
  If CheckCode(productcode)
    WriteLog("Anwendung freigegeben")
  Else
    WriteLog("Anwendung Freischaltcode anfordern!!!")
  EndIf
  
  ;-- Hauptschleife
  Repeat
    event   = WaitWindowEvent()
    window  = EventWindow()
    menu    = EventMenu()
    type    = EventType()
    Select event
      Case #PB_Event_Menu
        Select menu
          Case #Menu_Exit
            Exit = 1
          Case #Menu_Lizenzcode
            Freischaltung()
        EndSelect
      Case #PB_Event_Gadget
      Case #PB_Event_CloseWindow
        Exit = 1
      Case #PB_Event_Repaint
      Case #PB_Event_SizeWindow
        UpdateWindow()
        
      Case #PB_Event_MoveWindow
      Case #PB_Event_ActivateWindow
      Case #PB_Event_SysTray
    
    EndSelect
    
  Until Exit
EndIf
Hotline

Code: Alles auswählen


Procedure.s CreateCode(querycode.s)
  Protected Code.s, Result.s
  Code = "key:" + querycode
  Result = MD5Fingerprint(@Code, StringByteLength(Code))
  ProcedureReturn Result
EndProcedure

querycode.s = InputRequester("Hotline", "Anfragecode:", "")
productcode.s = CreateCode(querycode)
Debug productcode
Viel spass am Code eintippen. Habe mich auch zwei mal verschrieben :mrgreen:

Kann ma aber noch alles verbessern.

FF :wink:

Verfasst: 26.04.2009 22:25
von KeyKon
Ich würde das ganze mit Seriennummern machen die nach einmaliger Aktivierung an das Hardwareprofil gekoppelt sind, ganz im Stil von dem aktuellen SecuRom-Verfahren...
Das ganze natürlich über einen Server, dann musst du im Prinzip nix dazutun...

Verfasst: 26.04.2009 23:05
von ZeHa
Mal ganz anders gefragt... wozu genau brauchst Du das eigentlich? Ist Dein Programm so peinlich daß Du Angst hast, Deine Freunde geben es weiter um Dich zu ärgern, oder wozu der ganze Aufwand?

Kopierschutz ist in den meisten Fällen verschwendete Zeit.

Verfasst: 26.04.2009 23:23
von ts-soft
ZeHa hat geschrieben:Mal ganz anders gefragt... wozu genau brauchst Du das eigentlich? Ist Dein Programm so peinlich daß Du Angst hast, Deine Freunde geben es weiter um Dich zu ärgern, oder wozu der ganze Aufwand?

Kopierschutz ist in den meisten Fällen verschwendete Zeit.
+1 :lol:
Genau das habe ich mich auch die ganze Zeit gefragt, mich aber nicht
getraut so direkt nachzufragen Bild