elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Solucion al Crackme 2 de alfa por Flamer
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Solucion al Crackme 2 de alfa por Flamer  (Leído 343 veces)
Flamer


Desconectado Desconectado

Mensajes: 1.068


crack, crack y mas crack...


Ver Perfil WWW
Solucion al Crackme 2 de alfa por Flamer
« en: 19 Septiembre 2025, 18:50 pm »

Hola amigos hoy les traigo la solucion de un crackme muy sencillo es el crackme 2 de alfa bueno empesemos primero lo abrimos con el debugger x64dbg y lo ejecutamos para ver si se ejecuta normal y todo parece bien pero vemos que nos pide usuario y contraseña...asi que ingreso como nombre polo y como serial 999



asi que pasamos a mira las string estas



y vemos el cartelito correcto asi que no vamos a esa zona y vemos lo siguiente



asi que ponemos un breakpoint asi como en la imagen y lo ejecutamos y se detiene en dicha zona ponemos los mismos datos polo y 999 como serial y vemos que en la linea 00401383 suma 999 que en hexadecimal es 3E7 con FFFFFE0C y despues en la linea siguiente dicho valor es pasado al registo eax y nos da como resultado 1F3



asi que me voy a la calculadora y sumo 3E7 + FFFFFE0C   y me da como resultado esto



asi que ya sabemos de donde agarra ese valor....acto seguido suma edx por si mismo

0040138F  add edx,edx 

y nos da como resultado 3E6 para despues sumar eax + edx y el resultado es almacenado en ecx, donde eax es igual a 1F3 y edx 3E6

00401391 lea ecx,dword ptr ds:[eax+edx]

y nos da como resultado de ecx sera igual a 5D9 para despues compararlo con 1E240 que en decimal es 123456, bueno ahora sepreguntaran que haremos para encontrar el resultado asi que dividimos 1E240 entre 3 y nos da A0C0 asi que lo pondremos asi 10000A0C0 - FFFFFE0C y es igual a A2B4 que en decimal es 41652



asi que ponemos ese serial y nos arroja esto



bueno eso es todo saludos Flamer

En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

EdePC
Moderador Global
***
Conectado Conectado

Mensajes: 2.245



Ver Perfil
Re: Solucion al Crackme 2 de alfa por Flamer
« Respuesta #1 en: Ayer a las 04:01 »

Bueno, yo también me voy a animar a explicarlo de forma detallada para refrescar la parte de representaciones de números negativos, que supongo yo es el objetivo del crackme

0. El crackme es: https://ns2.elhacker.net/crackmes/Crackme2alfa.zip

Código
  1. 00401372 | 8D45 AC                  | lea eax,dword ptr ss:[ebp-54]           |
  2. 00401375 | 50                       | push eax                                |
  3. 00401376 | 68 62124000              | push crackme.401262                     | 401262:"%i"
  4. 0040137B | E8 88010000              | call <JMP.&scanf>                       |
  5. 00401380 | 83C4 10                  | add esp,10                              |
  6. 00401383 | 8145 AC 0CFEFFFF         | add dword ptr ss:[ebp-54],FFFFFE0C      |
  7. 0040138A | 8B45 AC                  | mov eax,dword ptr ss:[ebp-54]           |
  8. 0040138D | 89C2                     | mov edx,eax                             | edx:EntryPoint
  9. 0040138F | 01D2                     | add edx,edx                             | edx:EntryPoint
  10. 00401391 | 8D0C10                   | lea ecx,dword ptr ds:[eax+edx]          | ecx:EntryPoint
  11. 00401394 | 894D AC                  | mov dword ptr ss:[ebp-54],ecx           | ecx:EntryPoint
  12. 00401397 | 817D AC 40E20100         | cmp dword ptr ss:[ebp-54],1E240         |
  13. 0040139E | 75 16                    | jne crackme.4013B6                      |
  14. 004013A0 | 83C4 F8                  | add esp,FFFFFFF8                        |
  15. 004013A3 | 8D45 B0                  | lea eax,dword ptr ss:[ebp-50]           |
  16. 004013A6 | 50                       | push eax                                |
  17. 004013A7 | 68 70124000              | push <crackme.sub_401270>               | 401270:"\n\t\tGracias por haberte registrado %s"
  18. 004013AC | E8 6F010000              | call <JMP.&printf>                      |

1. Pone en EAX la dirección que utilizará para guardar el serial ( [ebp-54] )

2. Pasa el segundo argumento de la funcíón "scanf" al stack, que será la dirección donde guardará el serial, recordar que EAX contiene la dirección [ebp-54] alias "la dirección donde guarda el serial"
3. Pasa el primer argumento de la función "scanf" al stack, este es un puntero a una String que tiene el formato del dato a recoger, en este caso es "%i", es decir, traerá el serial introducido como un número entero tal cual
4. Llama a la función "scanf" ( scanf("%i",[ebp-54]) ) para recoger el serial introducido, recordar que por los parámetros dados anteriormente, será un número entero y se guardará en la dirección [ebp-54]

5. Acomoda el Stack, no no interesa

6. Toma el contenido de [ebp-54] (el serial) y lo "suma" (add) con 0xFFFFFE0C, el resultado se guarda en el primero operando ( [ebp-54] ). Puse "suma" entre comillas porque en realidad resta, recodar que la representación numérica está restringida al tamaño especificado del operando, es decir, se está haciendo una operación con el DWORD 0xFFFFFE0C que tiene 4 bytes de tamaño, entonces solo permite números positivos que van desde 0x00000001 al 0x7FFFFFFF y los negativos van desde 0x80000000 a 0xFFFFFFFF. El número 0xFFFFFE0C está dentro de la representación de número negativos y equivale a -500 en decimal, hay que realizar la operación correctamente si se usará tal cual en la calculadora:



- De momento tenemos: [ebp-54] = serial + 0xFFFFFE0C

7. Pone en EAX el contenido de [ebp-54] que ahora contiene el resultado de la operación anterior:
EAX =      [ebp-54]
EAX = (serial + 0xFFFFFE0C)


8. Pone en EDX lo que hay en EAX, ahora tenemos tanto en EAX como en EDX el resultado anterior:
EDX =        EAX
EDX = (serial + 0xFFFFFE0C)


9. Suma EDX con EDX y guarda el resultado en EDX:
EDX =        EDX            +        EDX
EDX = (serial + 0xFFFFFE0C) + (serial + 0xFFFFFE0C)


10. Pone en ECX el resultado de sumar EAX y EDX:
ECX =        EAX            +                        EDX
ECX = (serial + 0xFFFFFE0C) + ( (serial + 0xFFFFFE0C) + (serial + 0xFFFFFE0C) )


11. Pone en [ebp-54] el resultado anterior
[ebp-54] = ECX
[ebp-54] = (serial + 0xFFFFFE0C) + ( (serial + 0xFFFFFE0C) + (serial + 0xFFFFFE0C) )


12. Compara [ebp-54] con 0x1E240
13. Si son iguales no salta y se prepara para mostrar el mensaje del "chico bueno"

- Entonces tenemos que hacer sean iguales para que no salte, solo hay que hacer la ecuación y despejarla como en el colegio:

                  0x1E240 = [ebp-54]
                   0x1E240 = (serial + 0xFFFFFE0C) + ( (serial + 0xFFFFFE0C) + (serial + 0xFFFFFE0C) )
                   0x1E240 = (serial + 0xFFFFFE0C) + 2 * (serial + 0xFFFFFE0C)
                   0x1E240 = 3 * (serial + 0xFFFFFE0C)
               0x1E240 / 3 = serial + 0xFFFFFE0C
(0x1E240 / 3) - 0xFFFFFE0C = serial
       0xA0C0 - 0xFFFFFE0C = serial
                    0xA2B4 = serial
                     41652 = serial


- O si lo desean trabajar todo en decimal

           123456 = (serial + (-500)) + ( (serial + (-500)) + (serial + (-500)) )
            123456 = (serial - 500) + ( (serial - 500)) + (serial - 500) )
            123456 = (serial - 500) + 2 * (serial - 500)
            123456 = 3 * (serial - 500)
      (123456 / 3) = serial - 500
(123456 / 3) + 500 = serial
       41152 + 500 = serial
             41652 = serial


---
Referencias:

TEORIA Assembler por CAOS REPTANTE, en la página 5 está el capítulo de Sistemas de Representación, que habla de los números negativos en Hexadecimal:
https://mega.nz/file/JgY0gApa#3zKqcAJm9yrFMzuqqGgdGsVfub5gPsafZhAdHC01L2Q

Informática Básica (2010), en la página 117 "Números con signo" habla de forma detallada la representación de números negativos:
https://repositori.uji.es/bitstreams/9f608796-c3c6-46b0-aa2c-c10da81d685c/download
« Última modificación: Ayer a las 04:18 por EdePC » En línea

Flamer


Desconectado Desconectado

Mensajes: 1.068


crack, crack y mas crack...


Ver Perfil WWW
Re: Solucion al Crackme 2 de alfa por Flamer
« Respuesta #2 en: Ayer a las 17:17 »

Muy bien explicado amigo ;-) ;-) ;-)

saludos 
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crackme Nº1 De Flamer « 1 2 »
Ingeniería Inversa
Flamer 14 11,618 Último mensaje 13 Octubre 2011, 02:52 am
por Flamer
Crackme 1 de Flamer
Ingeniería Inversa
Tinkipinki 2 3,538 Último mensaje 23 Octubre 2011, 06:35 am
por Tinkipinki
Crackme Vol. 4 Por Flamer
Ingeniería Inversa
Flamer 7 6,689 Último mensaje 7 Diciembre 2011, 23:59 pm
por chEEtos
Crackme 5 De Flamer
Ingeniería Inversa
Flamer 7 6,744 Último mensaje 14 Abril 2012, 01:21 am
por $Edu$
Solucion Crackme #2 De Bocvk por Flamer
Ingeniería Inversa
Flamer 0 1,058 Último mensaje 19 Agosto 2025, 00:47 am
por Flamer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines