Delphi-PRAXiS
Seite 10 von 11   « Erste     8910 11      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm zum knacken (https://www.delphipraxis.net/7319-programm-zum-knacken.html)

negaH 15. Aug 2003 15:13

Re: Programm zum knacken
 
@Uncle Cracker
Zitat:

Dein Programm gibt bei dem Namen 'Test' eine Zugriffsverletzung aus und beendet sich aber bei dem Namen 'Test1'.
Bei allen anderen Worten funzt alles.

Kann es sein, dass dies ein Bug ist, oder hat das was mit dem Algo zutun? Das denke ich aber nicht.

Nein es ist kein "Bug", sondern ein Ärgernis für euch. Die sache ist ziemlich simpel erklärt. Ich habe einen Maschinen-Code verschlüsselt. Deiser wird per Serial entschlüsselt. Nur wenn die richtige Serial eingegeben wurde wird der korrekte und lauffähige Code entschlüsselt. Gibt man eine falsche serial ein dann ist dieser Maschinencode auch falsch und sollte eigentlich NICHT ausgeführt werden. Aber auf diese Überprüfung habe ich verzichtet und rufe den entschlüsselten Code immer auf. Dies führt zu Zugriffverletzungen. Um Abstütze zu reduzieren habe ich diesen Aufruf in einen try except Block gekapselt. Allerdings keinen Delphi generierten try except Block sondern einen per Assembler erzeugen Structured Exception Handling = SEH Frame. Dieser IST wesentlich stabiler als der Delphi SEH Frame. Trotzdem kann man Code ausführen der selbst diesen SEH wirkungslos macht ! In diesem Moment wird im besten Falle nur die EXE terminiert. So gesehen eine kleine Gemeinheit meinerseits :)

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

negaH 15. Aug 2003 15:35

Re: Programm zum knacken
 
Zitat:

ich wollte mal wissen wie man überhaupt einen Wert in einer Exe datei von delphi speichern kann?
Da gibt es mehrere Wege:

Als normale Konstante
Delphi-Quellcode:
const
  MeinWert: TGUID = ['{A5F774AA-9DAF-4F52-A96D-DFF12FEB0086}'];
die im Datensegment der Anwendung gespeichert würde.

Da wir aber aktiven und verschlüsselten Code möglichst auch mit Daten versehen wollen speichern wir diese Daten im Codesegment
Delphi-Quellcode:
function Copyright: PChar;
asm
      MOV EAX,OFFSET @@1
      RET
@@1: DB 'Portion Copyright (c) 2003 by Hagen Reddmann', 0
end;
Mit Writeln( Copyright ); greifen wir also ReadOnly auf eine Testkonstante die im Codesegment gespeichert wurde zu.

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:
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;
StopCode - StartCode = SizeOf(ProtectedCode);
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:
var
  MyReloc = packed record
    LoadLibaray: function(Name: PChar): THandle; stdcall = @LoadLibrary;
    FreeLibrary: function(handle: THande): Integer; stdcall = @FreeLibrary;
   .. usw. usw.
  end;
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

Delphi-Quellcode:
procedure ProtectedCode(var Reloc: TMyReloc);
var
  Lib: THandle;
begin
  Lib := Reloc.LoadLibrary('my.dll');
  Reloc.FreeLibrary(Lib);
end;
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.

Gruß Hagen

negaH 15. Aug 2003 15:38

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

flomei 16. Aug 2003 13:03

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:

negaH 16. Aug 2003 14:08

Re: Programm zum knacken
 
Zitat:

@Hagen: Du bist der Verschlüsselungskönig. Schön dich zu kennen. Ich denke deine Technik könnte und wird einiges revolutionieren...
Naja jetzt übertreibst du schamlos, das einzigste was ich mit Sicherheit weis ist das ich nichts weis.

Gruß Hagen

wb32 30. Aug 2003 00:25

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 :)

daniel-volk 27. Sep 2003 21:48

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:

TheMiller 22. Okt 2003 00:39

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...

Hansa 22. Okt 2003 00:51

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)

TheMiller 22. Okt 2003 00:57

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.
Seite 10 von 11   « Erste     8910 11      

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