BUUCTF: misterioso

Dirección del título: https://buuoj.cn/challenges#Mysterious

Inserte la descripción de la imagen aquí
El archivo adjunto al título es un exe, ingresemos algo al ejecutar, intente ingresar algunos caracteres, no hay respuesta

Inserte la descripción de la imagen aquí
Abra con el Bloc de notas para verificar si el exe es de 64 bits o de 32 bits

Inserte la descripción de la imagen aquí
PE...L...Es una función de archivo exe de 32 bits, use ida para abrir y Shift+F12ver caracteres

Inserte la descripción de la imagen aquí
Haga clic well donepara encontrar una cadena similar a la bandera.
Inserte la descripción de la imagen aquí
Cuando Functions Windowencuentre esta dirección, haga clic para F5desmontar y ver el código pseudo-C

Inserte la descripción de la imagen aquí

int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4)
{
    
    
  char v5; // [esp+50h] [ebp-310h]
  CHAR Text[4]; // [esp+154h] [ebp-20Ch]
  char v7; // [esp+159h] [ebp-207h]
  __int16 v8; // [esp+255h] [ebp-10Bh]
  char v9; // [esp+257h] [ebp-109h]
  int v10; // [esp+258h] [ebp-108h]
  CHAR String; // [esp+25Ch] [ebp-104h]
  char v12; // [esp+25Fh] [ebp-101h]
  char v13; // [esp+260h] [ebp-100h]
  char v14; // [esp+261h] [ebp-FFh]

  memset(&String, 0, 0x104u);
  v10 = 0;
  if ( a2 == 16 )
  {
    
    
    DestroyWindow(hWnd);
    PostQuitMessage(0);
  }
  else if ( a2 == 273 )
  {
    
    
    if ( a3 == 1000 )
    {
    
    
      GetDlgItemTextA(hWnd, 1002, &String, 260);
      strlen(&String);
      if ( strlen(&String) > 6 )
        ExitProcess(0);
      v10 = atoi(&String) + 1;
      if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )
      {
    
    
        strcpy(Text, "flag");
        memset(&v7, 0, 0xFCu);
        v8 = 0;
        v9 = 0;
        _itoa(v10, &v5, 10);
        strcat(Text, "{");
        strcat(Text, &v5);
        strcat(Text, "_");
        strcat(Text, "Buff3r_0v3rf|0w");
        strcat(Text, "}");
        MessageBoxA(0, Text, "well done", 0);
      }
      SetTimer(hWnd, 1u, 0x3E8u, TimerFunc);
    }
    if ( a3 == 1001 )
      KillTimer(hWnd, 1u);
  }
  return 0;
}

Satisfacer

if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )

De entrada no puede exceder la longitud del carácter 6, o al final del programa, v10se atoi()convierte en un número entero y el número de función +1, a continuación cumple con las condiciones v10debe 122, v12, v13, v14carácter ASCII correspondiente a xyz, la entrada

122xyz

Puedes conseguir la bandera

Inserte la descripción de la imagen aquí
La bandera también se puede obtener a partir del código pseudo-C de acuerdo con el empalme del programa

flag{
    
    123_Buff3r_0v3rf|0w}

Supongo que te gusta

Origin blog.csdn.net/mochu7777777/article/details/109146153
Recomendado
Clasificación