Die Webseite verweist auf einen netcat-Befehl
nc mercury.picoctf.net 35652
Die Ausführung der obigen Anweisung ergibt (auszugsweise)
Schnell kommt der Verdacht auf, dass es sich hier um Ascii-Werte handeln könnte.
Ein kleines Script zur Übersetzung
#! /usr/bin/python import sys flag = "" for i in sys.argv[1:]: flag += chr(int(i)) print(flag)
Das Script wird für alle ausführbar gemacht mit
chmod ugo+x translate
Es wird eine Textdatei enc und ein kleines Script gegeben
enc ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])
Die Datei enc ist eine UTF-8 codierte Textdatei ohne Zeilenterminierung, wie aus dem file-Befehl ersichtlich wird.
Die Datei enthält chinesische Schriftzeichen.
UTF-8 ist ein multibyte Encoding, dass Schriftzeichen verschiedener Kulturen eine unterschiedliche Länge zuweist. Der Gedanke liegt nahe, dass das Script zur Verschlüsselung benutzt wurde. In dem Script wird die Flag in Blöcke von zwei nacheinanderfolgenden Buchstaben unterteilt, von denen der erste um 1 Byte geshiftet wird und auf den sich ergebenden Wert der Wert des zweiten Buchstaben aufaddiert wird. Es gilt also dieses rückgängig zu machen. Dies wird von dem folgenden Script geleistet.
with open("enc") as file: encrypted=file.read() flag = "" for char in encrypted: dchar1 = chr(ord(char) >> 8) dchar2 = chr(ord(char) & 0x00ff) flag += dchar1 flag += dchar2 print(flag)