Ein bestimmter Crackme kam mit einer Zeichenfolge heraus, die mit etwas namens custom_base64 codiert ist ... Um die Flagge zu erhalten, müssen Sie sie dekodieren, um die ursprüngliche Zeichenfolge zu finden. Was ist custom_base64 ... Um die Antwort zu finden, gingen wir ins Amazonas-Hinterland ...
Es gibt ein Wörterbuch, in dem 000000 bis 111111 im Mechanismus von Base64 durch Zeichen ersetzt werden. In normalem Base64 wird in der angegebenen Reihenfolge ein Wörterbuch verwendet, auf das "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /" angewendet wird. Der Inhalt der Funktion custom_base64 wurde durch das angegebene Wörterbuch ersetzt. [Artikel zur Implementierung von Base64] In diesem Artikel wird der Decoder in Python unter Bezugnahme auf 1 implementiert.
Überprüfen Sie den Base64-Codierungsprozess grob. Weitere Informationen finden Sie auf anderen Websites.
Das Dekodieren ist einfach, wenn Sie den Kodierungsmechanismus verstehen! Befolgen Sie grundsätzlich einfach das umgekehrte Verfahren!
SG9nZUhvZ2U=
→ SG9nZUhvZ2U
SG9nZUhvZ2U
→ 010010 000110 111101 100111 011001 010100 100001 101111 011001 110110 010100
01001000 01101111 01100111 01100101 01001000 01101111 01100111 01100101 00
01001000 → H
01101111 → o
01100111 → g
01100101 → e
01001000 → H
01101111 → o
01100111 → g
01100101 → e
custom_base64_decoder.py
import sys
import argparse
BYTE_SIZE = 8
# 000000 ->Eine Funktion, die Zeichen für Zeichen bis 111111 eine Liste vom Typ Wörterbuch erstellt
def makeDict(base64Dict_seed):
dictionary = {}
for i in range(0, 64):
dictionary[format(i, '06b')] = base64Dict_seed[i]
return dictionary
#Eine Funktion, die die durch n Zeichen getrennten Zeichenfolgen auflistet
def split(string, n):
split_list = []
for i in range(0, len(string), n):
split_list.append(string[i:i+n])
return split_list
#Wenn die Zeichenfolge keine n Zeichen enthält, sind es n Zeichen`c`Hinzufügen
def fillBlank(s, n, c):
mod = len(s) % n
if mod == 0:
return s
else:
margin = n - mod
return s + c * margin
#Wenn Sie einen Wörterbuchwert übergeben, wird der Wörterbuchschlüssel zurückgegeben
def getValue(key, items):
for v in items.items():
# print(v[1])
if v[1] == key:
# print(v)
return v[0]
return ''
def main():
# -Sie können ein benutzerdefiniertes Wörterbuch eingeben, indem Sie k hinzufügen
parser = argparse.ArgumentParser(
description='custom Base64 Decoder')
parser.add_argument('-k', '--key', help="Use custom Seed to encrypt in base64 ", \
default="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
parser.add_argument('text', help='base text')
args = parser.parse_args()
# 0.Erstelle ein Wörterbuch
base64Dict = makeDict(args.key)
# 1. '='Entfernen
text = args.text.replace("=", '')
binStr = ""
# 2.Konvertieren Sie Zeichen mithilfe einer Konvertierungstabelle in Binärzeichen und verbinden Sie sie.
for i in text:
binStr += getValue(i, base64Dict)
# 3.Teilen Sie die Binärdatei in 8 Bits, codieren Sie 3.Da die von hinzugefügten Nullen übrig bleiben, löschen Sie sie
splitCount = 8
s = split(binStr, splitCount)
if (len(s[-1]) != 8):
s.pop(-1)
# 4.Konvertieren Sie das Binärbit in ASCII
result =""
for c in s:
print(c + " → " + chr(int(c, 2)))
result += chr(int(c, 2))
print(result)
if __name__ == "__main__":
main()
$ python3 customBase64Decoder.py <Base64-Text>
$ python3 customBase64Decoder.py -k <Persoenliches Woerterbuch> <Base64-Text>
$ python3 customBase64Decoder.py SG9nZUhvZ2U=
$ python3 customBase64Decoder.py -k xEPOKnvADqeG0m1VkZ47CM653jrtbzLsTc2ypoYUSWJ9ludQig+awf8XF/RNHBhI 4vBUjCcQj8C=
HogeHoge
Base64 habe ich voll verstanden. Mit diesem können Sie ein Original Base64 erstellen und eine geheime Kommunikation herstellen, Sie haben es geschafft
Beispielcode finden Sie auf GitHub
Was ist base64? ?? Ich habe es implementiert, um --qiita zu verstehen https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4
Recommended Posts