![]() |
Seriennummer Schutz
Hallo,
wie kann ich mein Programm mit einer Serial schützen ? Weiß das jemand ? |
Re: Seriennummer Schutz
Einen 100% Schutz kannst Du nicht erreichen. Zu Seriennummer und "Softwareschutz" gibt es hier im Forum genügend Themen.
|
Re: Seriennummer Schutz
Hallo,
und erstmal herzlich willkommen in der DP. :cheer: Dennoch erstmal ein Dämpfer: Das hier ist sicher die 100.000 Diskussion zum Thema Kopierschutz in der DP. Bitte bemühe erstmal die Foren-Suche nach Kopierschutz, Serial, Produktschlüssel und anderen Schlagwörtern die einem zu dem Thema einfallen. Aber eines kann ich Dir schon vorab sagen: Da wir hier einige Krypto-Spezialisten im Forum haben, läuft die Diskussion folgendermassen ab: Es werden folgende (vollkommen richtige) Argumente genannt werden: 1.) jeder Kopierschutz ist knackbar. 2.) Es geht, wenn man sowas machen will, ausschliesslich darum, dem 'durchschnittlichen' Cracker einen Aufwand zum Knacken zu präsentieren, der hoch genug ist um ihn davon abzuhalten. 3.) Der Aufwand, den der Entwickler dazu treiben muss, um den Aufwand für den Cracker so hoch zu treiben, wird in der Regel selber so hoch sein, dass man auschliesslich am Kopierschutz arbeiten muss. 4.) Das ganze lohnt sich _nur_, wenn man mit der Software genug Geld verdient, um die Entwicklung des Kopierschutzes mitzufinanzieren. Das heisst, wenn die Software a) für einen breiten Markt gemacht wurde und b) sie so gut ist, dass man sie unbedingt einsetzen will. Denn nur dann ist auch der Ansporn da, die Software zu knacken. Für den 3millionsten Passwort-Safe wird keiner den Aufwand treiben - und auch keiner dafür zahlen wenn er den Benutzer mit einem Kopierschutz gängelt. Alles in allem gibt es hinterher meist nur zwei sinnvolle Lösungen: 1.) Man lässt den Kopierschutz ganz weg. Ist das beste für die eigenen Nerven und den Kunden. 2.) Man setzt eine zugekaufte Kopierschutzlösung ein. Die Leute die die Lösung verkaufen haben das nötige Know How um den Aufwand für die Cracker möglichst hoch zu treiben, und sie tun ausschliesslich das und sie tun es in Vollzeit. Und sie unterstützen Dich dabei, das möglichst gut in Deine Software einzubauen. Das ist die einzige Möglichkeit, einen einigermassen sicheren Schutz zu erreichen. |
Re: Seriennummer Schutz
So, weil das in einen anderen Thread gerutscht ist:
Zitat:
|
Re: Seriennummer Schutz
Also wenn dir eine ganz simple Passwort abfrage reicht, dann mach das so:
Delphi-Quellcode:
with Tform1.create(Sender: TObject);
var passwort:string; begin passwort := InputBox('Test program', 'Please type your key', 'nichts-eingegeben'); if passwort <> 'Dein-Passwort' then begin showmessage('Falsches Passwort'); Close; end; if passwort := 'nichts-eingegeben' then begin showmessage('Bitte gib ein Passwort ein!'); close; end; end; grüsse |
Re: Seriennummer Schutz
Wie immer... Hardcoded
Das ist inner halb von en paar Minuten zu cracken, da das ja fest im Code drinsteht. ALso nimm wirklich eine professionelle Schutz-Lösung... |
Re: Seriennummer Schutz
Also das minimum wäre den Code in deinem Programm verschlüsselt abzulegen.
(Was für eine verschlüsselung da gut ist weiß ich nicht genau, aber ich glaube md5 ist gut oder so) 2.) wenn du wrklich keinen Passwort-Schutz eibauen willst (also immer das gleiche zum Aufheben der Sperre) dann brauchst du einen Serial. Die kennst du sicherlich das sind ja die Codes in diser art XXXXX-XXXXX-XXXXX-XXXXX Das geht dann so das der Erste teil durch einen Algo gejagt wird, das sollte dann den 2.Teil ergeben (wenn nicht ist der Serial falsch) Das geht dann so weiter bis zum letzten Teil. |
Re: Seriennummer Schutz
Zitat:
Diese Seriennummern sind eben nicht berechenbar. Allerhöchstens hast Du irgendwo eine Prüfziffer. Aber es ist eh überflüssig, sich darüber Gedanken zu machen, da so ohnehin kaum ein sinnvoller Schutz machbar ist. |
Re: Seriennummer Schutz
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir mal ne kleine (sehr einfache) Demo dazu geschreiben (btw sowas bracuhte ich eh mal^^)
BTW: Mit einem Doppelklick auf das Panel in der mitte (das rot bzw. gründ beim drücken von [Test] wird) wird Der generierte Serial aus dem unteren Edit nach oben übertragen. @alzaimar: Es müssen doch alle 4 Teile stimmen, damit der Serial OK ist. Kuck doch einfach mal meine Demo. Wenn du nur den teil änderst, ändern sich auch die anderen. D.h. es gibt nur XXXXX RICHTIGE Keys, aber 99999*99999*99999*99999 Möglichkeiten!!! (ich habe die Eingabe auf zahlen beschränkt) EDIT: Ich habe eine neue Version der Demo angehängt (kleiner Bug) MFG |
Re: Seriennummer Schutz
Zitat:
|
Re: Seriennummer Schutz
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mir mal die Mühe gemacht, den "Schutz" aus der orginal .exe, die du mitgelieferst hast rauszupatchen.
Die Zeile das der Panel grün werden soll sieht übrigens so aus, wenn deine Überprüfungen fehl schlagen wird die einfach übersprungen.
Code:
Änderung in Blau:
00451644 BA 00800000 MOV EDX,8000
Code:
Code fürs Überspringen:
00451644 BA 0000FF00 MOV EDX,0FF0000
Code:
geändert in:
0045162B 75 27 JNZ SHORT Serial.00451654 //springen wenn nicht gleich
Code:
womit das ganze immer grün (jetzt blau) wird.
0045162B EB 17 JMP SHORT Serial.00451644 //immer zur Farbänderung springen (außer es tritt vorher eine Exeption auf, weil nicht auf Buchstaben u. ä. geprüft wird)
Und deswegen macht eine solche Art von Schutz keinen Sinn, sollte man ihn dennoch unbedingt wollen, so sollte man das die Prozeduren zumindest nicht ins published (wo sie ohnehin nicht hingehören) oder public schreiben, weil sie dort besonders leicht auszulesen sind und die .exe mit UPX oder ähnlichem komprimieren (sehr leicht wieder dekomprimierbar), um wenigstens sehr dumme Versuche des Patchens zu verhindern. Außerdem lassen sich anhand des Codesschnipsels (oder des zugehörigen Assemblercodes):
Delphi-Quellcode:
in Kombination mit einem richtigen Key gute Rückschlüsse auf den im Programm verwendeten Safekey ziehen, abgesehen davon dass er in diesem Fall hardcoded im Programm ist.
res := PartA and Safekey;
If Res<>PartB then exit; res := PartA xor PartB; If Res<>PartC then exit; res := PartA xor Safekey xor PartC; If Res<>PartD then exit; Panel1.Color := clGreen; [Edit]kleiner Rechtschreibfehler |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz