[PYTHON] Erstellen Sie einen Base64-Decoder

Erstellen Sie einen Base64-Decoder

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 ...

Überblick

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.

Wie Base64 funktioniert

Kodieren

Überprüfen Sie den Base64-Codierungsprozess grob. Weitere Informationen finden Sie auf anderen Websites.

  1. Konvertieren Sie die Zeichenfolge (ASCII), die Sie ändern möchten, in binär (binär).
  2. Teilen Sie die Binärdatei in 6 Bits
  3. Beim Teilen beträgt der letzte Wert weniger als 6 Bit. Fügen Sie also 0 hinzu, sodass er zu 6 Bit wird.
  4. Konvertieren Sie 6 Bit in Zeichen mithilfe der Konvertierungstabelle
  5. Fügen Sie "=" hinzu, sodass die Anzahl der Zeichen ein Vielfaches von 4 ist, um in Base64 jeweils 4 Bit auszugeben.
  6. Vervollständigung der Base64-Zeichenfolge !!

Dekodieren

Das Dekodieren ist einfach, wenn Sie den Kodierungsmechanismus verstehen! Befolgen Sie grundsätzlich einfach das umgekehrte Verfahren!

  1. Löschen Sie das hinzugefügte "="
  1. Verwenden Sie die Konvertierungstabelle, um Zeichen in Binärzeichen zu konvertieren und sie zu verbinden.
  1. Teilen Sie die Binärdatei in 8 Bits und löschen Sie die in Codierung 3 hinzugefügten Nullen.
  1. Konvertieren Sie Binärbits in ASCII
01001000 → H
01101111 → o
01100111 → g
01100101 → e
01001000 → H
01101111 → o
01100111 → g
01100101 → e
  1. Die Dekodierung ist abgeschlossen!

Versuchen Sie zu programmieren

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()

Wie benutzt man

$ 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

Zusammenfassung

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

Verweise

Was ist base64? ?? Ich habe es implementiert, um --qiita zu verstehen https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4

Recommended Posts

Erstellen Sie einen Base64-Decoder
Lass uns ein Squashspiel machen
Machen Sie einen Funktionsdekorateur
Erstellen Sie eine Distanzmatrix
Ich mache ein Passwort!
Machen Sie einen Nyan-Knopf
Mach ein Spiel im Tetris-Stil!
Machen wir einen Discord Bot.
Erstellen Sie ein Blueqat-Backend ~ Teil 1
Erstellen Sie ein Blueqat-Backend ~ Teil 2
Machen Sie einen LINE BOT (Chat)
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Machen Sie Responder zu einem Daemon (Dienst)
Machen Sie ein Feuer mit kdeplot
Erstellen Sie einen Berechnungsbohrdruck
Machen wir eine Remote-Rumba [Hardware]
Wie erstelle ich eine japanisch-englische Übersetzung?
Machen Sie eine Santa-Kennung aus einem Santa-Bild
Lassen Sie uns eine Remote-Rumba erstellen [Software]
Machen Sie eine Tweet-Box für Pepper
Lassen Sie uns eine GUI mit Python erstellen.
Machen Sie einen Sound mit Jupyter Notebook
Machen wir einen Spot Sale Service 2
Wie man einen lockeren Bot macht
Machen wir einen Blockbruch mit wxPython
Machen wir einen Spot Sale Service 1
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Machen Sie die C-Kompilierung etwas einfacher
Python / Machen Sie ein Diktat aus einer Liste.
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Wie erstelle ich einen Crawler?
Erstellen Sie mit PySide einen Modelliterator
Machen Sie einen Vorhanggenerator mit Blender
Machen wir einen Spot Sale Service 3
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
[Python] Wie man eine Klasse iterierbar macht
Machen wir einen Jupyter-Kernel
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
Machen Sie einen seltenen Gacha-Simulator mit Flask
Machen Sie Jupyter Notebook zu einem Dienst unter CentOS
Erstellen Sie eine Notebook-Pipeline mit Kedro + Papermill
Machen Sie Unity Accelerator zu einem Dienst unter Linux
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Machen Sie ein Zeichnungsquiz mit kivy + PyTorch
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Machst du so etwas wie eine Rakete?
Machen Sie eine Logikschaltung mit Perceptron (Multilayer Perceptron)
Lassen Sie uns mit flask-babel eine mehrsprachige Site erstellen
Erstellen Sie eine GIF-Animation mit Ordnerüberwachung
Ich habe eine Web-API erstellt