Noveno desafío de ESET

En esta edición de los desafíos de ESET tendremos que encontrar la forma de saltar las restricciones impuestas por una condición de tipo statement.

Del mismo modo que en la vida diaria, en un programa es necesario tomar decisiones basadas en ciertas condiciones y actuar en consecuencia. Los lenguajes de programacion tienen una sentencia básica denominada if (si condicional) que realiza una comparación sobre el contenido de una variable y permite decidir de acuerdo a la misma.

Si el resultado de la comparación es verdadero (true) se ejecuta la sentencia que sigue a continuación de if y, en caso contrario, falso (false), se salta dicha sentencia. La sentencia puede consistir a su vez, en un conjunto de instrucciones agrupadas en un bloque.

En el siguiente ejemplo, si el número del boleto que hemos adquirido coincide con el número aparecido en el sorteo, nos informan que hemos obtenido un premio:

if (numeroBoleto==numeroSorteo)
print (“Has ganado”);

Ahora, al ejecutar este programa (MD5: b5c8e8cf83d538af9187e53d4bba3421), debemos “adivinar” el número (constante numérica) que se nos solicita y se debe dejar la respuesta en los comentarios junto a la explicación de la forma en que se obtuvo dicho número. La primera persona en responder correctamente se llevará una Licencia del Antivirus de ESET.

¡Estaremos atentos a sus respuestas!

Juan Sacco
Analista de Malware

Autor , ESET

  • Karcrack

    0x539 = 1337

    Como lo he sacado?
    Abriendo el ejecutable con el OllyDbg y poniendo un BreakPoint en la llamada a ‘scanf’, he visto que la siguiente instruccion es un ‘cmp’ que compara el buffer que se puso en ‘scanf’ con 0x539… en decimal 1337…

    Saludos

  • Ares

    1337

  • el codigo es el 1337. Obvio! =)

    http://perfilweb.com.ar/eset/Obvio.png <– miren

  • Franco

    El número es 1337 (no sé cómo no se me ocurrió intentar primero con ese :P), usé ollydbg.

    CMP DWORD PTR SS:[EBP-4],539

    0x539 == 1337

  • V0 = & Vfffffffc;
    *esp = “%d”;
    eax = scanf();
    if(Vfffffffc == 0x539) {
    V0 = Vfffffffc;
    *esp = “Ganaste!! Ingresa el codigo para reclamar tu premio.n”;
    eax = printf();

    Solución (Hex a Dec): 1337

  • Paulo

    Viva el OlliDebug, de no ser porque ya sé que alguien debió de haber respondido lo hiciese. Saludos.

  • edwin

    No soy muy conocedor del asm pero con el editor hexadecimal me parece que no tiene solucion; tambien intente con el notepad++ y obtuve alguna lectura que me induce a pensar en esta conclusion; pero insisto que no soy muy ducho. Saludos

    • Hola Edwin,

      Si se puede realizar sin problemas. Hay que ir un poco más allá de la edición hexadecimal. Sigue intentando que el objetivo es aprender entre todos.

      Cristian

  • El numero constante es el 1337

    La manera de extraerlo es hacerle un traceo con herramientas de ingenieria inversa y en la direccion de memoria 00401320 se hace la comparacion…

    00401320 CMP DWORD PTR[ebp-4],539

    En donde DWORD PTR[ebp-4] es el numero que ingresamos y 539h = 1337 decimal

    Saludos,

  • Ginecologode15a25

    Hola! La solución es el famoso número kaker “1337”.
    Acá compara el número que ingresamos con el valor hexadecimal 539 = 1337 en decimal.

    A este input lo logré con el fuzzer CUDA.

    00401320 |. 817D FC 39050>CMP DWORD PTR SS:[EBP-4],539 ; |
    00401327 |. 75 13 JNZ SHORT desafio-.0040133C ; |
    00401329 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; |
    0040132C |. 894424 04 MOV DWORD PTR SS:[ESP+4],EAX ; |
    00401330 |. C70424 283040>MOV DWORD PTR SS:[ESP],desafio-.00403028 ; |ASCII “Ganaste!! Ingresa el codigo para reclamar tu premio.

    00401337 |. E8 0C080000 CALL ; printf

    Saludos a JKako!

  • AR

    Ja, el siempre original 1337. Probablemente haya llegado muy tarde igual.

  • Alejandro

    Por cierto, utilizé ollydbg, miré un poco y vi que había una comparación bastante obvia :)

  • Thor

    El número ganador es el: 1337

    Procedimiento:
    Ejecuté el programa, una vez que está a la espera abrí OllyDbg e hice Attach sobre ese proceso. Una vez “attacheado” (jaja), introduje un número al azar y di unas cuantas veces a Ctrl-F9 (Execute till return) hasta llegar a la instrucción de retorno comprendida en la sección de código del programa.

    Un par de instrucciones mas arriba se ve la frase de acertaste y la comparación con ese número.

    Un saludo!

  • Ariel

    Lo abri con Ollydbg, busque la cadena Piensa un, despues busque un salto y encontre la instruccion compare CMP DWORD PTR SS:[EBP-4],539, donde se comparaba al numero ingresado con el 539 (hexa) lo transforme a decimal, y listo.

  • pepe

    00401320 cmp [ebp+var_4], 539h

    1337 en decimal.

  • Ares

    Vaya, no me había dado cuenta de que había que explicar como llegar hasta la solución.

    Se el ejecutable con Ollydbg y se ejecuta. Cuando se vea la linea de comandos con la frase: “Piensa un número del 1 al 10000” se pausa la ejecución. Se abre la pila de llamadas y se salta a la llamada a scanf. Justo debajo se ve una comparación a 539h (1337 en decimal) que si es igual saltará el mensaje “Ganaste!!. Ingresa el código para reclamar tu premio.”

  • Esta vez juro, pero re juro que no lo entiendo.
    De cualquier manera voy a seguir intentando un rato más. Ojala alguien de la respuesta rápido :)

  • .text:00401301 mov [esp+18h+var_18], offset aPiensaUnNumero ; “nPiensa un numero del 1 al 10000: ”
    .text:00401308 call printf
    .text:0040130D lea eax, [ebp+var_4]
    .text:00401310 mov [esp+18h+var_14], eax
    .text:00401314 mov [esp+18h+var_18], offset aD ; “%d”
    .text:0040131B call scanf
    .text:00401320 cmp [ebp+var_4], 539h
    .text:00401327 jnz short locret_40133C
    .text:00401329 mov eax, [ebp+var_4]
    .text:0040132C mov [esp+18h+var_14], eax
    .text:00401330 mov [esp+18h+var_18], offset aGanasteIngresa ; “Ganaste!! Ingresa el codigo para reclam”…
    .text:00401337 call printf

    Repito….
    .text:00401320 cmp [ebp+var_4], 539h

    Bueno y donde esta mi licencia de ESET??

    Saludos.

  • Pingback: ESET Latinoamérica – Laboratorio » Blog Archive » Solución al noveno desafío de ESET()

Síguenos