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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Reto Septiembre 2012 De Reversing
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Reto Septiembre 2012 De Reversing  (Leído 9,309 veces)
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #10 en: 14 Septiembre 2012, 14:18 pm »

Hola estoy intentado el simple_KGM , pero es muy complicado , tengo la primera parte ya pasada , es así:
1. Abrimos el simple_KGM y buscamos las apis en el olly , umm GetDlgItemInt y dos GetDlgItemText , bueno pongamos los breakpoints.

2. Coge nuestro ID, y mira si eax es 0 (eax en ese momento es el largo del nombre) , si es 0 va al chico malo,si nó, le resta 0D4h y lo guarda en la memoria [404674]

3. Coge nuestro serial y mira si eax es 0(eax en ese momento es el largo del serial),si es 0 va al chico malo, si nó, lo guarda en [404678]
4. Coge nuestro nombre y mira si eax es 4, si es mas bajo , chico malo, si nó, mira si eax es 20, si es más grande chico malo... De aquí deducimos que nuestro nombre debe tener entre 4 y 20 carácteres , ni más ni menos.Una vez hecho esto va cogiendo cada byte de nuestro nombre y le hace estas operaciones:
Código
  1. MOV EDI,EAX
  2. XOR EDX,EDX
  3. XOR ESI,ESI
  4. MOV ECX,1
  5. LOOP:
  6.       INC EDX
  7.       MOVZX EAX,BYTE PTR DS:[EDX+4042D3]
  8.       CMP EDX,EDI
  9.       XOR EDX,EDX
  10.       ADD EAX,ESI
  11.       SHL EAX,4
  12.       ADD EAX,10001
  13.       PUSH EAX                                ; /Arg1
  14.       CALL 00401283                           ; \Simple_KGM_2.00401283
  15.       ADD ESI,EAX
  16.       INC ECX
  17.       CMP ECX,20
  18. JNE LOOP
  19.  
El call que hay ahí en medio:
Código
  1. PUSH EBP                                 ; Simple_KGM_2.00401283(guessed Arg1)
  2. MOV EBP,ESP
  3. PUSH ECX
  4. MOV EAX,DWORD PTR SS:[ARG.1]
  5. MOV ECX,666
  6. CICLO:  
  7.        ADD EAX,68656865
  8.        ROR EAX,8
  9.        SUB EAX,65686568
  10.        ROL EAX,16
  11.        MOV EBX,EAX
  12.        NOT EAX
  13.        SUB EBX,EAX
  14.        ADC EAX,EBX
  15.        ROR EAX,6
  16. LOOP CICLO
  17. ADD EAX,61733376
  18. XOR EAX,76337361
  19. NOP
  20. NOP
  21. NOP
  22. NOP
  23. NOP
  24. NOP
  25. NOP
  26. AND EAX,0000FFFF
  27. SHL EAX,10
  28. MOV AX,0DEAD
  29. SUB EAX,D00EA00D
  30. POP ECX
  31. LEAVE
  32. RETN 4
  33.  
Después del loop , compara el resultado de todas las operaciones con [404674] , adivinad quien había en la posición de memoria, el valor de nuestro ID -04Dh ,con lo que si hacemos un keygen para eso tendriamos que pedir el nombre , hacer las rutinas de calculo para el ID , y sumarle 04Dh , ya que cuando lo metemos en el programa se lo resta.
Hasta ahí bien , he hecho mitad del keygen para eso, nos pide el nombre y el te calcula el ID:
Código
  1. .386 ; Hace el código compatible con el procesador 386
  2. .MODEL flat,stdcall
  3.  
  4. INCLUDE user32.inc
  5. INCLUDE kernel32.inc
  6. INCLUDE msvcrt.inc
  7. INCLUDELIB user32.lib
  8. INCLUDELIB kernel32.lib
  9. INCLUDELIB msvcrt.lib
  10. ;PARA TENER LOS BUFFERS
  11. __p__iob    PROTO C
  12.  
  13. _iobuf STRUCT
  14.    _ptr        DWORD ?
  15.    _cnt        DWORD ?
  16.    _base       DWORD ?
  17.    _flag       DWORD ?
  18.    _file       DWORD ?
  19.    _charbuf    DWORD ?
  20.    _bufsiz     DWORD ?
  21.    _tmpfname   DWORD ?
  22. _iobuf ENDS
  23.  
  24. FILE TYPEDEF _iobuf
  25.  
  26. ;PROTOTIPOS DE FUNCIONES EN C
  27. EXTRN printf:NEAR
  28. EXTRN fgets:NEAR
  29. EXTRN sscanf:NEAR
  30. EXTRN getchar:NEAR
  31. EXTRN strlen:NEAR
  32. ;PROTOTIPOS DE FUNCIONES EN ASM
  33.  
  34.  
  35.  
  36. .data ;Datos del programa
  37. INGRESA_NOMBRE BYTE "Ingresa tu nombre: ",0
  38. TU_ID_ES   BYTE "Tu ID es: %u",0Ah,0Dh,0
  39. PULSE_TECLA BYTE "Pulse intro para terminar . . .",0
  40. ;ESPECIFICADORES DE FORMATO
  41. ESPI BYTE "%d",0
  42. ESPS BYTE "%s",0
  43. ESPIU BYTE "%u",0
  44. .data?
  45. NOMBRE BYTE  20 DUP (0)
  46. ID     DWORD ?
  47. BUFFER_FGETS BYTE 20 DUP(0)
  48. stdin  DWORD ?
  49. stdout DWORD ?
  50. stderr DWORD ?
  51. .code
  52. rutinaSerial PROC
  53. PUSH EBP
  54. MOV EBP,ESP
  55. PUSH ECX
  56. MOV EAX,[EBP+8]
  57. MOV ECX,666h
  58. CICLO:
  59. ADD EAX,68656865h
  60. ROR EAX,8h
  61. SUB EAX,65686568h
  62. ROL EAX,16h
  63. MOV EBX,EAX
  64. NOT EAX
  65. SUB EBX,EAX
  66. ADC EAX,EBX
  67. ROR EAX,6h
  68. LOOP CICLO
  69. ADD EAX,61733376h
  70. XOR EAX,76337361h
  71. AND EAX,0000FFFFh
  72. SHL EAX,10h
  73. MOV AX,0DEADh
  74. SUB EAX,0D00EA00Dh
  75. POP ECX
  76. leave
  77. ret
  78.  
  79. rutinaSerial endp
  80. .code ;Código del programa
  81. main PROC
  82. ;Buffers
  83. call    __p__iob
  84.    mov     stdin,eax           ; #define stdin  (&__iob_func()[0])
  85.    add     eax,SIZEOF(FILE)
  86.    mov     stdout,eax          ; #define stdout (&__iob_func()[1])
  87.    add     eax,SIZEOF(FILE)
  88.    mov     stderr,eax          ; #define stderr (&__iob_func()[2])
  89.  
  90. ;Inicio código.
  91. push OFFSET INGRESA_NOMBRE
  92. push OFFSET ESPS
  93. call printf
  94. push stdin
  95. push 20
  96. push OFFSET BUFFER_FGETS
  97. call fgets
  98.  
  99. push OFFSET NOMBRE
  100. push OFFSET ESPS
  101. push OFFSET BUFFER_FGETS
  102. call sscanf
  103. push OFFSET NOMBRE
  104.    call strlen
  105. MOV EDI,EAX
  106. XOR EDX,EDX
  107. XOR ESI,ESI
  108. MOV ECX,1
  109. L1:
  110. INC EDX
  111. MOVZX EAX,NOMBRE[EDX-1]
  112. CMP EDX,EDI
  113. JNE L2
  114. XOR EDX,EDX
  115. L2:
  116. ADD EAX,ESI
  117. SHL EAX,4h
  118. ADD EAX,10001h
  119. PUSH EAX                              
  120. CALL rutinaSerial
  121. ADD ESI,EAX
  122. INC ECX
  123. CMP ECX,20h
  124. JNE L1
  125. add eax,0D4h
  126.  
  127. mov ID,EAX
  128. push ID
  129. push OFFSET TU_ID_ES
  130. call printf
  131. push OFFSET PULSE_TECLA
  132. push OFFSET ESPS
  133. call printf
  134. call getchar
  135. invoke ExitProcess,0
  136. ret
  137.  
  138. main endp
  139. END main
Despues , lo que hace es con wsprintf , pasa lo que hay en eax , o sea nuestro ID , a una cadena en notación hexadecimal, y seguidamente , hay una rutina en la que hacen operaciones con un valor que no es constante :(!!! , cambia , y ese valor lo cogen con lo que retorna la api , VirtualAlloc pasandole estos parámetros, pero es que siempre da un valor diferente , y para hacer un keygen como sé cual es ese valor?
Pongo las rutinas que decía:
Código
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 004011AA  |.  50            PUSH EAX                                 ; /<%08X>
  4. 004011AB  |.  68 16404000   PUSH OFFSET 00404016                     ; |Format = "%08X"
  5. 004011B0  |.  68 F4454000   PUSH OFFSET 004045F4                     ; |Buf
  6. 004011B5  |.  E8 1A010000   CALL <JMP.&user32.wsprintfA>             ; \USER32.wsprintfA
  7. 004011BA  |.  83C4 0C       ADD ESP,0C
  8. 004011BD  |.  FF35 3E404000 PUSH DWORD PTR DS:[40403E]               ; /Arg3 = 290000
  9. 004011C3  |.  6A 10         PUSH 10                                  ; |Arg2 = 10
  10. 004011C5  |.  68 F4424000   PUSH OFFSET 004042F4                     ; |Arg1 = ASCII "12345"
  11. 004011CA  |.  E8 F4020000   CALL 004014C3                            ; \Simple_KGM_2.004014C3

Y los parametros que se le pasan a la api:
Código
  1. Address   Hex dump          Command                                  Comments
  2. 00401326  |.  6A 04         PUSH 4                                   ; /Protect = PAGE_READWRITE
  3. 00401328  |.  68 00100000   PUSH 1000                                ; |AllocType = MEM_COMMIT
  4. 0040132D  |.  6A 54         PUSH 54                                  ; |Size = 84.
  5. 0040132F  |.  6A 00         PUSH 0                                   ; |Address = NULL
  6. 00401331  |.  E8 30110000   CALL <JMP.&kernel32.VirtualAlloc>        ; \KERNEL32.VirtualAlloc
  7.  
Bueno no hay problema , la cogeré con virtualprotect o algo de eso.
« Última modificación: 14 Septiembre 2012, 14:55 pm por avesudra » En línea

Regístrate en
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Reto Septiembre 2012 De Reversing
« Respuesta #11 en: 14 Septiembre 2012, 15:38 pm »

fuelVM keygenme nivel extremadamente analítico
 ,tutorial de asolot  lo cito:
http://ricardonarvaja.info/WEB/CONCURSOS%202011/CONCURSO%2012/CLS_12_11_FuelVM%20v0.1%20crackme%20by%20asOlOt.rar
datos
Name:apuromafo
serial:aFVPVLO@F@
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 563


Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #12 en: 14 Septiembre 2012, 17:11 pm »

El tutorial de asOlOt es impresionante, más la tool que programó en asm, joder yo me quedé weon cuando lo leí en su momento... Un verdadero maestro, si señor!


Saludos,
Nox.
En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
Nop+

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #13 en: 14 Septiembre 2012, 22:08 pm »

Pues yo me he lanzado a por el MusicalCrackme....

Tengo el Keygen hecho en ASM32, y es un poco bestia ponerlo entero si alguien está interesado lo posteo , pero básicamente el resumen sería este


Código
  1. 00401125   .  68 EC030000   PUSH 3EC                                
  2. 0040112A   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                
  3. 0040112D   .  E8 D8000000   CALL 0040120A     ; Aquí calcula nuestro Personal ID                      
  4. 00401132   .  8BD8          MOV EBX,EAX
  5. 00401134   .  33C0          XOR EAX,EAX
  6. 00401136   .  6A 01         PUSH 1                                  
  7. 00401138   .  6A 00         PUSH 0                                  
  8. 0040113A   .  68 ED030000   PUSH 3ED                                
  9. 0040113F   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                
  10. 00401142   .  E8 C3000000   CALL 0040120A ; Aquí calcula nuestro serial                            
  11. 00401147   .  8BC8          MOV ECX,EAX
  12. 00401149   .  E8 4DFFFFFF   CALL 0040109B       ; Aquí opera con nuestroi personal ID para ver si coincide con el serial                      
  13. 0040114E      3BC3          CMP EAX,EBX ; Los compara
  14. 00401150   .  74 0C         JE SHORT 0040115E   ; Si somos buenos salta
  15.  

Es decir coge nuestro Personal ID opera con él... coge nuestro serial opera con él..

Esta llamada calcula el serial correcto a partir de nuestro ID personal

Código
  1. 00401149   .  E8 4DFFFFFF   CALL 0040109B                            
  2. 0040114E      3BC3          CMP EAX,EBX
  3. 00401150   .  74 0C         JE SHORT 0040115E


Rutina que calcula el serial correcto

Código
  1. 0040109B  /$  83C3 4C       ADD EBX,4C       ; Le suma 4C a nuestro ID PERSONAL modificado
  2. 0040109E  |.  83C2 03       ADD EDX,3
  3. 004010A1  |.  43            INC EBX                 ; Incrementa en uno el cálculo
  4. 004010A2  |.  81C3 8B030000 ADD EBX,38B  ; Le suma 38B
  5. 004010A8  |.  03DB          ADD EBX,EBX        ; Se suma a si mismo
  6. 004010AA  |.  0FAFDA        IMUL EBX,EDX      ; Multiplica el resultado por EDX (3)
  7. 004010AD  |.  4B            DEC EBX                 ; Resta 1
  8. 004010AE  \.  C3            RETN                       ; El resultado queda en EBX


Mi ID PErosnal 1234   el serial es 13307 ... y a escuchar música ;-)


PD. muy buenos los crackmes....






En línea

Flamer


Desconectado Desconectado

Mensajes: 1.038


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Septiembre 2012 De Reversing
« Respuesta #14 en: 14 Septiembre 2012, 22:36 pm »

fuelVM keygenme nivel extremadamente analítico
 ,tutorial de asolot  lo cito:
http://ricardonarvaja.info/WEB/CONCURSOS%202011/CONCURSO%2012/CLS_12_11_FuelVM%20v0.1%20crackme%20by%20asOlOt.rar
datos
Name:apuromafo
serial:aFVPVLO@F@


uff creo que seme paso la mano con ese y no sabia que ricardo lo habia puesto como reto me disculpo por ese error


Hola Nop+ eres bueno para ser nuevo te digo por que es tu primer mensage Felisidades y sigue asi

espero seguirte viendo por aca

saludos Flamer
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #15 en: 15 Septiembre 2012, 03:09 am »

Lo siento no sé hacer el keygen del simple_KGM 2 , consigo hacer que genere mi ID a partir de mi nombre (el programa que dejé en masm arriba), pero de ahí , coge y hace operaciones raras cogiendo los Valores que devuelve VirtualAlloc , bueno ahí tienen mi registro:
nombre : avesudra
ID        : 396312436
Serial    : 76989F4C3CFD8061

PD : He mirado en crackmes.de ahora para ver que era , y el serial es un cifrado  RSA de 64 bits, ahí lo dejo
¡Un saludo!
« Última modificación: 15 Septiembre 2012, 03:20 am por avesudra » En línea

Regístrate en
Flamer


Desconectado Desconectado

Mensajes: 1.038


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Septiembre 2012 De Reversing
« Respuesta #16 en: 15 Septiembre 2012, 03:15 am »

pero el intento le hisistes es lo que cuenta para aprender

saludos sigue asi
En línea

jEUDi17

Desconectado Desconectado

Mensajes: 54


CrackSLatinoS


Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #17 en: 15 Septiembre 2012, 19:19 pm »

Cyclone CrackMe :

Tutorial :

Ya sabes, solo explicare como obtener el Hardcode :


Bueno primero analizemos Iniciemos, ingresemos cualquier numero : 787878

Obviamente nos dice "ERROR : Wrong code" pues vamos ya tenemos varios datos.

Nuestro serial (:
Chico Malo


Iniciemos el ollydbg y lo cargamos :

COMENZEMOS
------------------

Por eso el codigo es muy pequeño ...

Bueno a simple vista vemos un "CMP EAX, EBX"

Dependiendo de esto nos mostrara el mensaje Chico bueno o Malo.

Ademas, se activaran varios Flags..


Ok vamos a la direccion 401026 :   CALL scanf

Ese call lo que hace es guardar en una variable determinada "En este caso 4030BC"

o podria ser asi :

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int EAX, EBX;
  5. printf("El serial : ");
  6. scanf("%d", &EAX);  //Guarda en EAX lo ingresado..
  7.  
  8.  


Seguidamente el programa añade 8 a ESP  despues mueve "a EAX " nuestro serial : 787878

Recuerda que tiene que ser un valor entero (int).

Despues hace un ROR EAX, 11 ; Rota 11 veces EAX.

Código
  1. // seguimos el code
  2.  
  3. int i = 0;
  4.  
  5. for (i = 0; i < 11; i++) ;
  6.  


Despues hace un mov EBX, 554F0000 ;

EBX = 554F0000

DESPUES la comparacion para encontrar el serial hacemos lo siguiente :

Clic derecho en CMP EAX, EBX y le damos assemble :

y escribimos

ROL ; Como dijo avesudra la inversa de ROR

ROL EBX, 11 ;

Ejecutamos la linea con F8 y miramos el registro EBX.

Nos como resultado : 0000AA9E , pasado a decimal : 43678 -> nuestro querido hardcode.

Espero que me entiendan un poco, no soy de tutoriales :P

Saludos !!!




« Última modificación: 15 Septiembre 2012, 19:22 pm por jEUDi17 » En línea

En paz me acostaré y asimismo dormiré; Porque sólo tú, Señor, me haces vivir confiado.

FaQuiVer

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: Reto Septiembre 2012 De Reversing
« Respuesta #18 en: 16 Septiembre 2012, 00:02 am »

 :silbar:

Keygen para keygen musical
es el crackme mas fácil, el tute ya lo hizo Nop+

Dim Serie, ID As Long
ID = Int(9999 * Rnd + 1)
TexTID.Text = ID
Serie = ID + 984
Serie = Serie * 2
Serie = Serie * 3
Serie = Serie - 1
TexTSerie.Text = Serie

En línea

Flamer


Desconectado Desconectado

Mensajes: 1.038


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Septiembre 2012 De Reversing
« Respuesta #19 en: 16 Septiembre 2012, 04:48 am »

hola FaQuiVer bienvenido En hora buena Felisidades por el logro asi como alos demas que an partisipado

Nota: como la ven si les pongo los fasiles con el algoritmo mas larguito bueno

Lo siento no sé hacer el keygen del simple_KGM 2 , consigo hacer que genere mi ID a partir de mi nombre (el programa que dejé en masm arriba), pero de ahí , coge y hace operaciones raras cogiendo los Valores que devuelve VirtualAlloc , bueno ahí tienen mi registro:
nombre : avesudra
ID        : 396312436
Serial    : 76989F4C3CFD8061

PD : He mirado en crackmes.de ahora para ver que era , y el serial es un cifrado  RSA de 64 bits, ahí lo dejo
¡Un saludo!


Hola avesudra lee estado hechando un ojo sabes como escribir en el campo ID ala primera o si alguno sabe

En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
II Reto Forense Digital Sudamericano - Perú Chavín de Huantar 2012
Seguridad
nprosperu 1 2,362 Último mensaje 13 Julio 2012, 19:18 pm
por r32
Reto Octubre 2012 de reversing « 1 2 3 »
Ingeniería Inversa
Flamer 25 9,080 Último mensaje 31 Octubre 2012, 00:42 am
por Flamer
Reto Noviembre 2012 de reversing « 1 2 »
Ingeniería Inversa
Flamer 17 6,124 Último mensaje 26 Noviembre 2012, 02:08 am
por p0rny
Reto Enero 2013 De reversing
Ingeniería Inversa
Flamer 2 2,028 Último mensaje 30 Enero 2013, 03:48 am
por Flamer
Reto Mayo 2013 De reversing « 1 2 »
Ingeniería Inversa
Flamer 15 6,418 Último mensaje 30 Mayo 2013, 16:48 pm
por Flamer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines