[FlareOn3] Challenge1
paso
- Inspección de rutina, programa de 32 bits, sin shell
- Ejecute el programa para ver la situación general.
- Se carga ida de 32 bits. La
lógica es muy simple. Primero, ingresemos la contraseña y existamos enNumberOfBytesWritten
ella. Luego realizamosNumberOfBytesWritten
la operación en la línea 15 para obtener str1. ¡Cuandostr1=x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q
, la salida es correcta! - El programa sub_401260 ()
toma cada tres dígitos y luego comienza el cálculo desde la línea 39. Al agregar 0x3F, es fácil adivinar que es un cifrado base64, pero es un poco diferente del cifrado base64 normal. Su tabla de contraseñas ha sido modificada .
La tabla de contraseñas que se utiliza para el cifrado aquí es "ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789 + /" La
tabla de contraseñas cifradas en base64 normal es "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh0
.
Escriba un script de descifrado para encontrar los datos cifrados en base64 originales, y luego decodifíquelos 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]}
Para aquellos que no están muy familiarizados con el cifrado base64, pueden leer este artículo.