Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ein neuer Kopierschutz
Blue-Fox Offline
nothing to see here

Beiträge: 2.758
Registriert seit: Jul 2008
Beitrag #21
Ein neuer Kopierschutz
Hmm
Warum schreibst du das in VisualBasic?
12.06.2010 12:24
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Alex Offline
Registriert seit 17.04.06

Beiträge: 6.619
Registriert seit: Jul 2008
Beitrag #22
Ein neuer Kopierschutz
Weil es geht?

Desktop: AMD FX-6200 @ 6 x 4,3 GHz | 32 GB DDR3 | Intel Arc A380 | SSD: 1 TB @ M.2 to PCIe Adapter + UEFI NVMe Driver Injection | HDD: 15 TB | Win 11 Pro | Dual Monitor 2 x 27"
Notebook: Lenovo ThinkPad T420 | i5 2520M | 16 GB DDR3 | SSD: 250 GB | USB 3.0 | 300 MBit WWAN @ D1 | AC WLAN | BT 4.0 | 2 x 70++ | 1 x 27++ Slice | Win 11 Pro | FHD Display Mod
Internetleitung: Telekom | FTTH | D: 500 MBit / U: 200 MBit | Telekom Glasfasermodem | AVM Fritz!Box 7490
Räder: [Daily: Stevens E-Triton 2016] [Cyclocross: Stevens Prestige 2019] [Cargobike: Urban Arrow Cargo XL 2023]
12.06.2010 17:59
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.829
Registriert seit: Dec 2009
Beitrag #23
Ein neuer Kopierschutz
gandro schrieb:  Was macht eigentlich GetHash()? Ist ist ja wohl kaum Hashtable.GetHash Method (System.Collections) ?
Nein, das erzeugt einen 2048-Bit Hash der Systemkomponenten.
VB war eig die erste Sprache die ich gelernt hab: erst VBScript, dann C++, dann kam VB Classic, Java, VB.Net, VB für DOS, Delphi, HTML+CSS, Javascript, PHP und Perl (so etwa in der Reihenfolge, es sind noch ein paar mehr und ich hab auch schon selbst Skriptsprachen entworfen, aber das sind die wichtigsten). An sich finde ich VB übersichtlicher, wenn es auch darum geht, möglichst wartungsfreien Code zu erstellen, der immer mal wieder leicht verändert wird. Zum Errorhandling: der erste Try-Block fängt Errors ab, falls die Keylänge nicht ausreicht, um alles zu verschlüsseln, der zweite falls noch gar kein Hash existiert (Also noch nicht freigeschaltet wurde)
Visual Basic ist heute genau so schnell wie alle anderen wichtigen Sprachen, weil VB.Net, C#, C++.Net und J++ alle zu MS-IL kompiliert werden und sogar in ner anderen Sprache wieder dekompiliert.


(Dieser Beitrag wurde zuletzt bearbeitet: 13.06.2010 11:06 von niwax.)
13.06.2010 10:58
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #24
Ein neuer Kopierschutz
niwax schrieb:  
gandro schrieb:  Was macht eigentlich GetHash()? Ist ist ja wohl kaum Hashtable.GetHash Method (System.Collections) ?
Nein, das erzeugt einen 2048-Bit Hash der Systemkomponenten. Ich wollte das nicht gleich offenlegen.
Wie du meinst. Nur Sicherheit bringt dir die Nicht-Offenlegung definitiv nicht, weil das hindert niemanden mit genügend Interesse daran, herauszufinden was du tust und wie man es umgehen kann.
13.06.2010 11:00
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.829
Registriert seit: Dec 2009
Beitrag #25
Ein neuer Kopierschutz
War eigentlich mehr deswegen, weil der Code nicht grad clean ist (Ziemlich viele Stringfunktionen etc.)


13.06.2010 11:35
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 12.021
Registriert seit: Jul 2008
Beitrag #26
Ein neuer Kopierschutz
niwax schrieb:  An sich finde ich VB übersichtlicher, wenn es auch darum geht, möglichst wartungsfreien Code zu erstellen, der immer mal wieder leicht verändert wird.
ist das nicht ein Widerspruch? kleine Veränderungen sind doch das, was typischerweise unter Wartung fällt

niwax schrieb:  Zum Errorhandling: der erste Try-Block fängt Errors ab, falls die Keylänge nicht ausreicht, um alles zu verschlüsseln, der zweite falls noch gar kein Hash existiert (Also noch nicht freigeschaltet wurde)
Jaja das ist schon klar, dass es angedacht ist, dass da nur bestimmte Exceptions auftreten.
Nur wie heißen die exceptions denn genau? bei dem catch-statement sollte nicht einfach die Klasse aller Exceptions stehen, weil die Fehlerbehandlung (die bei dir nicht vorhanden ist) i.a.R. auf einen bestimmten Fehlertyp zugeschnitten ist. ein fehler ob die Keylänge ausreicht ist was anderes, als wenn er z.B. die datei nicht öffnen kann, in letzterem Falle wäre es nämlich NICHT sinnvoll einfach den Fehler zu fangen und weiterzumachen, weils nix gibt, um weiterzumachen
13.06.2010 11:48
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.829
Registriert seit: Dec 2009
Beitrag #27
Ein neuer Kopierschutz
Der Code kann gar keinen Fehler erzeugen, außer dass der Key zu kurz ist, deshalb wollte ich nicht testen, was bei zu kurzem Key passiert sondern habs einfach verallgemeinert. Ich habe ja zwei Try-Blöcke, einen um die Dateiroutinen, die lesen ist ein Try-Block drum, weil sichs bei Lesefehlern um ne fehlerhafte Datei, also ein nicht akjtiviertes Programm handelt. Die Funktion Generate() hat absichtlich keinen Try-Block um den Plattenzugriff, damit der Aufrufer den Fehler weitergereicht bekommt und so darauf reagieren kann, wie er will zB mit ner Demoversion etc.


13.06.2010 12:25
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #28
Ein neuer Kopierschutz
Also, ich hab mir die Sache mal ein bisschen kryptografisch angeschaut.

Etwas stutzig macht mich dabei sofort, dass du in der GUI irgendwo MD5 erwähnst, du aber nirgendwo MD5 verwendest..? Egal.

Was du ja prinzipiell machst, ist einen Hashwert aus den Systemeigenschaften generieren und den abspeichern. Kopiert jemand die Dateien auf einen anderen Rechner, oder bastelt an der EXE rum, dann fällt das natürlich dann auf, das ist ja die Idee hinter dem Schutz.

Die "Verschlüsselung" die du machst, ist nichts weiter als ein XOR aus den Daten der EXE und dem Hash. Du schüttest da noch ein paar Zufallszahlen in die anticop.y rein, aber das ist ja nur Datenmüll zur Verschleierung.

Das heisst, wir haben hier eine synchrone XOR-Verschlüsselung mit ein bisschen Obfuscation. Mit Blowfish hat das herzlich wenig zu tun ;)

Synchrone "Verschlüsselung" heisst: Jeder kann die Datei entschlüsseln (im Zweifelsfall .NET dekompilieren und den Code anschauen), den Hash rauslesen und einen eigenen Hash reinschreiben (den Hash-Generator getHash() lieferst du ja auch mit, da kommt man auch an den Code ran).

Als potentieller Cracker muss ich also nur ein winziges Programm schreiben, was die anticop.y für den Rechner neu schreibt und fertig.

Von daher schützt dein Code zwar vor einfachem Copy-Paste, aber der Schutz lässt sich problemlos aushebeln, weil du synchrone Verschlüsselung verwendest.

Ein richtiger Kopierschutz müsste mit asynchroner Verschlüsselung arbeiten, wo das Setup oder dein Download-Server den rechnerspezifischen Hash verschlüsselt, wo du beim Überprüfen nur noch entschlüsseln musst und ein Angreifer keine Verschlüsselung basteln kann, weil du den Code zum verschlüsseln nicht mitlieferst.

Solange du aber die Verschlüsselungsroutine inkl. Key im Programm behälst, kann jeder deinen Kopierschutz aushebeln.
13.06.2010 15:20
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.829
Registriert seit: Dec 2009
Beitrag #29
Ein neuer Kopierschutz
GetHash() ist ne Funktion von mir, in der wiederum Object.GetHashCode() verwendet wird, die auf MD5 basiert.


13.06.2010 20:31
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #30
Ein neuer Kopierschutz
Hm... nö.. das ist definitiv kein MD5.

Default implementation for Object.GetHashCode() - Stack Overflow

Wobei du ja GetHashCode() von Objekten aufrufst, die von Microsoft stammen. Die werden da nicht überall die Standard-GetHashCode verwenden, aber MD5 halte ich (ohne es überprüft zu haben) für sehr unwahrscheinlich. Viel zu zeitaufwendig, weil der Hash idR auch nicht kryptografisch sicher sein muss.

Am meisten (oder immer?) verwendest du in GetHash() ja eh Strings, also String.GetHashCode(). Und das ist definitiv nicht MD5, nur schon von der Bitlänge her viel zu kurz.

String.GetHashCode Method (System)
13.06.2010 20:42
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste