Introducción al cracking en P-Code parte 2En 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.exeAbrimos 
WKTVBDE y vemos lo siguiente:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/1.jpg)
Seleccionamos 
File->Open y elegimos 
clave2.exe si cargó sin ningún problema nos debería aparecer lo siguiente:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/2.jpg)
Seleccionamos 
Action->Run y Nos aparecerán dos alertas, estas deben ser aceptadas rapidamente ya que el debugger crashea:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/3.jpg)
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/4.jpg)
Si todo ha salido bien, Nos aparecerá 
clave2 y debajo de el podremos ver el debugger sin ningún 
P-Code:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/5.jpg)
Intentemos colocar un 
nombre y un 
serial:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/6.jpg)
Ahora presionemos registrar y veremos a 
WKTVBDE cargado con los P-Code:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/7.jpg)
En la parte 
superior a la derecha, contamos con el 
stack:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/8.jpg)
Debajo del 
stack contamos con un menú muy util:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/9.jpg)
Memory dump->ALT+M(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/10.jpg)
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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/11.jpg)
Si nos fijamos en el address 
00401CE0 encontraremos un 
BranchF que es equivalente a 
1Csi nos dirigimos a 
Memory dump y buscamos 
00401CE0:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/12.jpg)
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!:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/13.jpg)
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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/14.jpg)
API->Ctrl+B:Nos muestra una lista de 
API'S de 
Visual Basic, dándonos la posibilidad de colocar BP haciendo doble click:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/15.jpg)
*Para quitarlo debemos hacer 
4 click's
Opcodes->Ctrl+O:Nos muestra una lista de 
P-Codes al igual que 
APIOnExecution->Ctrl+E:Nos muestra la lista de 
BP que ya están puestos y nos dá la posibilidad de Colocarlos también:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/16.jpg)
Para agregar algún 
BP se debe insertar el address en la parte inferior y luego presionar 
ADDTrace Commands:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/17.jpg)
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 returnTrace 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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/18.jpg)
Ya familiarizados con 
WKTVBDE continuamos reverseando, vamos avanzando con 
F8 hasta encontrarnos en el siguiente P-Code:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/19.jpg)
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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/20.jpg)
Si continuamos traceando hasta 
401D01:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/21.jpg)
Notaremos una comprobación entre 
5 y 
6, si miramos en el 
stack veremos de donde provienen:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/22.jpg)
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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/23.jpg)
Si nos fijamos al no saltar nos mostrará un mensaje que podemos ver en el address 
00401D21Por 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 
6Por 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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/24.jpg)
Presionamos 
F8 y veremos que saltará 
00401D3F(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/25.jpg)
*Si quisieramos saltar a otro lugar, podemos utilizar una excelente herramienta que trae P32Dasm llamada Jump calculator
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/26.jpg)
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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/27.jpg)
Si seguimos traceando una gran serie de P-Code's nos detendremos en el siguiente salto:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/28.jpg)
Notaremos que si no salta nos llevará a un mensaje de que el serial es incorrecto, intentemos modificar el salto:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/29.jpg)
Ahora presionemos 
Go!->F5(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/30.jpg)
II-CrackMe ChronosCargamos el crackme desde 
WKTVBDE(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/31.jpg)
También lo cargamos desde exdec y buscamos referencias, una vez encontrada buscamos el primer Branch desde abajo hacia arriba:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/32.jpg)
Ahora introducimos un serial cualquiera y traceamos hasta llegar a 
402B08, luego lo cambiamos por 
1D y presionamos 
F5 o 
Go!:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/33.jpg)
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/34.jpg)
III-nags1Para 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:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/35.jpg)
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/36.jpg)
Cargamos nags1 con exedec:
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/37.jpg)
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(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/38.jpg)
(http://r00t-pssw.webcindario.com/images/Crack/P-Code%202/39.jpg)
Si damos 
RUN F9, notaremos que la nags ha desaparecido
			 
			
			
				Muy bien trabajados ambos tutoriales. Los he guardado en mi HD y los he añadido a tutoriales.
Gran trabajo.
Gracias por compartir.
			
			
			
				felicidades, cuando llegues al tutorial 4o 5 me avisas para enviarte el crackme que tengo ;)
vas super bien :)