Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 4

Todo programa de Visual Basic tiene una pantalla principal, que por defecto se le

suele llamar Form1

Las pantallas pueden tener nombre propio o dejarlas como Form1, Form2, Form3...

VB Decompiler lite nos separa lo que es el aspecto gráfico del código fuente.

Crackme16.exe, nos está mostrando, que solo tiene una pantalla (Form1), y en la
parte de código (Code).

Hemos visualizado el contenido de los distintos eventos que form1 tiene, y en el


Command1_click, observamos que aparece una cadena de texto cuyo contenido es
"APRIL-2020". Justo debajo de ella, aparece una funcion llamada vbaStrCmp

vbaStrCmp es una función que compara 2 cadenas, y devolverá un valor que indica si
son iguales o no.

Para hacer esto bien, con Ingeniería Inversa de la buena, usamos x64dbg

Nos lo descarmos desde la página oficial o desde brigthspace (recordad que tenéis
una versión antigua y la última, por si acaso no viérais todo el contenido) y os
recomiendo que lo dejéis como "portable" (es decir, sin hacer instalación, se
descomprime y en la ruta de \release\, echando sobre el icono de 32 o de 64 bits,
abrirá el ejecutable que queramos estudiar.

Si echamos sobre el icono de Detect it easy el crackme16.exe, y nos indica que es


de 32bits, pues echamos el mismo ejecutable sobre el icono de 32 bits de
x64dbg.exe, que se llama x32dbg.exe y se encuentra en \release\.
O bien sobre el acceso directo que podéis tener en el escritorio, o incluso sobre
la aplicación abierta.

##########################
Aclaración sobre esta dll.
MSVBVM50.DLL significa

MS = MicroSoft
VB = Visual Basic
VM = Virtual Machine
50,40,60, los dos numeros que aparecen después es la versión.

##########################

Una vez abierto el programa que queremos examinar con x32dbg, la primera vez
necesitamos configurar un poco la aplicación.

Menu Opciones-> Apariencia-> pestaña Fuente. Y cambiamos las más "urgentes"

Desensamblado la pongo en 22

Por defecto, x32dbg, cualquier programa que abre, te lo presenta

Si veis que la posición de memoria (offset) es un número que empieza por 77,
corresponde al sistema operativo.
Te lo pausa (lo indica abajo) y se queda esperando qué hacer.

menu Opciones -> Preferencias


Pestaña de eventos:
Nos viene marcada la de "Breakpoint del sistema " (System Breakpoint). La dejo
puesta

"Breakpoint en el punto de entrada". La dejo puesta

Quito el de "User TLS CallBacks"

Pestaña Excepciones:
botón Ignore Range
Inicio: 00000000 (0, 8 veces)
Fin: FFFFFFFF ( F, 8 veces)
Aceptar y posteriormente, Guardar

Punto de entrada de CrackMe16.exe (dado por Detect it easy) es 00401168


Y dándole al 4º icono por la izquierda de la barra de herramientas, "Ejecutar",
salta a el Punto de Entrada de la aplicación.
Ambas direcciones deben ser la misma.

Ha salido la "nag screen", pulsamos ejecutar de nuevo y sale el programa "final"

Le damos al 2º icono de la barra de herramientas, y reiniciamos la ejecución.

El punto de entrada al sistema está en la dirección 77091C43.

jmp = abreviatura de "jump"


jmp salta siempre.
y con la línea roja que nos muestra junto a las direcciones de memoria, nos dice el
sitio de destino.
Para avanzar línea a línea, usamos el 8º icono, o pulsamos la tecla F8.

Pulsamos el 4º botón de la barra de herramientas para que se nos vaya a la zona del
programa en sí (y que tiene un breakpoint)

Estoy en la dirección 00401168


Pulso F8
Se va al a dirección 0040116D (la siguiente) y nos encontramos con un "call"
Todos los call se devuelven a la instrucción siguiente a ese call, por lo que
establezco un breakpoint (punto de ruptura) haciendo click sobre el medio punto
gris que se encuentra al lado izquierdo de la dirección de memoria.

(si lo quitáis, aparece en verde como deshabilitado y no se detendrá en él, pero


deja como un "histórico" que ahçi había un punto de interrupción).

Para meterme dentro de un call, lo hacemos con F7 (step into)


(ha saltado a 00401162)
Le hago F8
(ha saltado a 7404A1BF -> esto no el programa, sino el sistema)
Le hago que se ejecute -> 4º icono de la barra de herramientas
Cuando ejecuta, muestra la "nag screen" y no ha vuelto a la instrucción siguiente
al call que habíamos marcado como punto de interrupción.
Pulsamos Aceptar en la "nag screen"
El programa continua su ejecución y no vuelve a la siguiente instrucción donde
habíamos puest el punto de interrupción.

En el programa, me voy al menu de "Program", opción Exit, y sale del programa.

Pulsamos el 2º icono de la barra de herramientas, y nos recarga el programa como


estaba al principio.

Pulsamos el 4º botón que ejecuta la aplicación o pulsamos F9

CPU es la pestaña donde normalmente trabajaremos. Es el volcado del programa en la


CPU.

Log es la pestaña donde os muestra todos los procesos que tienen lugar cuando
ejecutas la aplicación

Notas es para guardar cualquier anotación que precises.

Breakpoint nos muestra todos los puntos de interrupción que existan en el programa

Mapa de memoria: refleja todo lo que está pasando en la memoria.

Pila de llamadas: nos muestra la distintas llamadas que el programa hace al sistema
y al propio programa. Solo nos puede mostrar lo que ya ha ocurrido.

Le damos a F9 (Ejecutar) una vez


Nos muestra la Nag Screen

Voy a pausar la ejecución del programa


(5º icono de la barra de herramientas) o bien F12)
Le he dado 3 veces, porque mi cpu no ha sido hasta entonces cuando se ha dado
cuenta que debía pausar la ejecución del programa.

Vemos que en el listado de direcciones, nos muestra todo lo que ha ocurrido


incluida la llamada del programa en la dirección 00402D03

Derecho de ratón en la línea donde aparece la dirección de memoria 00402D03 ->


Seguir Desde (Follow From)

Reinicio la ejecución.
2º botón de la barra de herramientas.

Reinicio de nuevo la ejecución (para contar los F9)

(pongo un punto de interrupción justo en el call que muestra la nag screen, que es
la dirección 00402CFE)

1) Punto de entrada al sistema -> F9


2) punto de entrada a la aplicación -> F9
3) Se ha detenido justo en el momento de presentarme la nag screen

Con el botón derecho del ratón -> Ensamblar (o pulsamos barra espaciadora)

nop (no operation)

En el recuadro para ensamblar que nos aparece, tecleamos nop

Si "nopeamos" una instrucción, siempre resulta interesante que "Mantener tamaño" y


"Rellenar con NOP's" estén activadas.

Le damos a Aceptar
Una vez hecho, salimos con Cancelar

Menu Archivo -> Parchear Archivo.


En la ventana que nos sale, Aplicar el parche.

Lo llamo Crackme16.exe sin nagscreen.exe

Lo cierro todo, y lo intento ejecutar.


Y no pasa nada.

Lo vuelvo a abrir
F9 -> saltará al punto de interrupción del programa
F9 -> saltará al punto de interrupción donde aparecía la nag screen
Debemos volver a nopear
Derecho de ratón sobre esa instrucción,
nop
aceptar
y luego cancelar
Avanzamos línea a línea con F8
hasta que encontramos una línea que tiene un jne (00402D53).

le cambiamos el jne por un jmp que es un salto no condicional (salta sí o sí).

Archivo->Parchear programa
Aplicar el Parche
Lo grabo como:
crackme16 sin nag y sin terminar.exe

También podría gustarte