Re: Programm zum knacken
@Uncle Cracker
Zitat:
Eine sichere Überprüfung ob nun der richtige Code entschlüsselt wird ist aber sehr einfach und denoch sicher einbaubar. Falls du also weiter experimentieren willst dann kann ich das noch einbauen. Diese Überprüfung funktioniert so daß man sie nicht als Angriffsmethode gebrauchen kann. D.h. selbst wenn ich diese Überprüfung einbaue musst du denoch knacken. Somit lässt sich diese Überprüfung auch zur Verifikation von mehreren Serials benutzen. Gruß Hagen |
Re: Programm zum knacken
Zitat:
Als normale Konstante
Delphi-Quellcode:
die im Datensegment der Anwendung gespeichert würde.
const
MeinWert: TGUID = ['{A5F774AA-9DAF-4F52-A96D-DFF12FEB0086}']; Da wir aber aktiven und verschlüsselten Code möglichst auch mit Daten versehen wollen speichern wir diese Daten im Codesegment
Delphi-Quellcode:
Mit Writeln( Copyright ); greifen wir also ReadOnly auf eine Testkonstante die im Codesegment gespeichert wurde zu.
function Copyright: PChar;
asm MOV EAX,OFFSET @@1 RET @@1: DB 'Portion Copyright (c) 2003 by Hagen Reddmann', 0 end; So, als Schutzmechanismus muß man immer auch das Konzept des Schutzes überdenken, dies ist der Erste Schritt. Wichtig dabei, zerlege jeden Algorithmus in ZWEI Teile. Einem zum Installieren des Schutzes und verschlüsseln in einer separaten Anwendung, und in der geschützten Anwendung NUR zur Verifikation und Entschlüsselung den anderen Teil des Algos. Damit die Schutzsoftware weiß wo sie was zu verschlüsseln und zu patchen hat integriert man Marker in die zu schützende Software. Alles was zwischen und inklusive der Marker ist wird dann verschlüsselt.
Delphi-Quellcode:
StopCode - StartCode = SizeOf(ProtectedCode);
function StartCode: PChar;
asm MOV EAX,OFFSET StartMarker RET StartMarker: DB 'CODESTART'#0 end; procedure ProtectedCode; begin .... end; procedure StopMarker; asm DB 'STOPCODE'#0 end; function StopCode: PChar; asm MOV EAX,OFFSET StopMarker + 9 RET end; Wie man den Code in ProtectedCode nun schreiben muß hängt davon ab wie man diesen Code entschlüsselt. In meiner Demo erzeuge ich einen Byte Array Block, kopiere alles zwischen StartCode bis StopCode da hinein. Dann entschlüssele ich dieses ByteArray und springe per CALL in diesen Speicherbereich hinein. D.h. der eigentliche verschlüsselte Code wird niemals direkt ausgeführt sondern nun eine Kopie die entschlüsselt wurde im dynamischen Speicher. Die Schutzsoftware muß nun die EXE Patchen. Die lädt die EXE zB. in einem TMemoryStream, sucht nach 'STARTCODE' und 'STOPCODE' und verschlüsselt diesen Bereich. Danach wird der TMemoryStream wieder auf die Platte gespeichert. Man könnte also auch den Code zwischen StartCode-StopCode als normale Resource in die EXE einlinken, oder sogar diesen Code als verschlüsselte Datei als Registrationsschlüssel verschicken. WICHTIG! dabei ist das dann aber dieser Code NIEMALS mit relativen Einsprungadressen in zB. API Funktionen arbeiten darf. Das liegt daran das diese Adressen relativ zur Adresse im Codesegment wo der CALL steht durch den Moduleloader realloziert werden. Ein einfaches LoadLibrary() im ProtectedCode ist also tabu und würde zum Absturtz führen. Am besten ist es für ALLE diese Funktionen eine eigene "Realokationstabelle" zu definieren.
Delphi-Quellcode:
Das Hauptprogram initialisiert nun diesen MyReloc mit den absoluten Adressen zu den benötigten Funktionen. Dem Protectedcode wird dieser Record als Paramter übergeben, und alle Funktionen werden nun mit
var
MyReloc = packed record LoadLibaray: function(Name: PChar): THandle; stdcall = @LoadLibrary; FreeLibrary: function(handle: THande): Integer; stdcall = @FreeLibrary; .. usw. usw. end;
Delphi-Quellcode:
den indirekten Aufruf über Reloc aufgerufen. Die gilt auch für statische Object Methoden, aber NICHT für virtuelle oder dynamisch Methoden, oder Interfaces. Die letzteren machen nämlich nichts anderes als unser Reloc Record.
procedure ProtectedCode(var Reloc: TMyReloc);
var Lib: THandle; begin Lib := Reloc.LoadLibrary('my.dll'); Reloc.FreeLibrary(Lib); end; Gruß Hagen |
Re: Programm zum knacken
Übrigens, diese Methode mit der eigenen Relocationstabelle benötigt man auch um seinen eigenen Code in andere Prozesse zu injektieren, sprich Code zB. in den Explorer Prozess dynamisch einzubinden.
Gruß Hagen |
Re: Programm zum knacken
@Hagen: Du bist der Verschlüsselungskönig. Schön dich zu kennen. :thuimb: Ich denke deine Technik könnte und wird einiges revolutionieren...
@all: Ich habe da ne interessante Seite gefunden die ich euch nicht vorenthalten möchte. Es geht darum wie man seine Programme "cracksicher(er)" macht und schützt. S-A-VE Anti Cracking Tipps Viel Spaß beim Lesen! :D MfG Florian :hi: |
Re: Programm zum knacken
Zitat:
Gruß Hagen |
Re: Programm zum knacken
sehr interessant :)
könntet ihr euch mal mein programm ansehen bitte ? http://www.delphipraxis.net/internal...ct.php?p=65045 für anregungen und verbesserungsvorschläge wäre ich dankbar :) |
Re: Programm zum knacken
Hi,
hab auch ein Prog zum Cracken. Aber bei dem kommt es nicht darauf an das Passwort zu finden (was prinzipiell eh unmöglich ist, da ich mit SHA-1 arbeite), sondern eher einfach nur die Nachricht herauszubekommen, die bei der Eingabe des richtigen Passwortes angezeigt wird. Das sollte schon kompliziert genug sein. An dieser Stelle verweise ich euch jetzt einfach mal zu meinem Thema: CrackIt! MfG. :zwinker: |
Re: Programm zum knacken
Hey Leute,
macht ihr es euch net ein bissl umständlich?!? Habe jetzt 5 Minuten an dem Prog gearbteitet (mit dissambler und Hex-Editor) Habe auf den jne und je - abfragen die Offsets verändert (von 75 in 74) und habe so die Möglichkeit, alle Kennwörter einzugeben... ganz easy... |
Re: Programm zum knacken
oooohhh, das da kommt ja sogar von mir. :shock: 80 DL, na klasse. Muß mich dann doch mal intensiver mit dem Thema befassen. 8)
|
Re: Programm zum knacken
hm.. sorry, habe nicht alle 7 Seiten gelesen. Wir sind dann wohl den selben Weg gegangen..Naja. wie dem auch sei... ok...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz