vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

http://www.vbarchiv.net
Rubrik: .NET   |   VB-Versionen: VB.NET04.10.10
Einfacher Kopierschutz mit Online-Aktivierung

Es gibt schon einen Workshop fr VB Classic. Dieser Workshop ist jedoch etwas anders orientiert. In diesem Workshop wird gezeigt, wie sich ein eineracher kompakter Kopierschutz mit Online-Aktivierung realisieren lsst.

Autor:  Niel WagensommerBewertung:  Views:  33.157 

Inhalt

  1. Vorwort
  2. Vorbereitungen
  3. Funktionsweise
  4. Computer-ID ermitteln
  5. ID verschlsselt speichern
  6. Erstellen der Product Keys
  7. Web-Backend
  8. Zusammenfhrung der Teile
  9. Beispiel
  10. Wie geht es jetzt weiter?
  11. Nachwort
  12. FAQ

Vorwort

Viele kleine Programme stellen nur gegen eine kleine "Spende" den gesamten Funktionsumfang zur Verfgung. Fr diese Programme wird ein kompakter Kopierschutz bentigt, der nur die einfachsten Dinge beinhaltet:

  • Verchlsselte Computer-ID (lokal)
  • Aktivierungscode
  • Web-Backend fr Aktivierungsbesttigung
In diesem Workshop werden Sie einen solchen Kopierschutz kennenlernen

So weit es geht wird natrlich Visual Basic 2010 verwendet, alternativ geht auch jedes andere VB, dass mit .Net luft. Im Web-Backend greife ich auf PHP zurck, aber der Code ist so kurz, dass er sich sehr schnell nach ASP etc. portieren lsst.

Sollten Sie jetzt noch Fragen oder andere Bedenken haben, scrollen Sie nach unten zu den FAQ.

Ich mchte Sie bitten, den Text grndlich zu lesen, da viele Features und Sicherheitslcken durch Copy & Paste unbeachtet bleiben und der Kopierschutz sehr flexibel gestaltet wurde und einige Anpassungen an das Einsatzgebiet erfordert. Auerdem sollte dieser Workshop nicht mit dem bereits bestehenden Workshop fr einen Kopierschutz verwechselt werden, da sich dieser auf klasisches Visual Basic und einen rein Clientseitigen Schutz sowie andere Anstze wie Produkt-IDs verfolgt, whrend hier das Programm direkt beim Verschlsseln identifiziert wird.

Vorbereitungen

Auf ihrem lokalen PC sollte eine Visual Basic .Net-IDE oder zumindest ein passender Compiler installiert sein. Fr das Web-Backend knnen Sie - falls Sie wie hier gezeigt PHP verwenden - mit dem Windows-Editor auskommen, Notepad++ oder Alternativen sind natrlich komfortabler. Um das Backend testen zu knnen, empfiehlt es sich, einen PHP- und MySQL-fhigen Webserver zu installieren, z.B. WAMPP. Sollten Sie statt PHP und MySQL auf ASP setzen gengt eine VB- oder C#-IDE und der MS SQL Server.

Funktionsweise

Der Kopierschutz wird im Wesentlichen wie folgt funktionieren: Beim ersten Start:

  1. Key eingeben
  2. Beim Server anfragen, ob der Key existiert und noch nicht ausgeschpft ist
  3. Auf dem Server in der Key-Datenbank dem Key eine Lizenz abziehen
  4. Datei mit der ID des Computers anlegen, um Echtheit zu besttigen
Dieser Verlauf kommt allerdings nur bei einem gltigen Key zustande. Wurde das Programm schon aktiviert, so passiert folgendes:
  1. Prfen ob ID-Datei existiert
  2. ID-Datei auslesen
  3. ID mit der ID des Computers vergleichen
Sollte etwas nicht stimmen, wird die Aktivierung erneut durchlaufen.

Computer-ID ermitteln

Der Sinn eines Kopierschutzes ist im Wesentlichen in diesen beiden Punkten enthalten:

  • Prfung und Erstellung eines Product-Keys
  • Bindung eines Programms an einen PC
Der erste Punkt drfte klar sein, man muss ja irgendwie herausfinden, ob der Benutzer das Programm auch wirklich bezahlt hat. Der zweite Punkt ist ebenfalls wichtig, denn wenn man das aktivierte Programm nicht an den PC, an dem es aktiviert wurde bindet kann man es einmal aktivieren und dann fertig aktiviert im Internet verbreiten.

Um das Programm an einen Computer zu binden, erzeugt man eine Computer-ID und speichert diese Verschlsselt ab. In diesem Kapitel zeige ich, wie man die ID erzeugt. Damit die IDs eine einheitliche Lnge haben, speichert man sie am besten als Hash-Werte, bekannt sind die Verfahren MD5 und SHA1, ich verwende hier der einfachheit halber die Standartfunktion von .Net, Object.GetHashCode(). Doch vorher ncoh eine kleine Hilfsfunktion, die Hashwerte in Hexadezimalzahlen umwandelt und auf eine einheitliche Lnge bringt, damit Visual Basic keine Nullen abschneidet und den Hash somit (zer)strt:

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

Die Funktion, die den Hash erzeugt, muss nicht wie die hier gezeigt aussehen, es macht es Hackern schwerer, wenn jedes Programm andere Haswerte erzeugt. Auerdem muss man immer abwgen, ob das Programm beispielsweise auf einem multilingualen System verwendet wird, was die Prfung von InstalledUICulture, die hier durchgefhrt wird natrlich sinnlos und Fehleranfllig macht.

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

Diese Funktion prft die Systemsprache, das Systemlaufwerk, die Betriebssystemversion, den Speicher, das Mausrdchen, den Benutzer, den Prozessor sowie das BIOS. Zur zustzlichen Sicherheit wird auch von der ID selbst ein Hash erzeugt und angehngt, um Manipulationen aufzuspren. Sie sollten diese Funktion wie schon gesagt je nach verwendungszweck einschrnken, da sich insbesondere der Arbeitspeicher ndern kann. Eine andere Mglichkeit wre, ein Toleranzsystem wie bei Windows einzufhren, dazu spter mehr. Mein PC bekommt beispielsweise bei einer leicht modifizierten Funktion die ID bbe3f9c759b801ffff8b9f09cdb89ab64b8683bbf5b000019b723ae519b723ae58781314 c10dbdc0cdcab78e746d36f76fe2aba7c200000000000000000000, die nicht so schnell auf einem anderen Computer zu finden sein wird.

ID verschlsselt speichern

Nachdem Sie die ID erzeugt haben mssen Sie diese natrlich auch speichern, um herauszufinden, ob das Programm kopiert wurde. Dies muss verschlsselt geschehen, damit die Datei nicht bearbeitet werden kann. Ich habe einen einfache Algorithmus entwickelt, der als Schlssel einen Teil des Programms benutzt. Das hat den Vorteil, das ID-Dateien des einen Programms nicht einfach einem anderen Untergeschoben werden knnen.

Sub Generate()
  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)
    Next
    Z += P(I + 128)
  Next 
  My.Computer.FileSystem.WriteAllBytes(Application.StartupPath & "\nanticop.y", X, False)
End Sub

Ich habe dieses Verfahren nBlow getauft, da die Daten aufgeblasen werden. Der Dateiname kommt von dem Namen eines Kopierschutzes, der auf dieser Technik basiert, nAntiCopy. Bei der Verschlsselung passiert folgendes:

  1. Das erste Byte der ID mit dem ersten Byte des Programms verknpfen (XOR)
  2. Mit (zweites Byte) Bytes auffllen
  3. Wiedeholen, bis keine Bytes mehr zu verschlsseln sind
Um die Sicherheit zu erhhen sollte man auerdem ein Offset definieren, damit in jedem Programm eine andere Bytefolge als Schlssel benutzt wird. Es kann nhmlich vorkommen, dass zwei Programme den gleichen Dateiheader haben und die ID krzer ist als der Dateiheader. Diese Programme wrden dann den selben Code verwenden und die ganze Verschlsselung wre sinnlos. Um wieder ein Beispiel zu zeigen, nach der Verschlsselung sieht meine Computer-ID so aus:
/}xX5LoEz --([isD)&
oYdnTmleM
""|8JFNX9#
֨h. v6,OSEc-3OD־!h+(!AS3e<D@R)-v?7-5v=
\;jQ*.z|xqK}f1;YjFB{6/6X:7v9"c3wܡ41\$
yoSW/3_
Nce-E cXZ-]WسH7bsϿ4q"{-ai5|CSȩYxVdq
w(9rFNqrktj}>"(9
.RS.F"b<D@R)-v?7-5v=\;jQ*.z|xqK}f1;YjFB{6/
6X:1fff8bwܡ41\$
yoSW/3_
Nce-E cXZ-]WسH7bsϿ4q"{-ai -!PF.NיdI#{
/]b\j[|\0$ j3Q
-!zPUl3j%
d
ԱzDC1LyL8۴=b@<TwSz܏9f0ypDH~,djcdy0b89
wܡ41\$
yoSW/3_
Nce-E cXZ-]WسH7bsϿ4q"{-ai -!PF.NיdI#{
/]b\j[|\0$ j3Q
-!zPUl3j%
d
ԱzDC1Lab64I,RӂܽA3{2b8683bbl|쭈Ȑ‡R4iH
]e-Q#8!Vw072DL"
9^Z+ TUX%.lQ߼ nťr\
@Y9<l‹9<ݪǀIxl!7}l@0
p
2÷'K"-`>$2x:fj `Ph1m@IO*")QaEw*X^39
71)~w=5o("B[;fSod\^6'CӶ|#a|[1( :4bNpa;
;w;s$'ЋJt3 wP'ӶqW
bFԤ0O
tC
*p5"b00dZf^bvˏضR0010<D@R)-v?7-5v=\;jQ*.z|
xqK}f1;YjFB{6/6X:񟆳zjDiHNw
O]

3=?7wIeJ3l~Ek{u[I5Y8ԽD"lxz."#C`*SdvalT1ς(
gO[3nӄJٱ,;|kN0F0000{pTPTIZ7[g?B-ba*D0j_-]>0:bk
Ez. gj7&Ž909bi59*Fc2bay~k4}
Q72ave5?"l/>09: 3 6~\@1]QDf(Z箲l,BgNFIfCퟌ-
 SN:E q+9HC\9PVF\^

~ZLR>?=>Ui 8s\9j,>./Ӛ& a
'KVR7I_Y%gt;3\"zoPd/%O7`~ʥGUۧL6'd[RY;F$ӫFPƌm* 
=N.gX瀊䞁Z;>fςNm\T/\%)W"56)M"5>^yD 7)YN>>&
BEIygf(s7'M
]X9PEZ{t(!)
(t=v׊Չc \R'O^Gn
F;ko419c58eB

Diesen Code macht so schnell keiner nach. Was jetzt noch fehlt, ist die Verschlsselungsroutine, hier gleich mmit Prfung der Computer-ID:

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))
      Z += 1
      Z += P(I + 128)
    Next 
  Catch ex As Exception
  End Try
  C = GetHash()
  Return (C = T)
End Function

Es sollten keine weiteren Erklrungen ntig sein.

Erstellen der Product Keys

Fr die Product Keys habe ich das selbe Format gewhlt, das Microsoft auch verwendet, also XXXXX-XXXXX-XXXXX-XXXXX-XXXXX. Damit der Benutzer keinen Mll eingibt und um ihn beim Lesen zu untersttzen, ist es sinnvoll, eine MaskedTextBox mit der Maske #####-#####-#####-#####-##### zu verwenden. Die Keys knnen dann mit einer einfachen Funktion generiert werden:

Dim R As New Random(Now.TimeOfDay.Milliseconds)
For I As Integer = 1 To 10
  For J As Integer = 1 To 5
    TextBox1.Text &= Chr(R.Next(Asc("A"), Asc("Z")))
  Next 
  TextBox1.Text &= "-"
  For J As Integer = 1 To 5
    TextBox1.Text &= Chr(R.Next(Asc("A"), Asc("Z")))
  Next 
  TextBox1.Text &= "-"
  For J As Integer = 1 To 5
    TextBox1.Text &= Chr(R.Next(Asc("A"), Asc("Z")))
  Next 
  TextBox1.Text &= "-"
  For J As Integer = 1 To 5
    TextBox1.Text &= Chr(R.Next(Asc("A"), Asc("Z")))
  Next 
  TextBox1.Text &= "-"
  For J As Integer = 1 To 5
    TextBox1.Text &= Chr(R.Next(Asc("A"), Asc("Z")))
  Next 
  TextBox1.Text &= vbCrLf
Next

Ich denke, es gibt nichts weiteres dazu zu sagen, es werden simple Grobuchstaben verwendet.

Web-Backend

Damit der Schutz nicht einfach ausgehebelt werden kann mssen Teile davon auf eine fr den Benutzer nicht erreichbaren Ort ausgelagert werden, hier bieten sich Webserver an, da sie

  • Sicheren Zugriffsschutz bieten
  • Einfach wartbar sind
  • fr den Programmierer immer erreichbar sind
Die letzten beiden Punkte sind sehr wichtig, da man bei einem Bug in der Aktivierungsroutine nicht mehreren Tausend oder sogar Millionen Nutzern Updates schicken muss sondern lediglich ein Programm an einem zentralen Ort austauschen. Sollten neue Lizensen gekauft werden ist ein Webserver auch von Vorteil, da die neuen Keys in eine Datenbank eingefgt werden knnen. Webserver haben allerdings auch Nachteile:
  • Bei vielen Benutzern kann der Server berlastet werden
  • Serveraddressen knnen sich ndern
  • Server knnen abstrzen oder aus anderen Grnden stunden- oder Tagelang nicht erreichbar sein
  • Wenn der Hersteller Pleite geht oder den Serverpark schliet werden alle ausgelieferten Programme auf einen Schlag wertlos
Im Normalfall sollte das allerdings nicht vorkommen, auerdem kann man bei einer Beendigung des Supports einen Patch herausgeben, der die Aktivierungsroutine aus dem Programm entfernt.

Nach diesem theoretischen Teil geht es jetzt an das wichtigste, die Programmierung. Visual Basic ist fr eine efiiziente Seerverprogrammierung nur eingeschrnkt nutzbar, deshalb verwende ich hier PHP und MySQL, was auch bei Freehostern fast immer gegeben ist. Die Struktur der Datenbank sollte aus dem Code hervorgehen. Ich habe die Datei schlicht nAntiCopyKeys.php genannt.

<?php
  $h='';
  $u='nw-os_nanticopy';
  $p='nwosuser';
  $db=new 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();
?>

Die Datenbank wurde nanticopy genannt, die Tabelle Keys enthlt die Spalten:
NameBeschreibung
KeyDer Aktivierungsschlssel
ActivatedDie Zahl der verbleibenden Aktivierungen
AppIDDie ID des Programms, fr das der Key gilt

Wie Sie sehen knnen, ist die Datenbank flexibel gestaltet und kann in einer Tabelle Keys fr mehrere Programme gleichzeitig aufnehmen. Um BruteForce-Angriffe zu vermeiden, wird bei der Abfrage des Schlssels automatisch angenommen, dass das Programm aktiviert werden soll und die Zahl der verbleibenden Aktivierungen heruntergesetzt. Wrde man blind diverse Schlssel durchprobieren, bringt einem der Fund nichts, da der Schlssel durch die Prfung schon ungltig wird. Die Rckgabe ist bei Erfolg 1;AnzahlDerAktivierungen und ansonsten 0;0 falls die Anzahl der Lizensen bzw. Aktivierungen berschritten wurde oder nichts oder 0, falls ein Fehler aufgetreten ist.

Zusammenfhrung der Teile

Jetzt haben Sie sowohl den Client- als auch den Serverteil gesehen, also wird es Zeit, beides zusammenzufhren. Hier ist also die Funktion, in der alles passiert:

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://domain.de/nanticopykeys.php?app=[Programm]&key=" & M.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()
        Activated = True
        If Check() Then
          MsgBox("Der Schlssel ist gltig. [Programm] wurde aktiviert. " & _
            "Sie drfen diesen Schlssel noch " & _
            (CInt(X.Split(";")(1)) - 1) & _
            " Mal fr eine Neuinstallation auf diesem PC verwenden.")
        Else
          MsgBox("Der Schlssel ist gltig. [Programm] konnte allerdings " & _
            "nicht aktiviert werden. " & _
            "Bitte berprfen Sie, ob der Ordner schreibgeschtzt ist.", _
            MsgBoxStyle.Exclamation)
        End If
      Else
        MsgBox("Der Schlssel ist gltig, aber die maximale Anzahl der " & _
          "Aktivierungen fr diesen " & _
          "Schlssel wurde berschritten.", MsgBoxStyle.Exclamation)
      End If
    Else
      MsgBox("Der Lizenzschlssel ist ungltig. Bitte berprfen Sie ihn auf " & _
        "Tippfehler und wenden " & _
        "Sie sich an Ihren Software-Hndler.", MsgBoxStyle.Critical)
      Label5.Hide()
      Exit Sub
    End If
  Catch ex As Exception
    MsgBox("[Programm] konnte aufgrund eines Fehlers nicht aktiviert werden. " & _
      "Bitte berprfen Sie ihre Internetverbindung.", MsgBoxStyle.Critical)
    Label5.Hide()
    Exit Sub
  End Try
  Label5.Hide()
  Me.Close()
End Sub

Label ist ein simples Label, in dem steht "Verbinde mit dem Server...", LinkLabel1 hat die Beschriftung "Aktivieren".

Ich habe das ganze in ein Form gepackt, das einfach beim Programmstart modal angezeigt wird und sich bei einem gltigen Code sofort wieder schliet, dadurch kann man auch nicht mit ein paar Ausflgen in die API (zB Fenster ausblenden) den Schutz unterdrcken, weil das Programm nicht fortfhrt, whrend der Code geprft wird und in der Variable Activated speichert, ob der Code gltig war.

Private Sub AntiCopy_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
 
  If Check() Then
    Activated = True
    Me.Close()
  End If
End Sub

Beispiel

Ein komplettes Beispiel bekommen Sie an dieser Stelle nicht, da der grte Teil vom Code schon geschrieben ist, aber so knnte ein Programm mit Kopierschutz aussehen:

Dim Activated as Boolean
 
  Public Shared Sub Main()
    nAntiCopy.ShowDialog()
    If Not Activated Then End
    Form1.Show()
    End

Sieht einfacher aus, als Sie gedacht haben, oder?

Wie geht es jetzt weiter?

Einige Features wurden hier nicht angesprochen oder aus Grnden der bersichtlichkeit nur Ansatzweise implementiert. Hier ist eine Liste von Dingen, die noch eingefgt werden knnen:

  • Eine Verschlsselung des Server-Datenverkehrs
  • Toleranz gegenber Hardwarenderungen
  • Optionale Benutzerregistrierung
  • Ablaufdatum fr erneute Onlineprfung des Schlssels
  • Einfhrung eines Offets bei der Verschlsselung fr mehr Schlsselvielfalt
Um nicht nur negative Aspekte zu beleuchten hier noch einmal eine Zusammenfassung der Features:
  • Bindung einer Lizenz an einen PC
  • Verschlsselung aller fr den Benutzer sichtbaren Daten
  • Serverseitige Schlssel-Datenbank verhindert Aushebelung und ermglicht Anbindung an Online-Shops
  • Anwendung mehrerer Lizensen auf einen Schlssel mglich

Nachwort

Ich habe diesen Kopierschutz in leicht vernderter Form in nAntiCopy verarbeitet, das unter anderem bei nWine, nLabel, nSpeechOS, nMedia und einigen anderen experimentellen Programmen Verwendung findet. Meine Schlsseldatenbank hoste ich bei Square7, das technisch vergleichbar mit BPlaced ist. Falls Sie eine zuverlssige Internetverbindung haben, knnen Sie die Datenbank auch daheim hosten, der Datenverkehr betrgt lediglich einige hundert Bytes pro Abfrage, das sollte fr eine DSL-Leitung kein Problem sein. Ich hoffe, dass ihnen dieser Workshop geholfen hat und Sie nie in die Not kommen, einen Kopierschutz durchsetzen zu mssen.

FAQ

Darf ich diesen Kopierschutz in eigenen Programmen verwenden?
Fr private Programme und kleine Projekte darf der Kopierschutz gerne verwendet werden, in greren kommerziellen Programmen sollte in Absprache mit mir eine sicherere und auf das Programm zugeschnittene Variante von nAntiCopy verwendet werden, ich helfe gerne dabei, den Schutz zu optimieren und anzupassen.

Wie sicher ist der Kopierschutz?
ie Verschlsselung vermeidet zumindest die Bearbeitung mit einem Texteditor, wenn Sie die vorgeschlagene Offsettechnik verwenden und angepasste Hashberechnungen, sind der Groteil der Angriffsstellen ausgeschlossen. Der Kopierschutz vermeidet folgendes:

  • Verwenden eines nicht aktivierten Programms
  • Kopieren des aktivierten Programms auf einen anderen PC
  • Benutzung von Keygeneratoren
Diese Dinge erlaubt der Kopierschutz:
  • Kopieren des Programms auf eine andere Partition auf dem selben PC
  • Mehrere Aktivierungen mit einem Code, sofern auch mehrere Lizensen gekauft wurden

Kann ich eine fertige Dll bekommen?
Wie gesagt bin ich fr so etwas immer offen, benutzen Sie das Forum oder kontaktieren Sie mich auf einem anderen Weg.

Knnen mit dem Kopierschutz auch Spiele gesichert werden?
Kopierschutz von vielen Spielen basiert darauf, die CD-ID zu prfen, die eindeutig ist und sich nicht ndern lsst. Wenn Sie diese in den Hash einbeziehen, dann muss der Benutzer beim Starten die CD einlegen, somit wird die Installation samt Lizenz an die CD gebunden.


nAntiCopy und nBlow © 2010 Niel Wagensommer



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP fr .NET), Online-Update-Funktion u.v.m.
 
 
Copyright 2000-2017 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Weitere auf dieser Homepage aufgefhrten Produkt- und Firmennamen knnen geschtzte Marken ihrer jeweiligen Inhaber sein.