Entwickler-Ecke

Open Source Projekte - XOR-Decoder


Motzi - Fr 25.07.03 16:28
Titel: XOR-Decoder
Hi,

wie in diesem Thread - http://www.delphi-forum.de/viewtopic.php?t=13611 - versprochen hier die Programme.

Zuerst allerdings noch eine kleine Anmerkung:
ich hab inzwischen eine, möglicherweise nicht ganz ungerechtfertigte, Kritik dafür bekommen, dass ich hier derartige Tutorials und Programme veröffentliche. Ich weiß, das hier vermittelte Wissen und der Code könnten möglicherweise für illegale Zwecke mißbraucht werden. Aber die Absicht hinter diesem Tutorial und dem hier veröffentlichten Code-Material ist die, klarzumachen, dass simple XOR-Verschlüsselungen unsicher sind! Ich will jetzt keinem Anfänger ausreden ein kleines Programm für eine XOR-Verschlüsselung zu schreiben, denn es ist auf jeden Fall etwas wobei man viel lernt, aber ich möchte niemanden in der Illusion lassen, dass er damit eine unknackbare Verschlüsselung geschaffen hat! Und wenn das allen klar ist, dann kann dieses Wissen auch nicht mehr auf illegale Weiße missbraucht werden, denn dann sollte jeder soweit sein zu wissen, dass eine simple XOR-Verschlüsselung in einer sicherheitsrelevanten Software nichts zu suchen hat!
Falls es dennoch andere Personen gibt die Kritik an dieser Veröffentlichung hegen wollen bitte um PMs oder Mails!

Die Programme

Ich weiß, dass der Code nicht unbedingt immer sauber und professionell ist. Die Programme waren eigentlich nur für private Zwecke und sind eigentlich nur als mittel zum Zweck der Demonstration der Unsicherheit der simplen XOR-Verschlüsselung (siehe dieser Thread: http://www.delphi-forum.de/viewtopic.php?t=10610) entstanden... Aus diesem Grund war ich auch mit den Kommentaren äußerst sparsam. Ich hoffe trotzdem, dass ihr mit den Programmen und dem Code klarkommt. Bei Kritik, Fragen, Anregungen etc einfach melden (hier im Forum, PM, Mail, ICQ, ...)!

Decoder
Der Decoder ist das Programm das den Chiffre-Text analysiert und anhand der Koinzidenzerfassung die wahrscheinliche Schlüssellänge berechnet. Sobald die Analyse abgeschlossen ist sieht man 2 Panels - auf dem ersten sind allgemeine Informationen über die Datei, auf dem 2ten sind alle Informationen die relativ zur Schlüssellänge sind. Man kann die Schlüssellänge auch manuell ändern (wenn man der Meinung ist die Analyse hätte sich "getäuscht"), in diesem Fall werden die Informationen entsprechend angepasst.
Glaubt man die richtige Schlüssellänge gefunden zu haben kann man über einen Klick auf "Save" das ganze als .xdc-Datei (XorDeCoder) speichern die man dann im DecoderEditor bearbeiten kann.

An dieser Stelle noch eine kleine Anmerkung um Missverständnise zu vermeiden: die Daten müssen im "Roh-Format", also in normalen Bytes vorliegen und nicht im Hex-Format formatiert! Also zB das Byte mit dem Wert 0E und nicht der Text 0E!
Nachdem es damit anscheinend Probleme gibt hier noch ein kleines Programm, das in Hex-Code formatierten Chiffre-Text in normalen Chiffre-Text übersetzt. Der als Hex-Code formatierte Chiffre-Text muss dazu in normalem Textformat ohne Zeilenumbrüche(!) vorliegen. [url=http://www.x-spy.net/personal/xor/FileMaker.zip]download[/url]

Screenshot:
Decoder [http://www.manuel-poeter.de/opensource/DecoderScreenshot.jpg]
Download:
Decoder.zip [http://www.manuel-poeter.de/hitcounter.php?action=getfile&file=opensource/Decoder.zip] (~221kb)

DecodeEditor
Dieses Programm "überfallt" die meisten Benutzer wahrscheinlich mit einer sehr seltsamen Programmoberfläche. Ich werde jetzt mal versuchen diese halbwegs zu erklären. Am besten man öffnet man dazu mal eine .xdc-Datei, dann ist alles ein bisschen besser ersichtlich.

Ganz oben steht das Passwort - links in Hex-Form, rechts in normaler ANSI-Darstellung (anfangs besteht das Passwort nur aus Nullzeichen). Mit der Scrollbar darunter kann man die einzelnen Zeichen des Passwortes "durchscrollen". Die Position steht immer links unter der Scrollbar und das gerade "aktive" Zeichen des Passworts wird immer fett dargestellt.
Unterhalb der Scrollbar befinden sich noch ein Edit-Feld und 3 Buttons. Im Edit-Feld steht immer der Hex-Wert des aktuellen Passwort-Zeichens. Man kann nun das Passwort "bearbeiten" indem man den Hex-Wert des neuen Passwort-Zeichens eingibt und auf "Change" klickt. Ein klick auf "Delete" setzt das aktive Zeichen wieder auf den Wert $00 zurück. Der Button "Bruteforce Char" testet einfach alle Zeichen des Chiffre-Text an den entsprechenden Positionen durch und listet jene Zeichen auf, die möglich wären (die also "sinnvolle" Zeichen ergeben würden).

Der obere der beiden Hex-Editoren enthält den "decodierten" Chiffre-Text, also den original Chiffre-Text XOR-verknüpft mit dem verschobenen Chiffre-Text (das Ergebnis der Koinzidenzerfassung). Alle Zeichen mit dem Hex-Wert $00 werden dabei extra hervorgehoben.
Der untere Hex-Editor enthält (sofern noch kein Passwort angegeben wurde) den original Chiffre-Text.

Sobald ein Zeichen des Passworts geändert wird, ändert sich auch der untere Hex-Editor, denn der Stream mit dem Chiffre-Text wird mit dem aktuellen Passwort XOR-verknüpft und dann erneut in den Editor geladen. Jene Zeichen, die dabei mit einem Wert <> $00 verknüpft wurden werden dabei extra hervorgehoben, damit man besser erkennen kann welcher Teil nun bereits in Klartext und welcher noch in Chiffre-Text vorliegt. Steuerzeichen oder "seltsame" (unerwartete) Zeichen werden dabei rot hervorgehoben.

Auf der rechten Seite befinden sich einige Buttons und Edits. Die Buttons "Open" und "Save" sollten hoffentlich selbsterklärend sein (beziehen sich auf die .xdc-Datei!). Der Button "Save Decryption" speichert nur den entschlüsselten Chiffre-Text. Durch klick auf "ASCII-Tabelle" öffnet sich ein Fenster mit allen Zeichen und den entsprechenden Hex-Werten (-> eine Gedächtnisstütze für alle die die ASCII-Tabelle nicht auswendig können ;)).
Die Edits beziehen sich alle auf Chiffre-Text, Klartext oder Passwort. Im obersten Edit wird, je nachdem wo man sich im Hex-Editor befindet, der Wert des aktuellen Zeichens des Chiffre-Text eingetragen. In den unteren 2 Edits kann man nun eintragen um welches Klartext-Zeichen es sich handeln soll (linkes Edit - Hex-Wert, rechts Edit - normales Zeichen) und aus den Werten für Chiffre-Text-Zeichen und Klartext-Zeichen wird nun das Zeichen für das Passwort an der jeweiligen Position berechnet welches man per klick auf "Change" auch gleich ins Passwort "einsetzen" kann.

Die Listbox ganz unten enthält Hinweise und Warnungen, die einem die ganze Sache erleichtern sollen. Ändert man nun ein Zeichen des Passwortes, so wird der Chiffre-Text mit dem neuen Passwort verschlüsselt. Sollten dabei im entschlüsselten Text Steuerzeichen oder andere seltsame Zeichen (die sonst nicht in einem deutschen Text auftauchen) vorkommen, so wird in dieser Listbox eine Warnung angezeigt (ähnlich dem Delphi-Compiler):
DecodeEditor hat folgendes geschrieben:
Warning: Position: 17 Unexpected Char: $03

Außerdem werden Hinweise angezeigt, die die Sache auch noch erleichtern. Taucht im entschlüsselten Text zB ein Zeichen mit dem Wert $0D auf, so ist es sehr wahrscheinlich, dass das nächste Zeichen den Wert $0A hat (die Kombination $0D $0A stellt einen Zeilenumbruch dar)! Weitere wahrscheinliche Zeichen sind Leerzeichen nach Satzzeichen wie .,!? etc. Auch hier wird ein Hinweis angegeben:
DecodeEditor hat folgendes geschrieben:
Note: Position: 23 Possible Char: $20'

Durch einen Doppelklick auf einen Eintrag (egal ob Warnung oder Hinweis) spring das Programm sofort an die entsprechende Stelle im Hex-Editor.

Hinweis: dieses Programm verwendet eine leicht modifizierte Version (hab ein "halbfertiges" OwnerDraw-Event hinzugefügt) des TMPHexEditor von Markus Stephany (ich hab die entsprechenden Stellen leider nicht entsprechend kommentiert)! Das original findet ihr auf http://www.mirkes.de

Screenshot:
DecodeEditor [http://www.manuel-poeter.de/opensource/EditorScreenshot.jpg]
Donwload:
DecodeEditor.zip [http://www.manuel-poeter.de/hitcounter.php?action=getfile&file=opensource/DecodeEditor.zip] (~410kb)

Edit: Links korrigiert


O'rallY - So 27.07.03 11:29

Ich find das Programmpacket super! Ist irgendwie cool, wie sich langsam aus einem Zeichenhaufen ein anständiges Satzgebilde entsteht.
Doch würde ich noch ein paar Kleinigkeiten verbessern (was ich ja auch eignentlich selber machen könnte :wink:):
-Die einzelnen Zeichen des Passworts sollte auch per Mausklick angesteuert werden können, da es mit der Scrollbar doch manchmal richtig nervt
-bei der ASCII-Zeichentablle muss ich immer zuerst auf den "Find Char"-Button klicken, damit was passiert. Ein einfacher Enter-Anschlag oder sogar völlig automatisch mittels des OnChange-Events wär vielleicht eine gute Idee. Außerdem sollte das Fenster nicht automatisch geschlossen werden, wenn man wieder auf die Mainform klickt.


Motzi - So 27.07.03 14:18

Ok, hab jetzt ein paar kleine Änderungen vorgenommen:

- die ASCII-Tabelle ist nun ein Always-On-Top Toolwindow (schließt sich also nicht mehr automatisch)

- die suche in der ASCII-Tabelle wird nun schon im OnChange ausgelöst

- die einzelnen Passwort-Zeichen können nun auch per Mausklick ausgewählt werden (aber nur in der Hex-Darstellung)

Neue Version ist online...


GuenterS - So 18.01.04 22:07

die links funktionieren bei mir aber leider nicht wirklich...


Motzi - Mo 19.01.04 10:58

Hm.. komisch.. bei mir schon.. die Domain macht leider bei machen Leuten immer wieder Probleme, der Server läuft aber..!

Probier mal als alternative statt http://www.x-spy.net http://motzi.fs-tools.de das hat bis jetzt eigentlich bei allen noch funktioniert...


GuenterS - Mo 19.01.04 19:57

Ok diese addi ( http://motzi.fs-tools.de ) funktioniert auch bei mir, aber es war beim Beitrag nicht ersichtlich wieso ich diese probieren sollte....


Motzi - Di 20.01.04 10:09

Ja.. früher hat die Domain http://www.x-spy.net problemlos funktioniert, aber seit einiger Zeit gibt es anscheinend immer wieder Probleme mit einem DNS-Server/Eintrag, zumindest kann ich es mir sonst nicht anders erklären, warum die Domain bei mir und anderen problemlos funktioniert und bei einigen anderen wiederum gar nicht... :?


patrick - So 14.03.04 14:15

irgendwie funktioniert das beim mit nicht so richtig.
ich hab mal die verschlüsselungsroutine genommen, die du auf deinem tutrial venutzt hast. aber dein decoder bekommt nicht den richtigen code raus.
die schlüssellänge ist zwar korrekt aber das encodieren funktioniert nicht.
mit welchem program hast du das den gemacht?


Motzi - So 14.03.04 14:21

Der DecodeEditor knackt den Schlüssel auch nicht automatisch..! Das musst schon du erledigen und zwar so wie oben beschrieben steht..! Die Berechnung der Schlüssellänge hilft dir nur dabei.. aber um die eigentliche Entschlüsselung musst du dich schon selbst kümmern..!

Was meinst du mit "mit welchem Programm hast du das gemacht"..? :?


patrick - So 14.03.04 18:56

ich meine welchem programm(source) du die XOR dateien erstellt hast


Motzi - So 14.03.04 19:05

Achso... hab mir dazu ein Prog mit einer normalen simplen XOR-Verschlüsselung geschrieben. Einfach eine Form mit einem Memo (für den Text), einem Edit (für das Passwort), einem SaveDialog und einen Button in dessen OnClick folgender Code kommt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button1Click(Sender: TObject);
var
  aStream: TFileStream;
  pData: Pointer;
  i, dwSize: DWord;
  PasswordPos: Integer;
begin
  if SaveDialog1.Execute then
  begin
    aStream := TFileStream.Create(SaveDialog1.FileName, fmCreate);
    dwSize := Length(Memo1.Text);
    pData := GetMemory(dwSize);
    try
      CopyMemory(pData, PChar(Memo1.Text), dwSize);

      PasswordPos := 1;
      for i := 0 to dwSize do
      begin
        if PasswordPos > Length(Edit1.Text) then
          PasswordPos := 1;

        PByte(DWord(pData) + i)^ := PByte(DWord(pData) + i)^ xor Ord(Edit1.Text[PasswordPos]);

        Inc(PasswordPos);
      end;

      aStream.Write(pData^, dwSize);
    finally
      FreeMemory(pData);
      aStream.Free;
    end;
  end;
end;


patrick - So 14.03.04 19:21

THX
jetzt hab ich's raus 8)


F.Art - Mo 24.05.04 10:42

Wie lautet der Code um es wieder zu entschlüsseln?


Motzi - Mo 24.05.04 10:46

Was entschlüsseln..? :?


O'rallY - Do 27.05.04 17:57

Download von http://motzi.fs-tools.de/personal/xor/DecodeEditor.zip funktioniert bei mir auch nicht.
Dieser allerdings schon: http://www.manuel-poeter.de/hitcounter.php?action=getfile&file=opensource/Decoder.zip


Motzi - Do 27.05.04 20:39

Hoppla.. ich hab die links nicht zu meiner neuen Homepage geändert.. :oops: Danke für den Hinweis! :)