PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Codeknacken Teil 2 1/2



dennisstrehl
02.07.2006, 20:43
So, da tobimc nicht da ist, der letzte Code aber schon geknackt ist, drängel ich mich hier mal schnell zwischen ;-)

Es geht wieder darum, den Code schnellstmöglich in den Ursprungstext zurückzudecodieren, außerdem sollte angegeben werden, wie man auf die Lösung gekommen ist.

Der Code ist zugegebenermaßen unübersichtlich, aber wenn man ihn in ASCII umwandelt wird es unlesbar. Deshalb hab ich jedes Zeichen hexadazimal codiert, der Anfang ist oben links ;-)
Die Line-Feeds und Carriage-Returns hab ich mitcodiert, die sind also als Zeichen da drin.

Jetzt aber viel Spass damit ;-)


0x14 0xca 0xf0 0x81 0xdd 0x7c 0xfb 0x93 0x81 0x55
0x93 0x73 0x44 0xe0 0xb0 0x4f 0x93 0x20 0x8f 0x6f
0xb9 0x50 0x63 0xf0 0x17 0xa3 0xac 0x8c 0x67 0x03
0xb0 0x4f 0x43 0xd5 0xd0 0x62 0xd2 0xb2 0x3b 0xc4
0x9d 0x2e 0x72 0x0a 0x00 0x94 0x45 0x25 0x0b 0xa7
0x81 0x1c 0xd4 0x62 0xed 0xcd 0x1c 0xb8 0x14 0xaf
0xb6 0x53 0x01 0x92 0xbc 0x58 0xc5 0x5c 0x85 0x20
0x3e 0xcc 0x73 0xff 0x9f 0x3a 0x20 0x00 0xa8 0x54
0x0b 0xa6 0x59 0xe1 0x20 0xac 0xaf 0x81 0xd1 0xc4
0x74 0x6a 0x68 0x5b 0x36 0x2c 0x9a 0x52 0xd2 0x6d
0x38 0xc6 0x26 0xac 0x34 0xc8 0x6a 0x01 0x87 0x24
0x42 0xda 0x82 0x1d 0x2d 0xbf 0x4e 0x2e 0x55 0x0e
0x35 0xc9 0xba 0xbe 0x7e 0x1b 0x89 0x1e 0x3c 0xc5
0x0b 0x96 0x12 0xa4 0xd8 0x65 0xec 0x89 0xc8 0x60
0x21 0x00 0xc6 0xb9 0x16 0x0c 0xc1 0xb4 0xf2 0xe8
0xbf 0x72 0x2c 0xc6 0xf0 0xa9 0xa0 0x93 0x73 0x69
0xbd 0xb0 0xe2 0xd8 0xfd 0xb9 0x5a 0xf5 0xb0 0x42
0xc6 0x58 0xfd 0x94 0x62 0xef 0x93 0x73 0x14 0xc1
0x4d 0xd9 0x20 0xae 0x20 0xbb 0x95 0x2d 0x2f 0xc3

MfG

(PS: Ich hoffe da ist kein Fehler drin, ich werd's gleich nochmal nachprüfen.)
(Edit: Hab noch mal stichprobenartig drübergeschaut und es schein zu stimmen.)

lowlevel89
02.07.2006, 22:59
Wie wärs wenn du das als Binär-Datei zur verfügung stellst, wär einfacher zu verarbeiten.

Da das alles in Hex angegeben ist und es als ASCII unlesbar ich: Kann es sein das es XOR verschlüselt ist?

mfG
LowLeveL89

dennisstrehl
02.07.2006, 23:03
Nein, ein XOR war's nicht.
Wie bekomm ich das am einfachsten in ne Binärdatei?
Wäre das nicht im Grunde dasselbe wie wenn ich den Kram in ne Textdatei schreibe?

MfG

lowlevel89
02.07.2006, 23:11
Am einfachsten wärs mit nem Prog das den Ursprungstext verschlüsselt und den output dann direkt binär in ne datei schreibt.
Oder vielleicht mit nem hex-editor.

Aber falls du das mit der hand codiert hast, lass es, das is ziehmlich viel Aufwand, dann müssen wir mit dieser Form leben.
Ein Geheimdienst bekommt seine daten ja auch nicht in der bestelleten From.

mfG

dennisstrehl
02.07.2006, 23:17
Hmm... Ich versteh nicht was der Unterschied zwischen ner Textdatei und ner Binärdatei ist, wenn man sie im gleichen Editor öffnet. Die Daten, die abgespeichert werden, sind doch dieselben? Die Dateiendung hat dafür auch keine Bedeutung, die kann man zur Not ja auch von Hand einfach ändern.

Ist per Skript verschlüsselt, aber in PHP und afaik kann PHP keine sog. Binärdateien schreiben.

Ich werd's einfach mal in ne Datei schreiben (lassen), einen Moment.

Edit: Hab's angehängt, ich hoffe damit könnt ihr was anfangen.

MfG

SprinterSB
03.07.2006, 11:17
:-k das einzige was ich sehe, ist daß es ziemlich sicher keine "lokale" Codierung ist, also ein "A" mal so, mal so codiert wird...

dennisstrehl
03.07.2006, 11:48
Ich geb euch mal nen Tipp (damit ihn die, die ihn nicht haben wollen, nicht lesen müssen in Code-Tags )






Die Anzahl der Zeichen im codierten Text entspricht nicht der Anzahl der Zeichen im uncodierten Text.

tobimc
04.07.2006, 16:44
Hi

Huhuhu
Das ist ja ganz schön interessant...

Leider ist der Text nicht lang, sonst würde ich einfach eine Zeichenhäufigkeitsanalyse machen.

Codeknacken 3 ist übrigens fertig... schwerer denn je... ;D

VLG Tobi

PS/EDIT: Ich glaub ich bin nur beim Verschlüsseln brauchbar...

dennisstrehl
04.07.2006, 20:10
Ich geb zu, das ist ziemlich fies :-P

Noch nen Tipp? Als Ergänzung zum ersten:






Der codierte Text enthält doppelt so viele Zeichen wie vor dem codieren.

OK, wahrscheinlich hilft euch das auch nicht sonderlich weiter :\

MfG

lowlevel89
04.07.2006, 23:06
Also der einzige Algorithmus den ich gefunden habe bei dem das Chiffrat doppelt so groß is wie die uncodierten daten is der ElGamal-Algorithmus.
Aber das is ne PublicKey Geschichte desshalb geh ich mal davon aus des der es nicht is, oder?

mfG

dennisstrehl
04.07.2006, 23:12
Den Algorithmus hab ich mir selbst ausgedacht, => Richtig, er ist es nicht :)

tobimc
05.07.2006, 07:47
HI

Naja, der 1. Tipp ist eh klar, und der 2. sagt lediglich, dass 1 Zeichen = 1Byte ist, also 0xYY = 1 Zeichen im Orginaltext.
Richtig?

VLG Tobi

lowlevel89
05.07.2006, 11:08
Nein, das 0xYY is nur die Hexadezimale Darstellung eines Bytes, aber der zweite Tipp bedeutet gleube ich das die Datenmenge nach der Verschlüsselung (also die in der Datei) doppelt so groß ist.

mfG

dennisstrehl
05.07.2006, 11:30
Ja, das meinte ich. Die Datenmenge wird verdoppelt.

MfG

dennisstrehl
06.07.2006, 22:22
Tipp 3, wobei ich denke dass es damit schon fast gelöst ist:






Aus einem Zeichen werden jeweils zwei gemacht. Aus den zwei Bytes lässt sich das vorherige Byte errechnen

maze2k
06.07.2006, 23:47
Joah, das ist dann wohl der decodierte Text.

Herzlichen Glückwunsch!

MfG

Dennis Strehl

Hier das entschlüsselnde Java-Programm:



package rn;

public class Hex {
public static void main(String[] args) {
String hex = "0x14 0xca 0xf0 0x81 0xdd 0x7c 0xfb 0x93 0x81 0x55 "
+"0x93 0x73 0x44 0xe0 0xb0 0x4f 0x93 0x20 0x8f 0x6f "
+"0xb9 0x50 0x63 0xf0 0x17 0xa3 0xac 0x8c 0x67 0x03 "
+"0xb0 0x4f 0x43 0xd5 0xd0 0x62 0xd2 0xb2 0x3b 0xc4 "
+"0x9d 0x2e 0x72 0x0a 0x00 0x94 0x45 0x25 0x0b 0xa7 "
+"0x81 0x1c 0xd4 0x62 0xed 0xcd 0x1c 0xb8 0x14 0xaf "
+"0xb6 0x53 0x01 0x92 0xbc 0x58 0xc5 0x5c 0x85 0x20 "
+"0x3e 0xcc 0x73 0xff 0x9f 0x3a 0x20 0x00 0xa8 0x54 "
+"0x0b 0xa6 0x59 0xe1 0x20 0xac 0xaf 0x81 0xd1 0xc4 "
+"0x74 0x6a 0x68 0x5b 0x36 0x2c 0x9a 0x52 0xd2 0x6d "
+"0x38 0xc6 0x26 0xac 0x34 0xc8 0x6a 0x01 0x87 0x24 "
+"0x42 0xda 0x82 0x1d 0x2d 0xbf 0x4e 0x2e 0x55 0x0e "
+"0x35 0xc9 0xba 0xbe 0x7e 0x1b 0x89 0x1e 0x3c 0xc5 "
+"0x0b 0x96 0x12 0xa4 0xd8 0x65 0xec 0x89 0xc8 0x60 "
+"0x21 0x00 0xc6 0xb9 0x16 0x0c 0xc1 0xb4 0xf2 0xe8 "
+"0xbf 0x72 0x2c 0xc6 0xf0 0xa9 0xa0 0x93 0x73 0x69 "
+"0xbd 0xb0 0xe2 0xd8 0xfd 0xb9 0x5a 0xf5 0xb0 0x42 "
+"0xc6 0x58 0xfd 0x94 0x62 0xef 0x93 0x73 0x14 0xc1 "
+"0x4d 0xd9 0x20 0xae 0x20 0xbb 0x95 0x2d 0x2f 0xc3";

String[] values = hex.split(" ");

for (int i=0; i<values.length; i+=2) {
int x = Integer.parseInt(values[i].replace("0x", ""), 16)
- Integer.parseInt(values[i+1].replace("0x", ""), 16);
System.out.print((char)Integer.parseInt(Integer.to HexString(x).replace("ffffff", ""), 16));
}
}

}

dennisstrehl
07.07.2006, 00:15
Sehr schön :-)
Die Codierung ist nix besonderes, nur man muss halt drauf kommen.
Die Codierung läuft wie folgt: Es wird für jedes Zeichen ein Zufallswert zwischen 0 und 255 erzeugt, der wird zum jeweiligen Zeichen addiert und beide Werte werden nacheinander ausgegeben. Das wird für jedes Zeichen gemacht, und so hat man nachher doppelt so viele Zeichen wie vorher.

Das Decodieren geht dann, indem man den Zufallswert einfach wieder vom codierten Wert abzieht. Wenn man das Programm hat, geht das dann verdammt schnell.

Ich glaube, für die nächste Stufe mach ich irgendwie was mit md5. Das bekommt ihr nie hin :-P

Thread kann geschlossen werden.

mfG