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:.

#1641
Cita de: apuromafo en  7 Octubre 2011, 21:59 PM
creo que idealmente deberia ser un toppic aparte, pero pcode es una forma antigua de codificar, muchos por el año 2003 y 2004, protegieron cosas asi y terminaron crackeadas

a lo mas habia un packer para pcode que alguien cre , pero haciendo aleatorio ciertos bytes con ciertas dudas que rompiera el codigo


pero en general, lo mejor es siempre confiar a no pasar el codigo de fuente a otro


por lo demas el tute de Under , encuentro que esta bien, ya si sigues como serie, en algun dia te enviare un crackme que alguna vez resolvi en pcode, pero que esta lleno de antidebug y anti tool, y no es reconocido por casi ningun p-code como exec ni el otro que es de pcode, solo vtk...lo reconoce..y olly claramente se ve todo..

saludos Apuromafo

Espero el p-code a ver si lo adjuntamos en las otras partes, saludos
#1643
Cita de: $Edu$ en  7 Octubre 2011, 19:32 PM
A que te refieres con P-Code en vb under?

Y gracias raul, yo pensaba que si :/ muchas veces he leido aca en el foro que recomiendan decompilar un programa para ver como funcionaba :/

es cuando compilas en VB tienes dos opciones que es nativo o P-Code el nativo es más facil de crackear el P-Code no puedes ver una introducción que publiqué hace poco para que notes que es muy diferente el crackeo

Saludos

tal como comenta raul es verdad algunas estructuras las decompila por así decirlo de manera más entendible pero todo está en asm por lo general, prueba VB reformer un decompilador o VB watch que subí el programa en Programación visual Basic

Saludos
#1644
efectivamente, de todas formas quizás hay más botnet, si tienes dudas no dudes en preguntar, esperamos verte seguido. Saludos
#1645
Introducción al cracking de P-Code

Referencia:Capitulo 29 "Introducción al cracking desde 0" por Ricardo Narvaja

Siempre cuando realizamos un previo análisis del ejecutable que nos vamos a enfrentar, cuando sabemos que es un Visual Basic compilado en P-Code intentamos aludirlo
ya que toman su tiempo crackearlo, por eso el motivo de esta introducción, en esta primera parte nos enfocaremos en el capítulo 29 de Ricardo Narvaja, en la segunda entrega nos enfocaremos con más crackmes y empezaremos a utilizar el fomoso WKTVBDE.

Herramientas:
-WKTVBDE
-OllyDbg
-P32Dasm
-exdec

I-¿Qué es P-Code?
Cuando compilados un programa con VB, este nos da la posibilidad de elegir el tipo de compilado diferenciando entre código NATIVO y P-CODE:
el código nativo tiene la gran ventaja que ejecutan el código en la sección code del programa permitiendo esto que sea más "fácil" lograr saltar la seguridad, por otro lado el
P-CODE no posee código de ejecución dentro de la sección code. solo posee una serie de códigos llamados P-Code que son interpretados y ejecutados por la dll de Visual Basic, haciéndonos una tarea más difícil.

II-¿Como saber si es un P-Code?
Los P-Code tienen una grán característica y es el uso de la API: MethCallEngine

Cargamos Clave1 con OllyDBG:


Si subimos un poco veremos que se utiliza la API:


Otra forma de saber que es un P-Code, es el mal análisis de código que realiza OllyDBG a diferencia de un native, si bajamos un poco lo podremos notar:


III-Analizando P-Code con OllyDBG
Para analizar un P-Code bajo OllyDBG debemos usar paralelamente exdec o P32Dasm, estos programas se encargan de encontrar la lista de P-Codes de forma automática. La idea es entender como trabajan estos tipos de programas:

Como sabemos los programas compilados en P-Code no ejecutan su código en la sección code solo executan comandos P-Code's que son interpretados por la dll de Visual Basic por lo que nosotros nos basaremos de eso,encontrar los P-Code de manera manual.

Cargamos clave1.exe en OllyDBG y colocamos un BP en la API MethCallEngine:


Iniciamos el programa con F9 y veremos lo siguiente:


Introducimos un serial cualquiera:


Vemos que se detiene en el BP:


Presionamos Alt+M y colocamos un Memory breakpoint on access en la sección code


Presionamos F9 hasta que se detenga en la siguiente instrucción:

MOV AL,BYTE PTR DS:[ESI]


En este lugar es donde la dll lee el primer P-Code, si miramos arriba del dump veremos de donde proviene:



Comienzan en: 00401BD0, si nos dirigimos ahí desde el dump veremos los P-Code's y sus parámetros:



Presionemos F7,y EAX tomará el valor del primer P-Code:



luego si presionamos F7 nuevamente aumenta ESI, esto lo hace para que ESI apunte a los parámetros del P-Code 04:


Desgraciadamente no existe una lista de P-Code's oficiales pero de todas formas adjunto una.

Para hacernos una idea de que va hacer el programa buscamos el P-Code 04 en la lista:

04    567B 0B8E 2 1 2      Push arg

Osea lo que hará será pushear su argumento,veamos si esto es correcto, luego de INC ESI realiza un JMP:


Presionamos F7 y llegamos aca:


veremos el siguiente comando:MOVSX EAX,WORD PTR DS:[ESI]

"Copies the value of the source operand to the destination register
with the sign extended."

lo que hará será colocar el parámetro de ESI en EAX considerando el signo negativo:



Luego suma EAX con EBP pero EAX por causa del MOVSX quedó en negativo será una resta: FFFFFF74h equivale a -140 decimal(para corroborar se debe hacer doble click en EAX), si 140 lo pasamos a hexadecimal,nos da: 8C por lo que en resumen realizará lo siguiente -8C+0012F4E0:



luego de eso realiza un PUSH EAX:



con eso concluye el P-Code 04 luego de eso realiza un XOR EAX,EAX para limpiar EAX y vuelve a mover el siguiente P-Code a EAX que en este caso es 21:



Luego suma 3 a ESI para apuntar al parámetro del segundo P-Code:



Aquí mueve a EAX el contenido de 0012F4E8 y lo mueve a EAX, luego el contenido de 0012F4E8 que ahora se encuentra en EAX es movido a [EBP-4C] luego de esto realiza un XOR EAX,EAX nuevamente para limpiar EAX y tomar nuevamente el siguiente P-CODE

En resumen la dll realiza lo siguiente:
-Toma el valor de P-Code y lo mueve a EAX: MOV AL,BYTE PTR DS:[ESI]
-Incrementa ESI para apuntar al parámetro del P-Code
-Se dirige al parámetro y ejecuta la operación correspondiente
-Terminada la operación realiza un XOR EAX,EAX para limpiar el registro
-Vuelve nuevamente al primer paso

Todo este análisis manual se puede evitar como comenté anteriormente con programas como exdec o P32Dasm, abrimos exdec y nos aparecerá lo siguiente:



Nos vamos a File->disassemble Prog y elegimos clave1.exe y nos mostrará lo siguiente:



en donde el primer valor es el address(VA) del P-code,el segundo valor es el P-Code mismo, el tercer valor es el nombre del P-Code y el cuarto el parámetro.

Si recordamos el primer P-Code fue 4 y estaba ubicado en el address 401BD0 y lo que realizo fue pushear el valor de EBP-8C, por lo que el programa nos facilita considerablemente la localización de los P-Code junto con sus parámetros

*exdec solo está disponible en fase beta, imposibilitando guardar la lista de P-Code pero de todas formas sigue siendo una herramienta fundamental.

Si abrimos P32Dasm veremos lo parecido que son:


este programa está más avanzado y nos muestra los P-Code de una manera más visible ideal cuando son muchos, También nos facilita la búsqueda de referencias de strings o números:



IV-Crackeando con OllyDBG y exdec

Para crackear de manera básica debemos tener conocimientos de dos P-Codes

1)BranchF=1C
este P-Code es similar a un salto condicional, este salto se realiza si la comprobación anterior es falsa.

2)BranchT=1D
este P-Code es el opuesto a BranchF es decir, este salta cuando la comprobación es verdadera T=True F=false


Una vez entendido como trabajan los programas compilados en P-Code podemos empezar a trabajar, lo primero que haremos será cargar clave1.exe con exdec, bajamos hasta encontrar alguna referencia de texto que sea llamativa:



una vez encontrada la referencia, en este caso:
"Número incorrecto"

debemos subir hasta encontrar algún BranchT o un BranchF. los Branch=1E no los debemos considerar ya que son equivalentes a JMP, es decir saltos incondicionales:



Encontramos un BranchF en 401C2C que si no se cumple la comprobación anterior este saltará a 401C63 vayamos a esa address para ver hacia donde se ubiese dirigido:



Vemos que se dirige a "Número Correcto"

Cargamos clave1.exe desde OllyDBG y nos dirijimos desde el dump a 401C2C (Address del BranchF)



Notaremos que hay un 1C que es equivalente a BranchF, intentemos cambiarlo por BranchT que es 1D y guardamos los cambios:



Iniciamos clave1 modificado, introduzcamos un serial cualquiera y presionamos Registrar:



Nuestro serial es tomado como válido

En esta ocación trabajamos enfocados en OllyDBG, luego trataremos teorias con WKTVBDE,Hasta la Parte II




UND3R
#1646
o un BP en RegOpenKeyExA, cuando tenga tiempo intentaré mirarlo a ver que se puede hacer saludos



#1647
Son herramientas aliadas, pero si el programa está empaquetado como lo decompilas?, es efectivo por ejemplo decompilar un programa con VB reformer así puedes entender como trabaja pero no siempre te dará resultados. crea un simple crackme en P-Code en visualbasic cuando compiles pone P-Code e intenta decompilarlo cuéntame como pudiste  :silbar:

Saludos edu
#1649
Cita de: Tinkipinki en  7 Octubre 2011, 11:00 AM
No se si os servira pero siempre puedes cambiarte la direccion mac y registrarte de nuevo.
Cambiar la mac es fácil con Win 7 MAC Address Changer

Saludos

Raftrack intenta utilizar el programa, lo más probable es que cyberghost deje algun registro o archivo que previo a la conexión comprueba si existe, si es así alerta
#1650
Post:
Citar5. Vuelvo a pedir que retires mi nick del título del post o al menos que lo escribas bien.

privado:
CitarSigo esperando que borres mi nick del título, sino yo mismo borraré el post entero.