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ú

Temas - ARGVC

#1
1) Herramientas
1) Depurador o debugger: es un programa que permite detenerte en cada paso que realizan otros programas, creo que no expliqué bien. Un programa no es más que un conjunto de instrucciones, haz esto, haz lo otro. Entonces cuando se está ejecutando un programa y lo "depuras", por ejemplo hay una instrucción que dice: Muestra un cartel con las letras de color verde, te detienes en esa instrucción para poder cambiarla, parchearla, etc (el depurador te muestra todo en lenguaje ensamblador). El depurador más famoso que usan casi todos los crackers es el Soft Ice (de ahora en adelante le llamaremos SICE) y se pueden hacer cosas que ni siquiera te has imaginado con él.

2) Desensamblador o dissasembler: este programa convierte el ejecutable de otros programas hechos en otros lenguajes a lenguaje ensamblador. A diferencia del depurador no lo hace cuando el programa se está ejecutando, si no que cuando nosotros queramos (nosotros abrimos el ejecutable con el desensamblador y estudiamos el código todo el tiempo que queramos, a esto se le llama listado muerto).

Desensambladores: IDA pro (DOS 32 bits), W32Dasm(el que la mayoría usa).

3) Editor Hexadecimal: es un programa que te permite editar archivos de forma hexadecimal y así cambiar bytes en él, les enseñaré a convertir de decimal a hexadecimal y binario.

Editores hexadecimales: Hacker's View (DOS 32 bits), Ultraedit, y Hex Workshop.

--------------------------------------

Supongo que ya tienen todo, si lo tienen comencemos lo teórico de verdad. Por favor lean algo sobre ensamblador, es verdad, al principio todos estamos ansiosos de empezar a crackear ahora mismo y sin saber absolutamente nada ensamblador ni de ninguna de las herramientas pero lamentablemente eso no es posible:-( .Hay que tener paciencia para llegar a ser un buen cracker.

¿Qué es crackear?

Crackear, o Ingeniería Inversa (Reverse Engineering, como dicen los ingleses) se basa en reventar protecciones de software o hardware con fines intelectuales, personales, u otros, pero nunca lucrativos. De esta manera, el programa que estemos crackeando funcionará para lo que nosotros queramos y no para lo que fue diseñado.

¿Para qué crackear?

La sociedad en que vivimos da asco. Hay una enorme discriminación social. En esta sociedad la mayoría de la población está sometida al control de los que tienen dinero. El Cracking, es una forma de distribuir la riqueza entre la población. Si ves un programa en Internet que te gusta y no tienes una cuenta un un banco internacional ni nada de ello, para que esperar para tenerlo, crackéalo y publica el crack en Internet y estarás ayudando a mucha gente que vive a merced de los que son "importantes"(o sea, tienen cuentas en bancos internacionales, mucho dinero, etc).

Por supuesto que el Cracking también es para los programadores. Así podremos enseñarles que sus programas no son perfectos y tienen muchos errores tontos que podrían corregirlos. Y también enseñarles a no ser perezosos y crear buenas protecciones.

Empezaremos por aprender lo que es un sistema numérico.

Nosotros contamos el el sistema numérico de base decimal (la base de este sistema es el número 10). Esto quiere decir que el primer número formado por más de una cifra (0 1 2 3 4 5 6 7 8 9 10)de este sistema es el 10. Pero para las computadoras, este sistema no es conveniente, ya que la información se maneja codificada en forma de bits verdaderos y falsos 1=verdadero 0=falso. Esto lleva a la utilización de dos sistemas en la informática, binario (de base dos) y hexadecimal (de base dieciséis).

Convertir números de binarios a decimales:

En ensamblador nos encontramos con la necesidad de convertir números de binarios utilizados por la PC, a decimales que son los que nosotros entendemos.

Mira la siguiente tabla y puedes ir guiándote:



Como se muestra en la tabla 1+1 en binario=10. Esto es muy fácil, ya verás. Los números de binarios a decimales se pasan así:

Binario: 11011

Decimal:
1     +      2     +      0      +   8    +    16
todo esto = 27 en decimal

Nota: Hice este dibujo para que se entendiera mejor. En realidad, en la computación, el carácter ^ se utiliza para potenciar y el carácter *se utiliza para multiplicar.

Supongo que todos entienden ese dibujo. Si lo miran bien, verán que los números que están resaltados en azul, forman el número binario.

Convertir números de decimales a binarios:

Hay varias formas de hacerlo pero esta es la más fácil:

Ejemplo, el número 25 en decimal.

25/2 =12 y el resto es 1

12/2 = 6 y el resto es 0

6/2 = 3 y el resto es   0

3/2 = 1 y el resto es   1

1/2 = 0 y el resto es   1


Después tomamos el número de abajo hacia arriba y tenemos el número en binario 11001.

Números hexadecimales:

Puedes ir guiándote con la siguiente tabla:



Como ven en esta tabla, en el sistema hexadecimal los números que están formados por números de una sola cifra son: 0 1 2 3 4 5 6 7 8 9 A B C D E F. Es exactamente igual que contar en decimal pero nada más que el 9 sería el 16 (no sé si entienden). 

Para convertir de números hexadecimales a binarios se debe agrupar en grupos de cuatro bits empezando de derecha a izquierda. Después, en el último grupo, se rellenan los espacios en blanco con ceros.

Tomaremos como ejemplo el número binario 1101011

separamos en grupos de 4 bits,

110  1011

rellenamos los espacios con ceros,

0110   1011

Después tomamos cada grupo y lo transformamos a base 10(pueden fijarse en la tabla)

0110= 6   1011= 11

Pero como 611 no es correcto en el sistema hexadecimal sustituimos el 11 por su valor correspondiente en hexadecimal y obtenemos 6Bh (la h se pone para indicar que el número está en el sistema hexadecimal)

Para convertir un número de hexadecimal a binario solo es necesario invertir estos pasos.

SUPONGO que alguna vez tuvieron una clase de matemáticas y saben sumar, restar y potenciar, no, era un chiste:-) ya que si no saben, están muertos (y les sugiero que tomen clases de matemáticas)

3) Muy básico sobre ensamblador

Si ya leyeron algo sobre ensamblador, supongo que ya saben esto, pero lo escribo para los que son vagos y no se quisieron molestar en dejar este tutorial y leer otro para luego volver a este. El ensamblador o ASM es un lenguaje de programación de bajo nivel. Esto quiere decir que, a diferencia de C o C++ (lenguajes de alto nivel), mientras más programemos o más programa creemos, menos control tendremos sobre éste.

Este lenguaje les va a ayudar mucho ya que es fácil de aprender y necesitan saber de ensamblador para saber crackear.

Registros

Empezaremos por aprender (los que no leyeron sobre assembler) que son los registros. AX, BX, CX, DX (no son sólo estos, hay más pero por ahora pienso que es suficiente). Estas "palabras" son registros de datos. Éstos contienen cálculos y otras cosas que necesita un programa para ejecutarse. Es como que guardan datos temporalmente en la memoria. Los registros de 16 bits son estos (AX, BX, CX y DX) pero si trabajamos en 32 bits, o sea Windows 95, se les agrega una E delante entonces los registros de 32 bits serían así: EAX, EBX, ECX, EDX...

Si ven algo como AL y AH, no se preocupen, es que los registros se separan (BX se separa BL y BH...) Cada registro tiene un valor que se le asigna y se le modifica con algunas instrucciones en ensamblador. 

Aquí tienen los  principales saltos condicionales e incondicionales del ensamblador:



Cuando vean algún cmp por ejemplo cmp eax, ebx, quiere decir que compara, cmp proviene de "comparar". Compara el valor de los registros para luego haber un salto condicional o incondicional como 75 o 0F84 (condicionales) o un EB (incondicional).

Veamos un poco de esto en un ejecutable cualquiera de mi computadora:



(Nota importante: en Cracking desde cero para súper newbies 2 hablaremos de la pila y del código ASCII).
Antes de ver un salto condicional o incondicional, verán alguna instrucción que diga cmp xx-xx o test-xx-xx (dónde xx es un registro), estás instrucciones provienen de comparar los valores de los registros para determinar un posterior salto condicional o incondicional.

4) Familiarizándonos con las herramientas

Para crackear bien y más rápido, es necesario familiarizarse con las herramientas. Así aprenderemos a utilizarlas bien. Si bajaste un trial que expira dentro de un día y tu no has aprendido a usar bien esa herramienta, tómate tu tiempo, la crackeas, y podrás usarla todo el tiempo necesario. Pero cuando la sepas utilizar la compras, ya que habíamos dicho que el Cracking nunca se practicaba con fines lucrativos. 

W32Dasm: W32Dasm es un desensamblador, o sea, convierte el código de un programa hecho en otros lenguajes como C, C++, Delphi, Visual Basic, Pascal, etc, al lenguaje de ensamblador. 

Editor hexadecimal: el Hex Workshop y el ultraedit son muy fáciles de usar y no necesitarán leer ningún tutorial para aprender a usarlos (y que yo sepa no hay ninguno). El Hacker's View (HIEW) es más complicado ya que es de DOS y hay una cantidad de teclas para memorizarse, F1, F2, F7....y muchas más. Recomiendo que si eligieron el HIEW, se lean algún tutorial sobre él.encuentren el editor hexadecimal que más les guste.

Soft Ice: este programa si es muy difícil llegar a conocerlo todo. No podrán hacer absolutamente nada si no leyeron algún tutorial sobre él. Háganme caso, yo al principio odiaba al SICE, con esa estúpida ventanita de DOS, pero ahora que aprendí a usarlo, me parece que es una maravilla. Cuando lo instales el SICE (o Soft Ice, como le quieran llamar) deberás pasar por las siguientes configuraciones:

1) Número de serie: si bajan el SICE y viene en un zip, posiblemente venga con un archivo en formato txt llamado sn, ahí estará nuestro número de serie. Si no viene con un archivo llamado sn, puede venir con un archivo, llamado léame, leer o sino un archivo nfo también puede estar el serial en estos archivos.

2) Tarjeta de video: el SICE detectará tu tarjeta de video cuando oprimas el botón test. Como en mi caso (no detectó mi Diamond Viper 770), si no es así, selecciona la tarjeta Standar Display Adapter VGA.

3) Mouse: en mi caso, cuando instalé el SICE por primera vez, movía el mouse y no me andaba, si no que me aparecían en la parte de arriba los carteles que dicen copy, paste, copy&paste, display, un-assemble, what y previous. Lo peor era que no se podía seleccionar nada en los carteles, hacían como intermitencia cada vez que movía el mouse. Si esto les pasa, en la instalación, pongan cómo que están usando Microsoft Intelli Mouse y a ver si les anda.

4) Modificación de tu AUTOEXEC.BAT: si no sabes lo que es el AUTOEXEC.BAT puedes mandarme un mail y te lo diré.

@ECHO OFF

SET PATH=C:\\WINDOWS;C:\\WINDOWS\\COMMAND

SET TEMP=C:\\TEMP

goto %config%

:SICE

C:\\PROGRA~1\\SOFTICE\\WINICE.EXE

goto common

:NORM

goto common

:DOS

C:\\MOUSE\\MOUSE.EXE

mode con codepage prepare=((850)

C:\\WINDOWS\\COMMAND\\ega.cpi)

mode con codepage select=850

keyb gr,,C:\\WINDOWS\\COMMAND\\keyboard.sys

:common


Modificación de tu CONFIG.SYS:

[MENU]

MENUITEM NORM,Windows 9x

MENUITEM SICE,Windows 9x con SoftICE

MENUITEM DOS,MS-DOS

MENUDEFAULT NORM,2

[NORM]

[SICE]

[common]

LASTDRIVE=Z

FILES=60

device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)

[DOS]

FILES=60

Country=049,850,C:\WINDOWS\COMMAND\country.sys


5)Cuando esté instalado lanzar Symbol Loader: deberás lanzar el "symbol loader", ir al menú edit, luego a SoftICE initialization settings. en donde dice "Initialization string" debes poner X;wl;wr;wd7; code on;, y en donde dice "History Buffer size (KB)" debes poner 512.

6)Modificación de winice.dat: con cualquier editor de texto debes abrir el archivo "Winice.dat". Verás que hay unas cosas que dicen más o menos así, ;EXP= , en todos los ;EXP=, deberás quitarle el ; que está delante para que quede EXP=. Si no entiendes bien o piensas que estás haciendo todo mal, mándame un mail que te doy el Winice.dat ya modificado.

7) Deben reiniciar el equipo para obtener una actualización completa de los cambios.

Recomiendo que si no leyeron nada sobre el SICE y lo tienen instalado y configurado nunca presionen ctrl+d ya que con estas teclas se abre el SICE. Les digo esto para que no les pase lo que me pasaba a mi, que estaba escribiendo rápido, iba a poner una d mayúscula y al apretar shift el dedo se me corría y apretaba ctrl. Después tenía que reiniciar el equipo porque no sabía cómo salir del SICE (se sale con ctrl+d, como se entra) y así se me perdían los trabajos que estaba haciendo!!!:-**para modificar los archivos de inicio pués entrar a mi sección de tools.

autor: BJACK79
#2
un fichero protegido con el execryptor, cómo habría k hacer para desencriptarlo, o sea manualmente o que..
debo usar el Olly, o el softice mejor...
bueno tengo esas dudas.

#3
Ingeniería Inversa / El Cracking en Windows
20 Junio 2007, 09:32 AM
¡¡¡ IMPORTANTE !!!

Si no tienes claro el crack en DOS incluidas las instrucciones en ensamblador vas a perder el tiempo leyendo esta página, te aconsejo que comiences la casa por los cimientos. No se puede construir un tejado donde no hay algo que lo sujete. Una vez que se tienen los conocimientos necesarios para crackear en DOS, resulta muy fácil hacerlo en windows (aunque parezca una paradoja), ya que disponemos de herramientas más potentes que nos facilitan y reducen mogollón el trabajo. En cambio, es imposible crackear en windows sin conocimientos básicos de ASM. No creas que esto del crackeo es cosa de unos minutos ni que siempre se localiza lo que andamos buscando. Ten siempre una copia de seguridad de tus datos más importantes, los cuelgues son habituales y después de unos cuantos siempre se pierde algo importante por el camino.

UNA NOTA CURIOSA

Sabéis que para crackear en DOS es imprescindible estar familiarizado con las interrupciones (o tener un buen manual de consulta), bien pues olvidaros de ellas en windows. El crackeo en este entorno requiere del conocimiento de las API's (o un buen manual de consulta). Sólo cuando se rueda un programa de dos en windows es útil el tema de las interrupciones.

Cuando desensambléis el código de lo que sea en windows observaréis que siendo un entorno de 32 bits la memoria continua estando segmentada. No se a que es debido ésto, pero supongo que será en previsión a la demanda de memoria que tendrán los programas dentro de poco tiempo. De todos modos podréis comprobar que los segmentos son increiblemente grandes, Windows asigna a cada aplicación en ejecución la friolera de 4 gigabytes. Aunque no se disponga de tanta memoria, el entorno hace uso de la memoria virtual para ello, de tal modo que si rodamos 10 aplicaciones es como si tuvieramos 40 Gigas de ram.

También podréis observar que algunos registros llevan una E delante, este es el caso de

AX-BX-CX-DX-SI-DI-BP-SP-IP

que se convierten en

EAX-EBX-ECX-EDX-ESI-EDI-EBP-ESP-EIP

Los registros son los mismos solo que en lugar de ser de 16 bites son de 32 y, por supuesto, podemos utilizarlos como más nos convenga.


SOFTICE... (nuestra arma más poderosa. Alguien lo denominó 'La Bestia')

Con este programa se hacen maravillas que hace unos años eran inimaginables cuando se crackeaba en DOS. Antes, para crackear una protección no demasiado complicada, era necesario tracear el código durante días entreros, saltando mil y una instrucción anti-traceo (int 3 a punta pala, modificacion de las direcciones  de retorno, etc). Ahora y con la ayuda de este poderoso programa se puede interrumpir la ejecución de cualquier cosa en el momento que nos interese. Para ello es necesario saber en qué lugar o momento hay que poner un BP (break point o punto de ruptura).

Si has llegado hasta aquí, pensaré que tienes los conocimientos necesarios para poder saltarme la explicación de algunas cosas (de lo contrario necesitaría muchisimo espacio web y mogollón de curro para poder explicarlo todo). Por este motivo centraré esta página en el uso de softice, y que mejor forma de empezar que con una correcta...


CONFIGURACION DE SOFTICE

El primer paso, después de la instalación es editar el archivo "winice.dat" y quitarle el punto y coma al menos a las siguientes lineas

EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll


Esto nos permitirá interceptar las llamadas de las funciones mas importantes.

En la linea PHYSMB=XX cambiar XX por el número de megabytes de memoria ram que tengais disponible.
En la línea DRAWSIZE=XXXX cambiar XXXX por el número de Kb. de memoria de video que tengais.
En esta otra INIT="X;" podréis personalizar el arranque del softice intercalando entre INIT=" y X;" lo siguiente
LINES ?;
donde "?" es el número de lineas que queremos que tenga la pantalla (60 es una buena cantidad)
CODE ON;
esto permite que a la izquierda del código podamos ver, en modo hexadecimal, los bytes que componen cada instrucción
WC ?
"?" = número de lineas que queremos que muestre el código.
WR
nos mostrara el el estado de los registros.
La linea deberia de quedar así (más o menos):
INIT="code on;lines 60;wr;wl;wc 30;X;"


Winice.dat debería quedar más o menos así
CitarNMI=ON
SIWVIDRANGE=ON
LOWERCASE=OFF
MOUSE=ON
NOLEDS=OFF
NOPAGE=OFF
PENTIUM=ON
THREADP=ON
VERBOSE=ON

PHYSMB=128
SYM=1024
HST=256
DRAWSIZE=8192
TRA=8

INIT="CODE ON;LINES 60;WC 30;WD 20; WW 10;WATCH EAX;WATCH *EAX;WATCH EBX;WATCH *EBX;"
INIT="WATCH EDX;WATCH *EDX; X;"

F1="h;"
F2="^wr;"
F3="^src;"
F4="^rs;"
F5="^x;"
F6="^ec;"
F7="^here;"
F8="^t;"
F9="^bpx;"
F10="^p;"
F11="^G @SS:ESP;"
F12="^p ret;"
SF3="^format;"
CF8="^XT;"
CF9="TRACE OFF;"
CF10="^XP;"
CF11="SHOW B;"
CF12="TRACE B;"
AF1="^wr;"
AF2="^wd;"
AF3="^wc;"
AF4="^ww;"
AF5="CLS;"
AF8="^XT R;"
AF11="^dd dataaddr->0;"
AF12="^dd dataaddr->4;"
CF1="altscr off; lines 60; wc 32; wd 8;"
CF2="^wr;^wd;^wc;"

EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\comdlg32.dll
EXP=c:\windows\system\shell32.dll
EXP=c:\windows\system\advapi32.dll
EXP=c:\windows\system\msvbm50.dll

WDMEXPORTS=OFF
MONITOR=0
; WINICE.DAT
; (SIW95\WINICE.DAT)
; for use with SoftICE Version 3.2 (Windows 95)
; 14 July 1997
; *************************************************************************
; If your have MORE than 32MB of physical memory installed, change
; the PHYSMB line to the correct # of Megabytes.
; If you have LESS than 32MB you can save a bit of memory by
; specifying the correct # of Megabytes
; Example: PHYSMB=32
; *************************************************************************
; ***** Examples of sym files that can be included if you have the SDK *****
;    Change the path to the appropriate drive and directory
;LOAD=c:\windows\system\user.exe
;LOAD=c:\windows\system\gdi.exe
;LOAD=c:\windows\system\krnl386.exe
;LOAD=c:\windows\system\mmsystem.dll
;LOAD=c:\windows\system\win386.exe
; ***** Examples of export symbols that can be included *****
;    Change the path to the appropriate drive and directory
;EXP=c:\windows\system\vga.drv
;EXP=c:\windows\system\vga.3gr
;EXP=c:\windows\system\sound.drv
;EXP=c:\windows\system\mouse.drv
;EXP=c:\windows\system\netware.drv
;EXP=c:\windows\system\system.drv
;EXP=c:\windows\system\keyboard.drv
;EXP=c:\windows\system\toolhelp.dll
;EXP=c:\windows\system\shell.dll
;EXP=c:\windows\system\commdlg.dll
;EXP=c:\windows\system\olesvr.dll
;EXP=c:\windows\system\olecli.dll
;EXP=c:\windows\system\mmsystem.dll
;EXP=c:\windows\system\winoldap.mod
;EXP=c:\windows\progman.exe
;EXP=c:\windows\drwatson.exe
; ***** Examples of export symbols that can be included for Windows 95 *****
;    Change the path to the appropriate drive and directory
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll

Con esta pequeña modificación ya estamos preparados para utilizarlo. Resetea el ordenador para que la nueva configuración tenga efecto.

Si ya lo tenemos instalado, el siguiente paso es probarlo, así que Ctrl+D para entrar y F5 para salir... que... ¿funciona?... bien ahora vamos a aprender a utilizarlo.

#4
PUPE, actualmente, es un conjunto de herramientas para estudiar y analizar procesos en ejecución.
Funciona en las plataformas W9X w2k y XP.

El programa ha sido desarrollado por personas sin ningún animo de lucro, de forma totálmente alturista, con muchas ganas de aprender y compartir conocimientos. Es curioso... la de cosas que aprendes cuando te marcas un objetivo y eres constante en el empeño, la verdad es que estamos muy orgullosos del trabajo realizado. Esta es nuestra aportación a la comunidad de Ingeniería Inversa del mundo hispano, generalmente demasiado subordinada a las herramientas escritas en otras lenguas. Los Hispanos también sabemos desarrollar buen código.

Las posibilidades de ampliación de PUPE son inmensas. El programa comenzó como un simple parcheador de procesos en ejecución, y actualmente consta de los siguientes módulos:

Modulo principal.
Parcheador.
Caja de herramientas.
Volcador Total.
Volcador Parcial.
Mapa de memoria.
Editor PE.
Depurador.
Visor de funciones importadas.


Modulo Principal



Este módulo presenta un listado de todos los procesos que se están ejecutando en ese momento bajo el sistema. Desde el Modulo principal tenemos acceso a las demás funciones del programa.

Si seleccionamos un proceso con el botón derecho del ratón, el menú Popup desplegado, permite ir o ejecutar las demás funciones.



Además, dispone de un botón para cargar procesos nuevos y otro para actualizar la lista.

Parcheador



El parcheador permite efectuar cambios de bytes en el contexto del proceso seleccionado en el Dialogo principal. Para efectuar esos cambios, tan solo hay que introducir los datos estrictamente necesarios, a saber.

Nº de Bytes a cambiar.
Dirección de memoria.
Bytes nuevos.




Se puede llamar desde el menú Popup, desde la Caja de herramientas y desde el modulo Depurador.

Caja de herramientas





La Caja de herramientas es el siguiente escalón en la manipulación de procesos. En la ventana superior se nos mostrará todos los módulos que son cargados para la ejecución de ése proceso.Una vez seleccionado el proceso en el dialogo principal, hay que seleccionar un modulo dentro de ése proceso para trabajar sobre él. Generalmente será el ejecutable principal el objetivo de nuestras investigaciones.

En el listado del diálogo de la parte superior, utilizando el botón derecho del ratón, seleccionamos un modulo, el cual se proyecta en el contexto del PUPE. Puede ocurrir que falle la proyección debido al tamaño de algunos módulos, excesivamente grandes para efectuar la proyección de una vez, entonces, hay que activar la casilla "Forzar proyección". La cual trocea el módulo y lo proyecta en pedazos más pequeños.

Una vez  proyectado el módulo, tenemos las siguientes opciones:

Buscador de cadenas

El buscador incorpora dos motores de búsqueda, ASCII y Hexadecimal. Este motor busca en la proyección del modulo las coincidencias, y las presenta en una LISTBOX. Cada coincidencia está representada por la dirección donde se ha encontrado la cadena.

Seleccionando una dirección y clickeando en el botón parchear, se accede al modulo Parcheador, importando la dirección seleccionada. El botón limpiar, limpia los controles e inicializa el buscador.

Se puede utilizar el buscador para localizar zonas de memoria donde se guardan determinadas variables, para comprenderlo nada mejor que un ejemplo:

Imaginemos que estamos jugando a un juego, en el cual solo nos quedan unos pocos cartuchos en el cargador. Pues bien, sin interrumpir la ejecución del juego, puedes arrancar PUPE y localizar (si tienes suerte) la dirección donde se guardan el numero de cartuchos que te quedan, y poner los cartuchos que te den la gana. El esquema de actuación seria el siguiente.

En pleno juego, te apuntas los cartuchos que te quedan, vas al PUPE, proyectas el modulo ejecutable del juego y realizas una búsqueda de los cartuchos que te quedan, en principio, te aparecerán un montón de direcciones, (pero tranki, estas cosas son así), te las anotas y vuelves al juego, gastas un cartucho y otra vez al PUPE, actualizas la proyección y realizas otra búsqueda, te apuntas las direcciones y compruebas las coincidencias con la lista anterior. Después de realizar esa operación unas cuantas veces, la lista de direcciones probables se habrá reducido considerablemente. Solo queda parchear en esas direcciones y comprobar el resultado. Una vez localizada la dirección que nos interesa, siempre será la misma y ya podremos parchear directamente sin tener que realizar las búsquedas.


Volcador Parcial



Desde el Volcador parcial se pueden volcar fragmentos de código, datos, resources, etc. para su posterior análisis. Simplemente hay que introducir la dirección y el tamaño (en hex) del fragmento que queremos volcar.

Volcador Total

El Volcador Total crea un archivo en el disco, equivalente a la imagen del módulo proyectado en memoria, pero, con unas pequeñas modificaciones. Dispone de dos opciones.

1ª Reconstruir. Esta opción está pensada para archivos normales, consigue una reducción del tamaño del archivo con respecto a la opción Alinear. El funcionamiento es simple. Reconstruye las secciones del archivo proyectado, según los datos existentes en las tablas del encabezado PE, de forma que coincidan en tamaño y ubicación.

2ª Alinear. Esta opción, trabaja al contrario, es decir, modifica los datos de las tablas del encabezado PE, de forma que coincidan en tamaño y ubicación con el estado real de las secciones. Con esto nos metemos de lleno en el tema de los empacados, en los cuales al descomprimirse en memoria, rellenan el espacio virtual asignado a algunas secciones, resultando un conjunto mucho más grande que el original. Las pruebas realizadas con algunos empacadores (Petite, Neolite, UPX), dan como resultado archivos completamente funcionales y ejecutables.

Algunos empacadores, cortan o modifican la tabla de funciones importadas, haciendo imposible por este método la funcionalidad total, pero aun así, el archivo resultante es totalmente desensambable con los desensambladores habituales. Junto con el editor PE se pueden saltar las protecciones anti-dump más utilizadas.

Editor PE

El editor PE es un complemento al Volcador Total. Algunas protecciones anti-dump alteran el contenido de las tablas de secciones del encabezado PE, bien añadiendo secciones ficticias, eliminando las cadenas de los nombres de sección e incluso añadiendo cadenas de texto o firmas donde deberían haber datos de secciones. Y todo para confundir a los volcadores (dumpers), que utilizan estos parámetros para realizar el volcado.

Con el editor PE del PUPE se puede:

- Editar. Los nombres y los datos de cada sección, incluso si no existen nombres de sección.
- Eliminar Secciones.
- Volcar secciones enteras a disco.


De esta forma podremos controlar antes de un volcado los datos que se utilizaran para la realización del volcado a disco. Una vez puestos, podemos alterar las características de una sección (o de todas) para poder usar desensambladores de archivos muertos como el wdasm, en los archivos generados con el Volcador Total.



Los cambios realizados desde el editor PE actúan en dos contextos bien diferenciados.

1º En el contexto del proceso.
2º En el contexto del PUPE, concretamente, en la proyección del modulo.


De esta forma, aunque el modulo este protegido contra escritura y no nos permita realizar cambios en su estructura, si podemos actuar en la proyección, asegurándonos que el volcado posterior incorpora los cambios realizados con el editor PE.

Otra característica del editor PE, son las rutinas semi-inteligentes que comprueban la coherencia de los datos de una sección antes de darla por valida, eliminando automáticamente la presentación de secciones ficticias.

Mapa de Memoria



La idea de realizar un mapa de memoria de los 4 Gb. Asignados a un proceso, sobrevino después de estudiar la forma como actuaban algunos sistemas de protección, los cuales reservaban memoria fuera del rango utilizado por los programas para manipular datos (secciones de datos).

Algunos empacadores como Asprotect y tElock, reservan memoria para realizar algunas tareas de desempacado, y montan en esas áreas las tablas de funciones importadas o las emplean para otros menesteres, como montar números de serie…. XDDDDD. Lo más curioso es que a veces se les olvida limpiar esas zonas después de utilizarlas…dejando a la vista cosas que no deberían verse. Un ejemplo claro sería rodar una aplicación, intentar registrarnos para que se genere el número mágico, después de hacerlo vamos a la caja de herramientas del pupe y en datos pulsamos el botón que nos muestra el mapa de memoria, exportamos a datos las direcciones usadas y normalmente, en alguna de ellas, aparece el numerito. Esta es la idea del buscador de cadenas inteligente que proximamente estará operativo (a Marmota le gusta llamarle 'buscador listo').

Se puede llamar al mapeador desde la Caja de herramientas pero su verdadera funcionalidad se presenta cuando es llamado desde el modulo Depurador, el cual analizaremos más adelante.

Aunque el mapa presenta un listado de todos los bloques de memoria con sus características, los bloques interesantes son los que llevan los atributos de lectura o lectura/escritura, y por supuesto los que están en el estado de "usado"

El mapeador también incorpora un Volcador de bloques, por si a alguien le apetece guardar en disco lo que hay en esos recónditos lugares.

Depurador



Este es sin duda el modulo más complejo del PUPE. Aunque no es un Depurador propiamente dicho (todavía), si utiliza algunas funciones exclusivas de depuradores.

1ª Desensamblado del código que sé esta ejecutando en memoria.
2ª Visualización de las zonas de memoria activas.


En realidad el Depurador realiza una especie de "foto" (a través de la proyección desde la Caja de herramientas), y trabaja sobre la imagen del modulo seleccionado.

En primer lugar, nos presenta una lista de las secciones que componen el archivo seleccionado. Un pequeño inciso….
Con algunos empacadores, pasa una cosa curiosa... Normalmente, las rutinas desempacadoras se encuentran en secciones que han sido añadidas al programa original, mientras que el código del programa se encuentra en otra sección distinta. Algunos desensambladores (Wdasm) desensamblan la primera sección que encuentran con los atributos de "ejecutable", dejando las otras secciones en el olvido…. Seguimos…

Con el PUPE, puedes escoger la sección que deseas desensamblar, independientemente de las características o atributos de esa sección.

Igual ocurre con la ventana de Datos, puedes visualizar cualquier sección, de forma independiente.

El Depurador también dispone de un pequeño buscador de cadenas, un poco mas reducido (por motivos de espacio) que el de la Caja de herramientas.

Desde el Depurador es donde cobra toda su potencia el Mapa de memoria. Puedes llamarlo desde la ventana de Datos o desde la del Desensamblador. Simplemente hay que seleccionar el bloque de memoria que quieres visualizar y/o desensamblar. En unos momentos el resultado aparecerá en la ventana correspondiente.

Las ventanas de datos y código permiten copiar y pegar el texto que en ellas aparece. Para copiar tan sólo hay que sombrear con el ratón la zona que queremos copiar del mismo modo que lo haríamos en cualquier editor de texto, a continuación pulsamos Ctrl+C para pasar el texto seleccionado al porta papeles, después, en cualquier aplicación que permita pegado, pulsamos Mayúsculas e insertar para pasar el texto seleccionado. De momento y hasta que tengamos alguna función para imprimir el contenido de una ventana, será la única forma de poder imprimir estos datos.

Visor de funciones Importadas



Para la realización de este visor, utilizamoslos datos disponibles en la tabla de funciones importadas. Si la tabla es destruida o modificada (como efectivamente así ocurre en algunos casos), el visor pierde su funcionalidad. Pero (siempre hay un pero), tiene una ventaja importante. Igual que el conjunto del PUPE, trabaja con los datos que hay en memoria, y las tablas de funciones importadas no siempre (ni mucho menos) son destruidas. Por lo tanto, tenemos un medio de saber que funciones utiliza un determinado modulo. Además en el caso de que las funciones sean importadas por ordinal, en vez de por nombre de función, el visor presenta la dirección de entrada a esa función.

DESCARGA

autores: Crack El Destripador, El Alfil, Marmota
web: http://www.terra.es/personal/guillet/indexa.htm

PD: alguien usó esto o le parece útil ¿?
#5
Ingeniería Inversa / Traceando un Programa
20 Junio 2007, 08:40 AM
TRACEANDO UN PROGRAMA

Supongamos que queremos averiguar donde se encuentra una rutina determinada de realiza un trabajo determinado, digamos, por ejemplo, que hay una pantalla de presentación que no queremos que se ejecute (por decir algo).

Bien... los pasos a seguir son:

1.- Cargaremos el programa con cualquier debugger.

A estas alturas, ya debemos de saber cual es la diferencia entre tracear con F7 y tracear con F8 (comandos "P" y "T" en debug, F8 y F10 en softice). Cuando el debugger tracea con F7 y se encuentra con una instrucción call loquesea:loquesea, éste se irá a ese lugar concreto y para continuar traceando seguiremos utilizando F7. En cambio, si al llegar a call loquesea:loquesea traceamos con F8 el debugger ejecutará todas las instrucciones que hay en loquesea:loquesea de un golpe y cuando termine esta ejecución nos devolverá el control (después de una instrucción ret o ret far).

2.- Tracearemos el programa haciendo uso de F8 (si no, se nos haría eterno el traceo)

3.- Observamos que en un punto determinado, se carga la pantalla que queremos eliminar y también se ejecutan otras instrucciones que NO QUEREMOS ELIMINAR.

4.- Pues ya sabemos en qué punto sucede esto, así que volvemos a cargar el programa con el debugger y cuando llegamos a este call loquesea:loquesea lo traceamos con F7 ya que esa rutina realiza lo que buscamos y otras cosas.

5.- Seguimos traceando con F8 siguiendo la misma filosofía de antes hasta que aislemos un call tal:tal que exclusivamente CARGA LA PANTALLA que queremos eliminar.

6.- Una vez localizado ese salto, apuntaremos los bytes que lo componen, será algo parecido a esto "E8-54-1A-00-00". También tomaremos nota de algún que otro byte más, bien por delante o por detrás de estos ya que es probable que el ejecutable contenga varias instrucciones iguales y nos sería imposible adivinar cual es la que nosotros andamos buscando.

7.- Haciendo uso de un editor hexadecimal de archivos ( os recomiendo HEX WORKSHOP) cargaremos nuestro ejecutable y buscaremos la cadena que previamente hemos apuntado.

8.- Una vez que tenemos la seguridad de haberla encontrado, modificaremos estos bytes cambiándolos por instrucciones nulas ( o sea NOP, en hexadecimal "90").

9.- ATENCION, si la cadena a parchear consta de 5 bytes pondremos 5 veces "90" reemplazando encima , si la cadena consta de 3 pues 3 veces "90".

10.- Grabamos los cambios y ya tenemos nuestro ejecutable con el parche donde nosotros lo queremos.

Hay muchos programadores que utilizan instrucciones anti-traceo. Esto lo hacen de varias formas, bien poniendo instrucciones INT 3, bien modificando la pila con instrucciones de retorno falsas, o modificando los registros de los segmentos. En este caso no te compliques la vida traceando, ya que te resultará mas complicado modificar el código para poder tracearlo que parchear lo que te interesa realmente. La solución es utilizar W32DASM. Este programa desensambla la totalidad del ejecutable y nos permite (en la versión registrada) grabar un archivo de texto con todas las instrucciones del ejecutable y en la parte derecha nos indica los bytes en hexadecimal que componen cada instrucción. Una vez que lo tenemos, seguiremos las instrucciones desensambladas hasta que localicemos el fragmento de código que pensamos que es el que hay que parchear, apuntamos la cadena correspondiente y volvemos a hacer uso de HEX WORKSHOP. Probablemente no demos con ella a la primera, mas bien, se nos colgará nuestro ejecutable un montón de veces (cosa a la que nos deberemos de acostumbrar ya que esto sucede en millones de ocasiones), practicamente hay que ADIVINAR dónde está la rutina que queremos eliminar. Después de mil cuelgues, observarás que los resultados son buenos.

autor: Crack El Destripador