[FlareOn3] Challenge1
étape
- Inspection de routine, programme 32 bits, pas de shell
- Exécutez le programme pour voir la situation générale
- Ida 32 bits est chargé. La
logique est très simple. Dans un premier temps, entrons le mot de passe et existonsNumberOfBytesWritten
dedans. Ensuite, nous avonsNumberOfBytesWritten
effectué l'opération sur la 15ème ligne pour obtenir str1. Quandstr1=x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q
, la sortie est correcte! - Le programme sub_401260 ()
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 .
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())
flag{[email protected]}
Pour ceux qui ne sont pas très familiers avec le cryptage base64, vous pouvez lire cet article