Abra el enlace
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,
siempre le enviaremos un error.
De hecho, se puede ver en ollydbg, ¡
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
. Después de hacer clic en ella, esta función sub_4011D0
F5 se descompila.
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.
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
Obtener
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,
entonces puede enviarlo jajajajaja