Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .:UND3R:.

#1941
CrackMe 1 by kaiser1313

Autor: kaiser1313
Nombre: CrackMe 1
Fecha: 30 de mayo de 2009
Tamaño: 715 KB
Compilador y/o Packer: Borland C++
Objetivos:Conseguir la clave correcta.
Dificultad: 1-2 (1-10).

Intentemos algo simple BP en la API:
MessageBoxA:


Una vez cargado el crackme, intentemos con un serial falso:


Vemos que la API es llamada desde: 00401AD6:


Si subimos un poco, notaremos el salto, por lo que la comprobación podría estar un poco más arriba:


Coloquemos BP en las CALL para saber si son esas las que verifican si el serial introducido es correcto o no:


Le damos RUN, e intentamos nuevamente con el mismo serial, una vez detenido se detiene en la primera call a la cual le pusimos un bp y si miramos en la PILA notaremos algo interesante:


Si introduzco la string que está arriba de mi serial falso, obtendremos el serial verdadero en este caso 1117 pero si abrimos nuevamente el crackme nos aparece que el serial es incorrecto, será algún RND?, pongamos un bp nuevamente en la call:


Notaremos que ha variado el serial correcto. por lo que intentaremos que cuando nos aparezca el mensaje de error nos muestre el serial correcto,dirijámonos al salto decisivo:


lleguemos hasta donde se comienza a pushear los valores para llamar a la API MessageBoxA (Mensaje de clave incorrecta):


estando detenido en 00401AC5, miremos el stack para ver si aun existe el serial correcto:


Intentemos modificar el PUSH del TITLE del MessageBoxA por un PUSH [esp-50](Debe ser en el Title y no en el Mensaje, debido a que después del OP code se coloca un NOP, lo que haría que no se pudiera llamar correctamente a la API sin hacer injerto):


Guardamos los cambios e introducimos un serial falso:


Notaremos que el serial correcto en esta ocasión es 390
#1942
Cita de: Tinkipinki en  1 Septiembre 2011, 11:09 AM
Esto me suena.......

Felicitaciones por el tutorial, asi vamos aprendiendo.
Saludos



jejeje  :silbar:
#1943
Crack Me 0.2 by Red Mx
Autor: Red Mx
Nombre: Crack Me 0.2
Fecha: 26 de mayo de 2009
Tamaño: 8,44 KB
Compilador y/o Packer: MEW 1.2 / Visual Basic (código nativo)
Objetivos: Conseguir la clave correcta.
Dificultad: 1-2 (1-10).

Realizamos un análisis con RDG Packer Detector:


Notamos que está comprimido con MEW 1.2 intentemos descomprimirlo abramos el crackme con OllyDBG, Nos avisa que está comprimido:


Intentemos buscar el OEP con el método de memory breakpoint on execution, esto se puede hacer a través de de un pluguin o ollydbg parcheado 5:


Presionamos M y colocamos un Memory breakpoint on access en la sección CODE
*En realidad es un MBPX por el pluguin:


Le damos RUN, esperamos un poco y se detiene en 00401210:


removamos el análisis del código y nos quedará:


Dumpeamos con ollydump:


Vamos a reparar la IAT, Nos vamos search->all intermodular call's y buscamos una que apunte a la IAT, en este caso rtcMsgBox:


Le damos doble click y nos aparecerá lo siguiente:


ahora Follow in dump->Memory Address y buscamos el Inicio y el final en la IAT en este caso:
Inicio:00401000
Final:004010C0
Largo:C0

colocamos los datos en ImportREC:


No hay ninguna IAT redireccionada :


presionamos fix dump, seleccionamos el archivo dumpeado previamente por Ollydump, intentemos ver si se ha desempaquetado correctamente:



Funciona de maravilla, ahora intentemos colocar un serial:


Antes de presionar OK nos dirigimos a la sección code y colocamos un Memory Break point on execution (Con el pluguins), ahora le damos OK y se detendrá a continuación:

004025C0   .  816C24 04 3B0>SUB DWORD PTR SS:[ESP+4],3B
004025C8   .  E9 A3050000   JMP dmp_.00402B70

Si seguimos traceando llegaremos hasta el siguiente OP code:


en el cual deberemos cambiar el FLAG S para que salte, debido a que notoriamente se puede visualizar una string que no es conveniente pushear

Si seguimos traceando una vez modificado el flag s llegaremos a un call encargado de devolver la fecha:

en mi caso 01/09/2011, luego de esto elimina los /:


si seguimos traceando pasando por la concatenación de dos series de string muy llamativas y un conjunto de otras operaciones llegaremos a la siguiente call:


si entramos con F7 a la call llegaremos a la siguiente call encargado de revertir la string:


Luego de seguir traceando llegaremos a una comparación a través de __vbaVarTstEq:


Entremos a la call con F7 llegando hasta el push 0, una vez detenidos ahí hacemos click derecho en EAX y presionamos follow in stack y veremos lo siguiente:


esto es comparado con edx (follow in stack) en mi caso UND3R es decir compara:
5642345645648784564156116456456110290104164214614321777407216721791241671010

con

UND3R

__vbaVarTstEq devuelve en EAX un número distinto de 0 si las dos string comparadas son iguales, notaremos que el resultado se dirige a ESI y luego se realiza un TEST SI,SI luego la comparación final JE SHORT en la cual si __vbaVarTstEq devuelve 0 en EAX JE saltará


Probemos con la string comparada:



pero, ¿para qué el crackme obtuvo la fecha?

Recordamos que la fecha en mi caso era: 01/09/2011, luego se eliminaron los /
01092011 luego se concatenó con las string llamativas y luego se revirtió la string:

5642345645648784564156116456456110290104164214614321777407216721791241671010

por lo cual lo que está con rojo debería ser la variable del serial del crackme
#1944
Zen Marketing
Página:http://plandemarketing.info/  
Descarga:http://plandemarketing.info/descarga-aforcod
Autor:UND3R

Conociendo a el programa:
Abrimos Zen Marketing y nos aparece lo siguiente:


Si introducimos un serial falso u verdadero nos pedirá el segundo serial:


Si erramos nos mostrará el siguiente mensaje:


si intentamos nuevamente y volvemos a fallar nos mostrará lo siguiente:


Crackeando:
Atachamos el programa:
File->Attach


Intentemos buscar referencias de texto (*primera imagen):


Se detendrá por primera vez en:


por lo que no nos sirve intentemos de nuevo con find next o Control+L:



Si bajamos un poco veremos lo siguiente:


Sin saber programar notaremos que clave1+clave2=ClaveCompleta y ClaveCompleta=9131174656

por lo que intentemos que de alguna forma clave1+clave2=9131174656

probemos dividiendo 9131174656 en 2:


nos da como resultado: 4565587328
por lo que 4565587328+4565587328=9131174656

una sencilla fórmula, probemos si funcionó:


ya está registrado, por lo que en resumen la suma de los dos serial siempre debe ser: 9131174656

esto demuestra la vulnerabilidad que poseen los ejecutables en memoria virtual

Saludos a todos aquellos que se tomaron el tiempo de leer este tutorial
#1945
No entendí como aplicarlo, mira me explico

00427b5 cmp eax,ebx
............ jz 00457b4
00457b4
...
...
..

como sabe si saltó o no?, se guarda en $RESULT?

encontré esto, pero no entendí como aplicarlo a mi caso
CitarTEST dest,src
-------------
Performs a logical AND of the two operands updating the flags register without saving the result.
(Modifies Flags: CF OF PF SF ZF (AF undefined))
#1946
Cita de: karmany en  1 Septiembre 2011, 00:17 AM
Si es en el físico puedes hacerlo con mi programa Add PE bytes. Estoy programando la nueva versión, te dejo la vieja:

http://foro.elhacker.net/programacion_general/add_pe_bytes_v011-t272401.0.html

Estaba mirándolo me agradó :D, está bueno eso si le quitaría el messagebox, es algo incómodo, cámbialo por un about y el nombre de la nueva sección jeje, espero la nueva versión
Saludos
#1947
como puedo hacer para que el script sepa si con un je jne ja,etc saltó o no?

Saludos
#1948
Ingeniería Inversa / Re: duda con VirtualAlloc
31 Agosto 2011, 17:40 PM
0044A181      68 00400000   PUSH 4000
0044A186      68 00800200   PUSH 28000
0044A18B      68 00001400   PUSH 140000
0044A190      E8 DFF93B7C   CALL kernel32.VirtualFree
0044A195      6A 04         PUSH 4
0044A197      68 00200000   PUSH 2000
0044A19C      68 00C00300   PUSH 3C000
0044A1A1      68 00001400   PUSH 140000
0044A1A6      E8 36F93B7C   CALL kernel32.VirtualAlloc
0044A1AB      6A 04         PUSH 4
0044A1AD      68 00100000   PUSH 1000
0044A1B2      68 00C00300   PUSH 3C000
0044A1B7      68 00001400   PUSH 140000
0044A1BC      E8 20F93B7C   CALL kernel32.VirtualAlloc
#1949
0044A181      68 00400000   PUSH 4000
0044A186      68 00800200   PUSH 28000
0044A18B      68 00001400   PUSH 140000
0044A190      E8 DFF93B7C   CALL kernel32.VirtualFree
0044A195      6A 04         PUSH 4
0044A197      68 00200000   PUSH 2000
0044A19C      68 00C00300   PUSH 3C000
0044A1A1      68 00001400   PUSH 140000
0044A1A6      E8 36F93B7C   CALL kernel32.VirtualAlloc
0044A1AB      6A 04         PUSH 4
0044A1AD      68 00100000   PUSH 1000
0044A1B2      68 00C00300   PUSH 3C000
0044A1B7      68 00001400   PUSH 140000
0044A1BC      E8 20F93B7C   CALL kernel32.VirtualAlloc
#1950
Hola a todos, bueno en memoria tengo lo siguiente:
Address size
140000 9000
240000 6000

Por lo que entre 149000 y 240000 hay address faltantes como
150000
160000

con que API se puede agregar?

Saludos