2 Stimmen

Tipps für eine erfolgreiche Entschlüsselung

Ich habe eine ausführbare Datei, die vom Benutzer eingegebene Binärdaten entschlüsselt. Meine Aufgabe ist es, den Entschlüsselungsalgorithmus wiederherzustellen, ohne den Quellcode der ausführbaren Datei zu sehen. Ich habe bereits etwa 50 Entschlüsselungsversuche unternommen, und den Ergebnissen nach zu urteilen ist der Algorithmus offensichtlich einfach (XOR-ähnlich, aber die Änderung eines Bytes der Eingabedaten wirkt sich in der Regel auf zwei Bytes der Ausgabe aus), und die Länge des Schlüssels beträgt definitiv 16 Bytes, aber ich kann ihn immer noch nicht wiederherstellen.

Meine Frage lautet also: Gibt es irgendwelche Tipps zur erfolgreichen Wiederherstellung des Entschlüsselungsalgorithmus? Einige Leitlinien oder jede andere Hilfe wird sehr geschätzt werden.

Hier sind einige echte Beispiele, ich kann die Regelmäßigkeit erkennen, aber ich kann den gesamten Algorithmus nicht verstehen. Wenn ich mehr als 16 Bytes eingebe (z.B. 17 Nullbytes), wiederholt sich die Ausgabebytefolge. Der linke Teil ist das, was ich eingebe, der rechte Teil ist das, was ich erhalte (alles in hex):

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> 73 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 65
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 66
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 -> 93 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 75
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 -> 83 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 76
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 -> 83 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 A9 64
00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 BA 55
00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 B9 54
00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 -> 94 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 75 A8 64
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 -> 73 36 15 B9 95 5D 8E EA 01 72 1C F4 FA 76 AA 63

P.S. Dies ist kein "Hacking" im üblichen Sinne. Ich schreibe einen 3D-Modell-Viewer für ein unbekanntes Format (.bmd), aber einige der Modelle sind verschlüsselt, so dass ich meinen eigenen internen Entschlüsseler implementieren möchte, anstatt eine externe ausführbare Datei zu verwenden.

2voto

Howard Punkte 37723

Ihr Ansatz ist völlig richtig. Wenn wir davon ausgehen, dass es sich um eine 16-Byte-Blockverschlüsselung handelt und dass es sich tatsächlich um einen Xor-Code handelt, können Sie wie folgt vorgehen (beachten Sie, dass alle Berechnungen modulo 2 durchgeführt werden):

  • Der Eingangsblock hat 128 Bits und der Ausgangsblock ebenfalls
  • Die Verschlüsselung kann durch eine 128x128 Binärmatrix E beschrieben werden: out = e(in) = E*in + e(0)
  • Jede Zeile in E sagt Ihnen im Grunde, welche Bits in der Ausgabe umgedreht werden, wenn Sie das entsprechende Bit in der Eingabe ändern.
  • Sie können E und e(0) mit Ihrem Ansatz ermitteln, jeweils ein Bit setzen und die Ausgabe berechnen. So erhält man die Matrix E zeilenweise, d.h. man braucht 128 Eingabewerte, um die komplette Matrix zu erhalten. e(0) ist einfach die Kodierung der Null-Zeichenkette.
  • Die Entschlüsselung ist dann definiert durch d(out) = D*(out-e(0)) mit einer Matrix D.
  • Wenn wir beides zusammenstecken, erhalten wir in = d(out) = D*(E*in+e(0)-e(0)) = D*E*in.
  • Wir müssen also die binäre Umkehrung der Verschlüsselungsmatrix E berechnen. Es gibt bekannte Algorithmen für dieses Problem (siehe z.B. http://en.literateprograms.org/Binary_matrix_%28Java%29 ).

Edit : Ich habe geprüft, ob das von Ihnen genannte Beispiel zu den Annahmen passt. Wenn es sich um einen einfachen XOR-Code handeln würde, hätten wir XOR[1. Zeile, 2. Zeile, 3. Zeile, 4. Zeile] = 0 am Eingang und am Ausgang. Dasselbe gilt für XOR[1. Zeile, 5. Zeile, 6. Zeile, 7. Zeile] = 0. In den begrenzten Daten, die Sie zur Verfügung gestellt haben, gilt dies für alle Bits außer den ersten 8 in der Ausgabe (was nicht viel aussagt, da ohnehin nur wenige Bits betroffen sind). Leider kann ich Ihnen im Moment nicht mehr sagen, da nur so wenige Daten zur Verfügung stehen.

1voto

Martin Thompson Punkte 16036

Wie groß ist die ausführbare Datei - können Sie sie disassemblieren und die Entschlüsselung daraus zurückentwickeln?

Vielleicht posten Sie ein paar Beispiele, die zeigen, warum Sie denken, dass es so funktioniert, wie Sie denken - vielleicht entdeckt jemand anderes etwas...

0voto

Micromega Punkte 12386

Was Sie wollen, ist höchstwahrscheinlich die Verwendung eines Gray Codes zur Entschlüsselung der Datei. Ein Gray-Code kann mit einigen Xoren wie diesem entschlüsselt werden: http://www.morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X