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
UND3R
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 :)