| |
| 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! | Fragen zu Tipps & Tricks und Workshops im vb@rchivWorkshop 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 | |
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 | |
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. | |
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. | |
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. | |
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. ;) | |
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. | |
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. | |
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. | |
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 | |
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. | |
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 | |
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 | |
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. | |
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. | |
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. | |
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. | |
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 | |
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. | |
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! | |
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 | |
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. | |
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 | |
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. | |
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. | |
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. | |
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. | |
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 | |
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? | |
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. | |
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 | |
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 | |
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. | |
Re: Einfacher Kopierschutz mit Online-Aktivierung | | | Autor: derdieter | Datum: 31.01.12 23:05 |
| Schade, aber ok. | |
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? | |
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. | |
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 | |
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. | |
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 | |
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 | |
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. | |
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. | |
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. | |
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. | |
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 | |
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. | |
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 | |
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 | |
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. | |
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. | |
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? | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|