Kopierschutz

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Beitrag 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.
Zuletzt geändert von Sauer-RAM am 26.04.2009 20:33, insgesamt 1-mal geändert.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Beitrag 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.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
php-freak
Beiträge: 536
Registriert: 07.02.2009 18:08

Beitrag von php-freak »

Jo weils WIN-API ist! Das agt der _ zwischen dem Befehl und den Klammern!
PureBasic 4.30 (x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Beitrag von Sauer-RAM »

nicht wenn ich das datum abfrag und dann irgendwie was draus errechne und das ist dann der freischaltcode.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten