[BUUCTF] REVERSE —— [FlareOn3] Challenge1

[FlareOn3] Challenge1

annexe

étape

  1. Inspection de routine, programme 32 bits, pas de shell
    Insérez la description de l'image ici
  2. Exécutez le programme pour voir la situation générale
    Insérez la description de l'image ici
  3. Ida 32 bits est chargé. La
    Insérez la description de l'image ici
    logique est très simple. Dans un premier temps, entrons le mot de passe et existons NumberOfBytesWrittendedans. Ensuite, nous avons NumberOfBytesWritteneffectué l'opération sur la 15ème ligne pour obtenir str1. Quand str1=x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q, la sortie est correcte!
  4. Le programme sub_401260 ()
    Insérez la description de l'image ici
    prend tous les trois chiffres , puis commence le calcul à partir de la ligne 39. En ajoutant 0x3F, il est facile de deviner qu'il s'agit d'un cryptage base64, mais il est un peu différent du cryptage base64 ordinaire. Sa table de mots de passe a été modifiée .
    Insérez la description de l'image ici
    La table des mots de passe utilisée pour le cryptage ici est "ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789 + /" La
    table des mots de passe cryptés en base64 normale est "ABCDEFGHIJKLMNOPQRST123WXYZabcdefghijklmnopxy"
    La dernière lettre est écrite dans la lettre frontz .

Écrivez un script de déchiffrement pour trouver les données cryptées en base64 d'origine, puis décodez-les en base64

import base64

encoded_flag = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"

#ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/
#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
_list = list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")

_flag = ""

for i in encoded_flag:
    if (ord(i) <= ord('W') and ord(i) >= ord('A')) or (ord(i) <= ord('w') and ord(i) >= ord('a')):
        _flag += chr(ord(i) + 3)
    elif i == 'X':
        _flag += 'C'
    elif i == 'Y':
        _flag += 'B'
    elif i == 'Z':
        _flag += 'A'
    elif i == 'x':
        _flag += 'c'
    elif i == 'y':
        _flag += 'b'
    elif i == 'z':
        _flag += 'a'
    else:
        _flag += i

print(_flag)

print(base64.b64decode(_flag).decode())

Insérez la description de l'image ici
flag{[email protected]}

Pour ceux qui ne sont pas très familiers avec le cryptage base64, vous pouvez lire cet article

Je suppose que tu aimes

Origine blog.csdn.net/mcmuyanga/article/details/113594334
conseillé
Classement