[Tutorial]Introducción al cracking en P-Code parte 2

Iniciado por .:UND3R:., 8 Octubre 2011, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

Introducción al cracking en P-Code parte 2

En esta segunda parte le daremos énfasis al programa WKTVBDE, realizaremos una serie de crackmes de manera sencilla y aprenderemos a nopear en P-Code

I-Clave2.exe

Abrimos WKTVBDE y vemos lo siguiente:


Seleccionamos File->Open y elegimos clave2.exe si cargó sin ningún problema nos debería aparecer lo siguiente:


Seleccionamos Action->Run y Nos aparecerán dos alertas, estas deben ser aceptadas rapidamente ya que el debugger crashea:




Si todo ha salido bien, Nos aparecerá clave2 y debajo de el podremos ver el debugger sin ningún P-Code:


Intentemos colocar un nombre y un serial:


Ahora presionemos registrar y veremos a WKTVBDE cargado con los P-Code:


En la parte superior a la derecha, contamos con el stack:


Debajo del stack contamos con un menú muy util:


Memory dump->ALT+M


En esta parte del programa podremos localizar P-codes y modificarlos de manera muy cómoda,Por ejemplo veamos en el dessembler algunos P-codes:


Si nos fijamos en el address 00401CE0 encontraremos un BranchF que es equivalente a 1C
si nos dirigimos a Memory dump y buscamos 00401CE0:


En el costado izquierdo podemos ver los valores hexadecimales que se encuentran a partir de 00401CE0, si hacemos doble click en 1C podremos modificarlo en tiempo de ejecución presionando Patch Now!:


Otra forma un poco más rápida es hacer click derecho en un P-Code ubicado en el dessembler y seleccionar "Modify current opcode". esto nos llevará a Memory dump pero ya apuntando al address del P-Code.

String Refs: Nos muestras las referencias de textos que hay en el programa debuggeado:


API->Ctrl+B:Nos muestra una lista de API'S de Visual Basic, dándonos la posibilidad de colocar BP haciendo doble click:


*Para quitarlo debemos hacer 4 click's

Opcodes->Ctrl+O:Nos muestra una lista de P-Codes al igual que API

OnExecution->Ctrl+E:Nos muestra la lista de BP que ya están puestos y nos dá la posibilidad de Colocarlos también:


Para agregar algún BP se debe insertar el address en la parte inferior y luego presionar ADD

Trace Commands:


Como su nombre lo dice nos muestra los comandos que tenemos para tracear
Step Trace cumple el rol de F7 en OllyDBG
Trace Ret cumple el rol de Execute till return
Trace Over cumple el rol de F8 en OllyDBG
Go! cumple el rol de F9 en OllyDBG
Trace X nos da la posibilidad de tracear un número de P-Codes determinados

en la parte inferior podemos encontrar "Analize BranchX" este nos mostrará la lista de BranchT y BranchF que posee el programa a debuggear:


Ya familiarizados con WKTVBDE continuamos reverseando, vamos avanzando con F8 hasta encontrarnos en el siguiente P-Code:


Este Opcode se encarga obtener el serial introducido, a continuación encontramos 6C:
6C    5620 0B33 2          Push#4 [arg]

Encargado de pushear el serial, podemos corroborarlo si nos dirijimos en el dump al address a pushar:


Si continuamos traceando hasta 401D01:

Notaremos una comprobación entre 5 y 6, si miramos en el stack veremos de donde provienen:


Si continuamos traceando hasta 401D08 nos encontraremos con un BranchF=1C, WKTVBDE nos muestra al lado de él si saltará o no, en este caso NO:


Si nos fijamos al no saltar nos mostrará un mensaje que podemos ver en el address 00401D21

Por lo que deducimos que la anterior comparación fue el número de caracteres del nombre introducido con el mínimo permitido UND3R=5 con 6

Por lo que intentaremos modificar el salto para evitar la alerta, hacemos click derecho->Modify current opcode y cambiamos 1C por 1D que es el salto opuesto:


Presionamos F8 y veremos que saltará 00401D3F


*Si quisieramos saltar a otro lugar, podemos utilizar una excelente herramienta que trae P32Dasm llamada Jump calculator


Desgraciadamente P32Dasm trabaja con Offset Raw por lo que podría confundir de alguna forma. Para utilizarla debemos escribir el address en donde se encuentra el salto (Raw) y a continuación hacia que address saltará, en el costado izquierdo podremos seleccionar el tipo de salto.

Seguimos traceando, aquí toma nuestro nombre y lo pone en minúsculas:


Si seguimos traceando una gran serie de P-Code's nos detendremos en el siguiente salto:


Notaremos que si no salta nos llevará a un mensaje de que el serial es incorrecto, intentemos modificar el salto:


Ahora presionemos Go!->F5


II-CrackMe Chronos

Cargamos el crackme desde WKTVBDE


También lo cargamos desde exdec y buscamos referencias, una vez encontrada buscamos el primer Branch desde abajo hacia arriba:


Ahora introducimos un serial cualquiera y traceamos hasta llegar a 402B08, luego lo cambiamos por 1D y presionamos F5 o Go!:



III-nags1

Para eliminar una nag en algunos casos al igual que los serial debemos modificar los Branch, o en otros casos se debemos Nopear un P-Code, en el segundo caso no se pueden eliminar dejando un vacio por lo que siempre se debe reemplazar por otro P-Code, siempre y cuando, el otro ocupe el mismo espacio (número de parámetros)

Veamos un ejemplo a continuación:

Iniciamos nags1 para visualizar el nag a eliminar:



Cargamos nags1 con exedec:


Notaremos que es un rtcMsgBox ubicado en 401A2D. Vamos desde OllyDBG al address:
Veremos un P-Code con 4 bytes de parámetro, cambiemoslo por un push 0=05 00 00 00 00




Si damos RUN F9, notaremos que la nags ha desaparecido










UND3R

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

karmany

Muy bien trabajados ambos tutoriales. Los he guardado en mi HD y los he añadido a tutoriales.

Gran trabajo.
Gracias por compartir.

.:UND3R:.

Cita de: karmany en 10 Octubre 2011, 21:05 PM
Muy bien trabajados ambos tutoriales. Los he guardado en mi HD y los he añadido a tutoriales.

Gran trabajo.
Gracias por compartir.

Gracias a ti karmany, Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

jackgris


apuromafo CLS

felicidades, cuando llegues al tutorial 4o 5 me avisas para enviarte el crackme que tengo ;)

vas super bien :)