Banco de preguntas CTF> Experiméntelo> Esta pregunta no es simple (sin palabras, quiero crear un poco de suspenso para ti, ¡oye! Ve directamente a la pregunta)

Abra el enlace
Inserte la descripción de la imagen aquí
y descargue el paquete comprimido para descomprimirlo. El
problema requiere encontrar el código de registro con el nombre de usuario hola. Cuando
corremos el problema,
Inserte la descripción de la imagen aquí
siempre le enviaremos un error.
De hecho, se puede ver en ollydbg, ¡
Inserte la descripción de la imagen aquí
pero esta pregunta sigue siendo un análisis estático! ! !
De acuerdo con CrackeMe 2011 # 2 en IDA,
puede buscar la cadena para encontrarlo = it
Inserte la descripción de la imagen aquí
. Después de hacer clic en ella, esta función sub_4011D0
Inserte la descripción de la imagen aquí
F5 se descompila.
Inserte la descripción de la imagen aquí

Los cuatro parámetros en la función GetDlgItemText:

El primero es que el identificador API debe ser manejado por el identificador. Si está en MFC, este elemento no se puede escribir. El valor predeterminado es este. El
segundo es el ID, es decir, el ID del control que desea obtener. El
tercero es el valor TEXT. Primero defina una cadena para obtener el valor. El
cuarto es la función de la longitud máxima del texto
: esta función obtiene el texto o título relacionado con el control en el cuadro de diálogo.

函数原型:UINT GetDlgltemText(HWND hDlg,int nlDDlltem,LPTSTR IpString int nMazCount);
这个函数主要是读取 hello 这个传入的用户名 

Lo anterior no es importante. El siguiente
lstrcat es una función: la función agrega la cadena lpString2 a otra cadena lpString1.

strcpy, abreviatura de copia de cadena.
strcpy es una función de biblioteca estándar en el lenguaje C. strcpy copia la cadena que contiene el terminador '\ 0' en otro espacio de direcciones, y el tipo de valor de retorno es char
.
* *

Conocer el significado general de la función y luego analizar el problema.

Inserte la descripción de la imagen aquí
A través del análisis, podemos saber que este código atravesará cada carácter del nombre de usuario ingresado por el usuario, multiplicará el número de serie de cada carácter (a partir de 0) y el cuadrado del código ASCII de este carácter, y luego agregará el número de serie como un todo , La suma obtenida continúa siendo 0x42, y finalmente agrega 33 al resultado, y luego lo convierte a código ASCII, y luego conecta el resultado anterior a la cadena 'Happy @' para formar el código de registro

Luego escribimos el guión para completar

Inserte la descripción de la imagen aquí
Obtener
Inserte la descripción de la imagen aquí

username = "Hello"
counter = 0;
password = "Happy@"
for i in username:
    password = password + chr((counter + counter * ord(i) * ord(i)) % 0x42 + 33)
    counter = counter + 1
print(password)

Enviado y encontrado correcto,
Inserte la descripción de la imagen aquí
entonces puede enviarlo jajajajaja
Inserte la descripción de la imagen aquí

218 artículos originales publicados · Me gusta 309 · Visita 290,000+

Supongo que te gusta

Origin blog.csdn.net/qq_42777804/article/details/100053120
Recomendado
Clasificación