vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Workshop 119: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: TZollo
 Workshop anzeigenDatum: 07.10.10 14:13

Hallo zusammen,

ich habe mit Begeisterung versucht den o. g. Workshop umzusetzen und bekomme leider in der Sub "Generate" gleich in der dritten Zeile "ReDim X(KeyLen() \ 8)" die Meldung "KeyLen wurde nicht deklariert"

Kann mir jemand helfen???

Ach ja ich nutze VB2008 Prof.

Vielen Dank im Voraus

Thobias
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 09.10.10 13:23

Für KeyLen() muss einfach die Länge des Verschlüsslungskeys eingesetzt werden, zum Beispiel so:
    Function KeyLen() As Integer
        Dim P() As Byte, Z As Integer
        P = My.Computer.FileSystem.ReadAllBytes(Application.ExecutablePath)
        Z = 0
        For I As Integer = 0 To 127
            Z += 1
            Z += P(I + 128)
        Next
        Return (Z * 8)
    End Function
Hatte wohl vergessen, das dazuzuschreiben, sorry
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: +++MaRuSo+++
Datum: 21.11.10 06:50

Ist es nicht sehr einfach die entsprechenden Funktion dieses Kopierschutz zu deakivieren und damit den ganzen Schutz komplett ab zu schalten?

Ich denke dass, wenn man nicht wichtige Teile des Programms nur auf dem Server verfügbar machen will, der einzige wirklich sichere Weg ein Dongle ist.
Aber die sind ja nun mittlerweile doch recht erschwinglich geworden.

Natürlich ist das immer eine Frage des Aufwands den man zum Schutz seiner Software betreiben will, und letztlich wohl auch eine Kosten-/Nutzenfrage.
Für "1 Euro" Programme lohnt sich wohl ein Dongle nicht wirklich, da ist so ein Schutz wie im Workshop beschrieben wohl völlig ausreichend, wenn nich sogar schon zuviel des guten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: ModeratorRalfE (Moderator)
Datum: 21.11.10 17:05

Naja, nen Dongle allein macht das Programm ja auch nicht sicher. Sobald man herausfindet, wo die Kommunikation mit dem Dongle stattfindet, kann man die entsprechende Aufrufe umbiegen und aushebneln.

BTW: Hat jemand Erfahrungen mit Dongles? Neben den Schutzaspekt würde mich die Kundenakzeptanz interessieren.

Ralf

MCPD, MCTS, MCAS

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 21.11.10 19:25

Eigentlich ist ja schon eine CD mit ner bestimmten ID oder beschriebenem Whitespace ein Dongle. Ich würde mir aber keiinen extra Stick anschaffen, um ein Programm zu nutzen.
@MaRuSo:
Wenn mans genau nimmt ist das Prinzip das gleiche wie bei der Aktivierung von Windows, nur eben in klein.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: +++MaRuSo+++
Datum: 18.12.10 10:34

Sicher, ein Dongle allein macht noch keinen guten Softwareschutz aus...

Kommt naürlich immer darauf an wie man das Dongle ins Programm einarbeitet. Ist eben, wie schon gesagt eine Frage des Aufwands den man betreiben möchte. Kein Schutz ist 100% sicher...aber man kann´s den Leuten schon sehr sehr schwer machen.

Der beste Schutz ist immernoch der einen guten Support zu liefern...;)

Also über Erfahrungen mit Dongles kann ich nur aus dem Experimentierstadium berichten. War bisher nie nötig eins in meinen Programm zu integrieren. Das liegt daran dass meine Software eh immer speziell auf den jeweiligen Kunden zugeschnitten wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: +++MaRuSo+++
Datum: 18.12.10 10:40

@NiWa

Das ist wohl wahr das Windows nach dem selben Prinzip arbeitet...allerdings ist da ja das ganze authentifikationsgefrickel so derb ins Betriebsystem eingeflochten, dass es auch eine riesen Arbeit ist des Zeug wieder los zu werden...und 100% sauber bekommt das auch keiner hin, denn sowie man sich mit einer geknackten Version ein Update holen oder bloß mal "Guten Tag" bei Microsoft sagen will, ist schon schluss mit lustig. ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 18.12.10 10:58

Man kann ja auch nix unknackbar machen, spätestens das echte Programm muss ja seinen eigenen Kopierschutz auslesen können und wenns das Programm kann, dann kann das auch theoretisch jeder andere. Man muss den Knackern nnur viel Arbeit liefern um sie im Schach zu halten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: BasicOpa
Datum: 04.03.11 11:37

Hallo,

ich habe den Workshop aufmerksam gelesen, weil ich im Begriff bin, einen einigermaßen sicheren Kopierschutz für meine Programme aufzubauen.

Aus dem hier dargestellten Kozept will ich den Grundgedanken übernehmen, ein Programm mit dem Computer "zu verbinden", auf dem es laufen soll. Wie das prinzipiell über interne Daten des betreffenden Computers funktioniert, ist auch vollkommen klar und verstanden.

Allerding möchte ich das Konzept insofern modifizieren, als mangels eines Servers auf eine "Online-Aktivierung" verzichtet werden muss. Mein Plan ist, dass statt des eigentlichen Programmes die "Lizenz" zu dem betreffenden Programm verkauft und von einem Shop downloaded wird. Mittels dieser meldet der User das eigentliche Programm - das er noch gar nicht hat - zur Freischaltung an. Das erfolgt mittels eMail, deren Inhalt neben persönlichen Daten auch die verschlüsselten Daten des betreffenden Computers enthält. Jetzt kann das eigentliche Progamm mit den Computerdaten verbunden und dem User übermittelt werden.

Das ist so weit fertig gestellt - und funktioniert auch. Aber es gibt eine entscheidende Lücke. Denn, bei diesem Konzept muss auch die "Lizenz" ein Unikat sein, weil sonst sie es ist, die verteilt werden kann.

Im hier vorgestellten, ursprünglichen Konzept wird u.a. der "Produktkey" behandelt. Ich habe das so verstanden, dass damit genau jener Umstand, dass das Programm nicht wahllos verteilt werden kann, sichergestellt wird. Und hier verstehe ich nicht, wie das funktionieren soll, denn wenn der Key beim User jedesmal nach dem Zufallsprinzip neu erstellt wird, kann das ja nicht klappen.

Wo und warum bin ich hier im Irrtum? Anders herum, wie kann ich bei meinem Kozept dafür sorgen, dass jedes Download meiner "Lizenz" diese ein Merkmal (dort einen Produktkey) erhält, das/der die Lizenz zum Unikat macht?

Für einen guten Rat wäre ich sehr dankbar.
BasicOpa

Beitrag wurde zuletzt am 04.03.11 um 11:38:38 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 24.05.11 20:55

Nein, der Key wird von ihnen erzeugt und in der Datenbank eingetragen. Der User bekommt den Key dann von ihnen beim Kauf der Lizenz und muss diesen eingeben, um das Programm starten zu können.
Sie können in der Datenbank mit den Keys ebenfalls definieren, wie oft ein Key benutzt werden darf, da man das Programm ja nach größeren Hardwareänderungen neu aktivieren muss. Diese Zahl wird automatisch heruntergezählt, wenn der Key aktiviert wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: vbarchiv_user
Datum: 20.07.11 11:52

Hallo Herr Wagensommer,

welche Werte wuerden Sie zusaetzlich in den Hash mit aufnehmen, wenn zu erwarten ist, dass Ihre Kunden virtuelle Maschinen benutzen, die eine identische Systemkonfiguration benutzen? Die IP-Adresse waere mein erster Gedanke. Diese koennte aber im Laufe der Zeit wechseln.

MFG
Semlitsch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 20.07.11 14:44

Evtl die Mac-Addresse der Netzwerkkarte und die BIOS-Version. Man könnte zB auch ein VM-Bios erkennen und eine eingeschränkte Lizensierung vorschlagen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 02.09.11 20:11

Guten Tag,

ich bin dabei Ihre Funktionen und Code-Snippets durchzuarbeiten und komme gerade nicht weiter.

Ich bekomme immer den Fehler angezeigt:

Ungültige Konvertierung von der Zeichenfolge 
Warning: mysqli::mysqli(): (HY0 in Typ Integer.
Was kann das sein? Kenne mich mit PHP nicht aus und habe nur die PHP-Datei mit dem Code im Workshop angelegt. Den richtigen Code habe ich angelegt und auch "[Programm]" mit dem meinen ersetzt & in das Datenbank-Tabellen-Feld AppID eingetragen.

Wo habe ich etwas übersehen?

Mfg, pnrooob
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 02.09.11 20:30

Ich nochmal, Sorry..

Kann mir jemand dabei helfen, die Abfragfunktion vor mein Programm zu setzen?

Bei mir zeigt er die normale Userform & die Abfrage-Userform an.

Ich hab momentan folgenden Code in dem Load-Event der Normalen Userform des Programms:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
 
        If Not My.Settings.Aktiviert Then
 
            Generate()
 
        End If
 
        ProduktKeyAbfrage.ShowDialog()
ProduktKeyAbfrage ist die Userform mit folgendem Code:

Public Class ProduktKeyAbfrage
 
    Private Sub ProduktKeyAbfrage_Load(ByVal sender As System.Object, ByVal e _
      As System.EventArgs) Handles MyBase.Load
 
        If Check() Then
            Act = True
            Me.Close()
        End If
 
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
 
        ServerVerbindung.Show()
        Application.DoEvents()
        Try
            Dim S As String = My.Computer.FileSystem.GetTempFileName()
            My.Computer.FileSystem.DeleteFile(S)
            My.Computer.Network.DownloadFile( _
              "http://awesomedart.hostingsociety.com/act/nanticopykeys.php?app" & _
              "AwesomeDart&key=" & Key.Text, S)
            Dim X As String = My.Computer.FileSystem.ReadAllText(S)
            If CInt(X.Split(";")(0)) > 0 Then
                If CInt(X.Split(";")(1)) > 0 Then
                    Generate()
                    Act = True
                    If Check() Then
                        MsgBox("Der Schlüssel ist gültig. AwesomeDart wurde" & _
                          "aktiviert. " & vbCrLf & vbCrLf & _
                          "Sie dürfen diesen Schlüssel noch " & _
                          (CInt(X.Split(";")(1)) - 1) & _
                          " Mal für eine Neuinstallation auf diesem PC" & _
                          "verwenden.")
                    Else
                        MsgBox("Der Schlüssel ist gültig. AwesomeDart konnte" & _
                          "allerdings " & _
                          "nicht aktiviert werden. " & _
                          "Bitte überprüfen Sie, ob Ihr Installationsordner" & _
                          "schreibgeschützt ist.", _
                          MsgBoxStyle.Exclamation)
                    End If
                Else
                    MsgBox("Der Schlüssel ist gültig, aber die maximale Anzahl" & _
                      "der " & _
                      "Aktivierungen für diesen " & _
                      "Schlüssel wurde überschritten." & vbCrLf & vbCrLf & _
                      "Bitte wenden Sie sich an den Entwickler von" & _
                      "AwesomeDart.", MsgBoxStyle.Exclamation)
                End If
            Else
                MsgBox("Der Lizenzschlüssel ist ungültig. Bitte überprüfen Sie" & _
                  "ihn auf " & _
                  "Tippfehler, oder wenden " & _
                  "Sie sich an den Entwickler von AwesomeDart.", _
                  MsgBoxStyle.Critical)
                ServerVerbindung.Hide()
                Exit Sub
            End If
        Catch ex As Exception
            MsgBox("AwesomeDart konnte aufgrund eines Fehlers nicht aktiviert" & _
              "werden. " & _
              "Bitte überprüfen Sie ihre Internetverbindung.", _
              MsgBoxStyle.Critical)
            ServerVerbindung.Hide()
            Exit Sub
        End Try
        ServerVerbindung.Hide()
        Me.Close()
 
    End Sub
 
End Class
Den restlichen Code habe ich in ein Modul gelegt. Wie mache ich es nun, dass mein Programm garnicht erst angezeigt wird, bevor der Key noch nicht eingegeben & überprüft wurde?

Mfg, pnrooob
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 02.09.11 23:44

Es gibt zwei Möglichkeiten:

1) Mit Form1.Hide das Fenster einfach wieder ausblenden

2) Mit Sub Main() starten:

Public Sub Main()
  If Not My.Settings.Aktiviert Then
    Generate()
  End If
  ProduktKeyAbfrage.ShowDialog()
  Form1.ShowDialog()
End Sub
Zu der Frage mit der Fehlermeldung: so wie es aussieht kommt der PHP-Code direkt im Programm an. Eigentlich sollte er auf dem Server ausgeführt werden und schickt dann die entsprechenden Aktivierungsdaten zurück. So wie das aussieht ist der verwendete Server einfach nicht für PHP konfiguriert. Das muss aber der Anbieter klären.
Da "Warning: MysqlI..." angezeigt wird kann es auch sein, dass die MySQLi-Erweiterung nicht verfügbar ist.

Beitrag wurde zuletzt am 02.09.11 um 23:45:43 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 03.09.11 12:03

Also mit Servern an sich kenne ich mich schon aus. PHP 5+ ist drauf. Mysql-Datenbank ist auch eingerichtet. Ich werde mal sehen, woran es liegt. Wahrscheinlich wieder irgend ein Buchstaben klein statt groß geschrieben.

Mit dem .Net Code versuche ich mal deine Möglichkeiten.

Startet die Sub Main() automatisch immer am Anfang? Oder wie setze ich es so ein, dass sie es tut?

Und wo muss ich diesen Check einbauen:

 
If Check() Then
    Act = True
    Me.Close()
End If
Bislang hatte ich es in der Dem Load Ereignis der Form mit der Key-Eingabe, aber dann checkt er ja immer nur, ob die Datei 'nanticop.y' vorhanden ist. Und wenn ja, dann blendet er die Key-Eingabe garnicht erst ein und wenn nein, dann erstellt er die Datei und blendet die Form nur ne halbe Sekunde oder so ein.

Danke & bis dahin ;)

Beitrag wurde zuletzt am 03.09.11 um 12:17:17 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 03.09.11 12:50

Hallo nochmal,

an Alle, die evtl irgendwann mal den/ die selben Fehler haben, hier nochmal die Gründe für die Fehler:

Bei dem SQL-Fehler habe ich falsche Datenbank-Daten in der PHP-Datei eingetragen, passiert mir irgendwie andauernd. ^^

Den Rest der Fehler habe ich über die Sub Main() beheben können.

Vielen dank für dieses tolle Workout und die schnelle und kompetente Hilfe!

########################## Nachtrag ##################################

Wenn ich die Y-Datei einfach mal lösche und dann das Programm starte gibt Die Funktion Check() den Fehler wieder, dass die Datei nicht gefunden wurde. Wenn ich die Datei ändere, d.h. einfach nen paar Zeichen/ Zeilen lösche, dann passiert gar nichts??? Das darf doch eigentlich nicht sein, oder?


Ein weiterer Fehler (bei mir), der auftritt, wenn das Programm bereits aktiviert ist:

    Function Check() As Boolean
        Dim P() As Byte, T As String, C As String, X() As Byte, Z As Integer
        Try
            P = My.Computer.FileSystem.ReadAllBytes(Application.ExecutablePath)
            X = My.Computer.FileSystem.ReadAllBytes(Application.StartupPath & _
              "\nanticop.y")
            Z = 0
        Catch ex As Exception
        End Try
        T = ""
        Try
            For I As Integer = 0 To 127
                T = T & Chr(P(I) Xor X(Z)) ' In dieser Zeile kommt "Der Index" & _
                  "war außerhalb des Arraybereichs."
                Z += 1
                Z += P(I + 128)
            Next
        Catch ex As Exception
        End Try
        C = GetHash()
        Return (C = T)
    End Function
Der Fehler tritt auf wenn I bei 99 ist. Und:
P {Length=62639104} Byte()
X {Length=2586} Byte()
T "bbe3f79c6ü1‹QK€M¿‘}ʇ»bpPô˜™Ð×ԃxEΓâ¹¶óùµxÀF‘f3”GD¸ˆo·aÚ>­°²—‡ G§/´C ]èòZÖĐYRú»N " String
Z 2592 Integer

Wieso bei 99?


Mfg,
pnrooob

Beitrag wurde zuletzt am 03.09.11 um 13:21:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 03.09.11 14:42

Bezieht sich der Fehler auf die geänderte Datei? Wenn ja, dann ist es klar, dass die Entschlüsselung scheitert. Ansonsten kann es auch sein, dass sich durch eine neukompilierung der Dateiheader und somit der Schlüssel geändert hat. Das Problem sollte sich mit einer Neuaktivierung von selbst lösen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 03.09.11 16:11

Auf welche neue Datei?

Ich habe Das Programm aktiviert. 4 Neuinstallationen übrig, Programm startet. Dann habe ich mein Programm beendet, dann die Y-Datei gelöscht und danach wieder neu gestartet. My.Settings.Aktiviert ist auf True (per MsgBox geprüft). Die Aktivierungs-Form wird nicht gezeigt & dann taucht der Fehler auf.

Die Datei "C:\Users\Thilo\Documents\Visual Studio 2010\Projects\Dart" & _
  "Turnier\Dart Turnier\bin\Debug\nanticop.y" konnte nicht gefunden werden.
Wenn ich nach der Aktivierung das Programm beende, dann ein bisschen Code aus der Y-Datei lösche und dann das Programm neustarte kommt der oben beschriebene Fehler mit dem Array-Exeption.

Wenn ich mit vorhandener Y-Date starte funktioniert alles so wie es soll.

Habe ich die Abfragen evtl in der falschen Reihenfolge?

Könnte man die Verschlüsselte Computer-ID nicht in den My.Settings speichern? Somit hätte man nicht das Problem, dass die Y-Datei gelöscht werden könnte. Weil das, was man in der Datei speichert ist ja nur ein String, demnach müsste das mit den Settings ja realisierbar sein, oder irre ich?

Mfg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 03.09.11 19:27

Die ID kann man überall hinspeichern. Ich verstehe jetzt auch was das Problem ist:

Anfang:
My.Settings.Aktiviert: 0
nanticop.y: nicht da

Nach Aktivierung:
My.Settings.Aktiviert: 1
nanticop.y: da

Nach Löschen:
My.Settings.Aktiviert: 1
nanticop.y: nicht da

--> Da My.Settings anzeigt die Datei wäre noch da kommt der Fehler.

Das die Aktivierung bei geänderter Datei nicht funktioniert ist kein Bug sondern ein Feature ;) sonst könnte man ja einfach die Daten ändern.

Das mit direkt in My.Settings speichern sollte problemlos gehen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: pnrooob
Datum: 04.09.11 12:04

Danke für den Tipp^^

Habe jetzt ein wenig gebastelt, sodass sobald die Datei gelöscht wird oder beschädigt ist, die Settings auf "False" gesetzt werden. Nun funktioniert alles ganz wunderbar. Natürlich hab ich am Code ein wenig verändert, aber das war eben nicht anders machbar, da mit "Option Strict" einige Warnungen angezeigt wurden.

Ich danke dir für den Support!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 00:20

Hallo zusammen.
Mit Begeisterung bin ich auf diesen Kopierschutz gestossen. Bin ziemlicher VB-Newbie, komme eigentlich aus der PHP-Ecke (und etwas VBA).
Ich habe den Code jetzt in meine VB-Anwendung eingebaut. Leider funktioniert die Aktivierung nicht.
Das funktioniert:
- Lizenzschlüssel falsch
- Lizenzschlüssel richtig- aber Anzahl der Lizenzen abgelaufen.

Wenn jedoch der Lizenzschlüssel korrekt ist, und auch noch Lizenzen frei sind, wird die Lizenzdatei aber nicht erstellt, das Programm endet mit der Fehlermeldung:
"Programm konnte aufgrund eines Fehlers nicht aktiviert werden. Bitte überprüfen Sie ihre Internetverbindung."
Ich komme leider nicht auf den Fehler. Kann mir jemand sagen, was mein Fehler ist?

Den Code habe ich relativ unverändert übernommen, lediglich die Datenbankeinträge vorgenommen. Die Verbindung zur DB funktioniert auch, da die Schlüssel ja geprüft werden.

Zur Info:
Visual Studio 2010
Windows 7 Home Premium


Vielen Dank für eure Hilfe.
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 31.01.12 07:11

Wohin speicherst du die Aktivierungsdatei? Der Programmordner ist ab Vista schreibgeschützt und gibt daher einen Fehler aus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 09:21

Hi,

erstmal vielen Dank für die schnelle Antwort.

Ich wollte die Aktivierungsdatei tatsächlich im Programmordner speichern. Welchen Ort sollte ich denn nehmen, damit es funktioniert? Der Temp-Ordner ist wahrscheinlich nicht gut, da die Datei dort schnell mal gelöscht werden könnte.

Grüße
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 09:32

Habs jetzt mal mit dem User-Anwendungstadenordner versucht:
My.Computer.FileSystem.WriteAllBytes(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\nanticop.y", X, False)

Leider selber Fehler. Datei wird nicht erstellt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 12:15

Also egal welchen Pfad ich wähle (habe sogar ein externes Laufwerk gewählt), der Fehler kommt immer wieder.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 31.01.12 12:31

Wo genau tritt der Fehler auf? Entferne mal das Try/Catch und schau dann, was schief läuft.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 13:11

Wenn ich das Try/Catch rausnehme bleibt er hier hängen:

Screenshot: http://www.klingl-ton.de/Fehler.JPG

I = 120

Beitrag wurde zuletzt am 31.01.12 um 13:12:28 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 13:14

Wenn ich das Try/Catch rausnehme bleibt er hier hängen:

http://www.klingl-ton.de/Fehler.JPG

Er zeigt an dass I = 120 ist.

Grüße
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 13:40

So, hab den Fehler gefunden. Ich hatte einen Schlüssel für den Hashwert rausgenommen, da er in der Windows7-Registry nicht mehr existiert. Beim Generate habe ich aber die For-Schleife nicht angepasst. Nun statt der 127 die 119 eingesetzt, und schon gehts.
ABER: Die Y-Datei wird nun erstellt, danach kommt aber die Meldung:
"Der Schlüssel ist gültig. [Programm] konnte allerdings nicht aktiviert werden. Bitte überprüfen Sie, ob der Ordner schreibgeschützt ist."

Was ist das denn nun schon wieder?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 31.01.12 13:50

Wenn du da die Schlüssellänge änderst, solltest du sie auch beim entschlüsseln ändern... Oder einfach genug Leerzeichen an den Hash hängen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 13:52

OH MANN!!! KLAR!!
Hirn einschalten, und schon klappts!

Danke für die Hilfe! Funktioniert jetzt wunderbar!

Grüße
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 22:18

Hallo!

Jetzt habe ich noch eine Frage.
Ist es irgendwie machbar, alternativ zur Online-Aktivierung eine "Aktivierung per Telefon" einzubauen (z.B. weil der Kunde keine Internetverbindung hat)? Also irgendwie über nen Aktivierungscode o.ä.?

Grüße
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 31.01.12 22:40

ich habe eine entsprechende Funktion in einer kommerziellen Version eingebaut, da diese aber aus einem quasi komplett neu geschrieben wurde werde ich sie hier nicht verbreiten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 31.01.12 23:05

Schade, aber ok.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: Glubschi43
Datum: 01.04.12 23:28

Hallo Leute

Ich brauche Hilfe bei dem Einrichten dieses Webservers usw. Ich bekomme das nich hin. hat jemand mal vllt ne anleitung oder kann mir das jemand erklären?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 01.04.12 23:39

Wo hängts denn? Der Code muss nur kopiert werden, Voraussetzung ist ein Apache mit MySQL , für andere Server muss der Code angepasst werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: Glubschi43
Datum: 02.04.12 11:11

es hängt bei dem ganzen server zeug

ich weiss nich genau welchen webserver+datenbank ich nehmen soll
dann weiss ich nich wie ich dass einrichten kann
und ich weiss nich wie das mit dem code geht

ich weiss alles nich

glubschi43
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 03.05.12 23:08

Hallo zusammen.
Mal ne Frage: Wie könnte man ein "Toleranzsystem" einbauen, dass z.B. max. 2 Komponenten geändert werden dürfen?
Wie müsste das aussehen?

Danke und Grüße
Dieter

Beitrag wurde zuletzt am 03.05.12 um 23:09:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 03.05.12 23:22

Man könnte zum Beispiel die Hashwerte der einzelnen Komponenten zusätzlich zum Gesamtwert speichern. Wenn sich dann der große Wert ändert, kann man prüfen, wie viele Komponenten geändert wurde. Wenn es keine sind weiß man, dass einer der Hashes manipuliert wurde, sind es mehr als zwei wird die Aktivierung verweigert. Bei weniger als zwei Änderungen wird nur der große Hash aktualisiert, so dass der Nutzer alte Komponenten wieder einbauen kann.
Gruß,
Niel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: derdieter
Datum: 03.05.12 23:34

Das heißt, ich speichere die einzelnen Hashwerte auch in der y-datei. Wie kann ich die einzelnen Werte dann wieder auslesen zum vergleichen? (Ich muß gestehen, dass ich nicht sehr fit in vb bin)

Gruß
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 03.05.12 23:39

Die einzelnen Werte können auch ganz einfach unverschlüsselt in einer Textdatei abgelegt werden, man merkt ja am Gesamthash, wenn der Nutzer etwas verändert hat.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: Tausch
Datum: 09.05.12 13:32

Hallo der Code ist super, allerdings habe ich das Problem wenn ich das in einer virtuellen Maschiene ausprobiere, da bekomme ich immer folgenden Fehler beim erstellen der Datei.
IndexOutOfRangeException wurde nicht behandelt...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button1.Click
        Dim P() As Byte, C As String, X() As Byte, Z As Integer
        P = My.Computer.FileSystem.ReadAllBytes(Application.ExecutablePath)
        ReDim X(KeyLen() \ 8)
        C = GetHash()
        Z = 0
        For I As Integer = 0 To 127
            X(Z) = P(I) Xor Asc(C(I))
            Z += 1
            Randomize()
            For J As Integer = Z To Z + P(I + 128)
                X(J) = CInt(Rnd() * 254)    <-- HIER KOMMT DER FEHLER
            Next
            Z += P(I + 128)
        Next
        If System.IO.Directory.Exists("C:\NCLU") = False Then
            System.IO.Directory.CreateDirectory("C:\NCLU")
        End If
        My.Computer.FileSystem.WriteAllBytes("c:\NCLU\key.lic", X, False)
    End Sub
Ich hoffe ihr könnt mir weiterhelfen

Beitrag wurde zuletzt am 09.05.12 um 13:34:22 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 09.05.12 13:40

Hast du die Hashfunktion verändert? Dann muss auch die Schlüssellänge angepasst werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: Tausch
Datum: 09.05.12 13:45

so sieht es momentan aus.

Function Hex(ByVal I As Integer) As String
        Dim S As String
        S = Conversion.Hex(I)
        While S.Length < 8
            S &= "0"
        End While
        Return S
    End Function
    Function GetHash() As String
        Dim H As String = ""
        H &= Hex(My.Computer.Info.InstalledUICulture.GetHashCode)
        H &= Hex(My.Computer.FileSystem.GetDriveInfo(Environ( _
          "SYSTEMDRIVE")).TotalSize.GetHashCode)
        H &= Hex(My.Computer.Info.OSFullName.GetHashCode)
        H &= Hex(My.Computer.Info.OSPlatform.GetHashCode)
        H &= Hex(My.Computer.Info.OSVersion.GetHashCode)
        H &= Hex(My.Computer.Info.TotalPhysicalMemory.GetHashCode)
        H &= Hex(My.Computer.Mouse.WheelExists.GetHashCode)
        H &= Hex(My.User.Name.GetHashCode)
        H &= Hex(My.User.IsAuthenticated.GetHashCode)
        H &= Hex(My.User.CurrentPrincipal.Identity.Name.GetHashCode)
        H &= Hex(Environ("PROCESSOR_ARCHITECTURE").GetHashCode)
        H &= Hex(Environ("SYSTEMROOT").GetHashCode)
        H &= Hex(Environ("NUMBER_OF_PROCESSORS").GetHashCode)
        H &= Hex(My.Computer.Registry.LocalMachine.OpenSubKey( _
          "HARDWARE\DESCRIPTION\System\CentralProcessor\0\").GetValue( _
          "~MHZ").GetHashCode)
        'H &= Hex(My.Computer.Registry.LocalMachine.OpenSubKey( _
        ' "HARDWARE\DESCRIPTION\System\BIOS\").GetValue( 
        ' "SystemManufacturer").GetHashCode)
        H &= Hex(H.GetHashCode)
        Return (LCase(H))
    End Function
 
Function KeyLen() As Integer
        Dim P() As Byte, Z As Integer
        P = My.Computer.FileSystem.ReadAllBytes(Application.ExecutablePath)
        Z = 0
        For I As Integer = 0 To 127
            Z += 1
            Z += P(I + 128)
        Next
        Return (Z * 8)
    End Function
 
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles Button1.Click
        Dim P() As Byte, C As String, X() As Byte, Z As Integer
        P = My.Computer.FileSystem.ReadAllBytes(Application.ExecutablePath)
        ReDim X(KeyLen() \ 8)
        C = GetHash()
        Z = 0
        For I As Integer = 0 To 127
            X(Z) = P(I) Xor Asc(C(I))  <-- FEHLER KOMMT JETZT HIER
            Z += 1
            Randomize()
            For J As Integer = Z To Z + P(I + 128)
                X(J) = CInt(Rnd() * 254)
            Next
            Z += P(I + 128)
        Next
        If System.IO.Directory.Exists("C:\NCLU") = False Then
            System.IO.Directory.CreateDirectory("C:\NCLU")
        End If
        My.Computer.FileSystem.WriteAllBytes("c:\NCLU\key.lic", X, False)
    End Sub

habe den Fehler behoben, naja man kennt das sprichwort ja mit user und bildschirm. trotzdem vielen dank


Beitrag wurde zuletzt am 09.05.12 um 14:01:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: calypso
Datum: 01.06.12 12:30

Hi,
könnte eventuell jemand so nett sein und die Projektdatein für VB 2010 hoch zu laden?

Vielen Dank

MfG calypso
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 01.06.12 20:52

Der Workshop wurde aus verschiedenen Projekten zusammengestellt, daher gibt es keine einheitliche Projektdatei. Für eine speziell auf Sie angepasste Version benötigen, können sie mich per Mail kontaktieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: calypso
Datum: 02.06.12 18:30

Also,
ich habe mithilfe eines Tutorials einen miniproxy (inkl. minibrowser) erstellt.
Die Website die mit dem MiniProxy und dem Minibrowser besucht wird, soll halt nur mit der IP des Proxys erreichbar sein (das ist alls schon fertig und funktionstüchtig, php / html behersch ich im schlaf soweit)

Nun möchte ich aber, dass dieses miniproxy-browser-programm nur auf bestimmten rechnern genutzt werden darf, sprich der key soll halt an die bestimmte computer ID (so wie in dem workshop halt) gebunden sein.
Daher benötige ich halt nur eine beispiel projekt datei wie sie im Workshop ist.
Da ich in VB eher Neuling bin, weiß ich nicht ganz welchen code ich an welche form bzw. button etc. hängen muss damit es entsprechend richtig funktioniert.

MfG calypso
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: calypso
Datum: 13.08.12 17:14

Hallo, also es funktioniert jetzt soweit alles, allerdings habe ich das problem das die PHP Brücke offensichtlich nicht ganz funktioniert.

PHP:
<?php
  $h='localhost';
  $u='MEINDBUSER';
  $p='MEINDBPASSWORT';
  $db=MEINEDATENBANK mysqli($h, $u, $p, 'nanticopy');
  $c=0;
  $cnt=0;
  $enable=0;
  $app=$_GET['app'];
  $key=$_GET['key'];
  $q=$db->query("SELECT * FROM `Keys` WHERE `AppID` = '" . $app . "' AND" & _
    "`Key` = '" . $key . "'");
  while($x=$q->fetch_assoc()) {
    $c++;
    $cnt=$x['Activated'];
  }
  if ($c>0) 	$enable=1;
  if ($enable==1) echo '1;';
  else echo '0;';
  if ($cnt>0) {
    $q=$db->query("UPDATE `Keys` SET `Activated`=`Activated`-1 WHERE `AppID`" & _
      "LIKE '".
    $app."' AND `Key` LIKE '" . $key . "'");
  }
  echo $cnt;
  $db->close();
?>
Datenbank:
CREATE TABLE IF NOT EXISTS `Keys` (
  `key` varchar(29) NOT NULL,
  `AppID` int(3) NOT NULL DEFAULT '0',
  `Activated` int(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
-- Daten für Tabelle `Keys`
 
INSERT INTO `Keys` (`key`, `AppID`, `Activated`) VALUES
('1111122222333334444455555', 10, 1),
Bekomme vom programm leider immer nur die definierte meldung:
[Programm] konnte nicht aktiviert werden. Bitte überprüfen Sie ihre Internetverbindung.

der Part aus dem Aktivierungsfenster:
... ...
... ...
    Private Sub Keyabfrage_Load(sender As System.Object, e As System.EventArgs) _
      Handles MyBase.Load
        If Check() Then
            IsActivated = True
            Me.Close()
        End If
    End Sub
 
    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, _
      ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles _
      LinkLabel1.LinkClicked
        Label5.Show()
        Application.DoEvents()
        Try
            Dim S As String = My.Computer.FileSystem.GetTempFileName()
            My.Computer.FileSystem.DeleteFile(S)
            My.Computer.Network.DownloadFile( _
              "http://MEINEDOMAIN.TDL/nantest/nanticopykeys.php?app=[10]&key=" _
              & "M.Text", S)
            Dim X As String = My.Computer.FileSystem.ReadAllText(S)
            If CInt(X.Split(";"c)(0)) > 0 Then
                If CInt(X.Split(";"c)(1)) > 0 Then
                    Generate()
                    IsActivated = True
                    Hauptfenster.Show()
                    Me.Close()
                    If Check() Then
                        MsgBox("Der Schlüssel ist gültig. [Programm] wurde" & _
                          "aktiviert. " & _
                          "Sie dürfen diesen Schlüssel noch " & _
                          (CInt(X.Split(";"c)(1)) - 1) & _
                          " Mal für eine Neuinstallation auf diesem PC" & _
                          "verwenden.")
                    Else
                        MsgBox("Der Schlüssel ist gültig. [Programm] konnte" & _
                          "allerdings " & _
                          "nicht aktiviert werden. " & _
                          "Bitte überprüfen Sie, ob der Ordner schreibgeschützt" & _
                          "ist.", _
                          MsgBoxStyle.Exclamation)
                    End If
                Else
                    MsgBox("Der Schlüssel ist gültig, aber die maximale Anzahl" & _
                      "der " & _
                      "Aktivierungen für diesen " & _
                      "Schlüssel wurde überschritten.", MsgBoxStyle.Exclamation)
                End If
            Else
                MsgBox("Der Lizenzschlüssel ist ungültig. Bitte überprüfen Sie" & _
                  "ihn auf " & _
                  "Tippfehler oder wenden " & _
                  "Sie sich an Ihren Software-Händler.", MsgBoxStyle.Critical)
                Label5.Hide()
                Exit Sub
            End If
        Catch ex As Exception
            MsgBox("[Programm] konnte aufgrund eines Fehlers nicht aktiviert" & _
              "werden. " & _
              "Bitte überprüfen Sie ihre Internetverbindung.", _
              MsgBoxStyle.Critical)
            Label5.Hide()
            Exit Sub
        End Try
        Label5.Hide()
        Me.Close()
    End Sub
 
    Private Sub M_MaskInputRejected(sender As System.Object, e As _
      System.Windows.Forms.MaskInputRejectedEventArgs) Handles _
      M.MaskInputRejected
 
    End Sub
 
    Private Sub M_TextChanged(sender As Object, e As System.EventArgs) Handles _
      M.TextChanged
 
    End Sub
End Class
MfG calypso
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: NiWa
Datum: 13.08.12 18:42

Ist MySQLi auf dem Server installiert? Wenn du die PHP-Datei im Browser öffnest, werden die Fehlermeldungen angezeigt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: calypso
Datum: 14.08.12 06:28

Hi,

MySQLi ist selbstverständlich auf dem Server installiert.
(msyqli ist meines wissens auch seit PHP5 komplett integriert)
Im Browserfenster gibt es keinen Fehler wenn ich die PHP öffne.

MfG

Beitrag wurde zuletzt am 14.08.12 um 06:33:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Kopierschutz mit Online-Aktivierung 
Autor: calypso
Datum: 17.08.12 08:15

Keiner ne idee oder eventuell das selbe problem schon gehabt und gelöst?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel