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 - 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
uhh no disculpas man es que como no se podía bajar correctamente de su web, no supuse que esos archivos estaban por google, disculpas man no me heches del foro por eso después de todo, vos pusiste que te lo podamos pedir.

graX entonces. salu2
#3
bueno,,
no podría recomendarte en base a decir si es uno mejor k el otro, pero si me pides a mi una respuesta, lo ideal sería que más o menos puedas manejar los dos o por lo menos saber lo básico del softice y manejar bien el Olly. te estoy dicendo que uses el Olly para que puedas manejarte por ahora, te va a alcanzar y sobrar en lo k hagas.

bueno sobre si te va  a andar, de lo que estoy seguro es que ande la versión del softice que se describe en este post y te lo muestra con un videotut...

http://foro.elhacker.net/index.php/topic,160341.0.html

ahora que hay otras versiones una de numega y otra de compuware que esas no me han andado, pero no estoy diciendo que no corran para xp. debe ser cuestión de configurar.

Por cierto en estos tutoriales que puse de Crack EL Destripador, se manejan con el softice, pero igualmente hay tantos otros al igual que el de ricardo narvaja para uso de Olly.

chau.
#4
Cita de: karmany en 20 Junio 2007, 18:34 PM
Sí efectivamente hay algunos archivos que parecen dañados, pero permite descargar el archivo doc en la mayoría de los casos. Lo preguntaré a ver si hay que hacer algo especial..

De todos modos si buscáis un poco por la red, se pueden encontrar...

Por ej. los tutes del 1 al 10 se pueden descargar de aquí en formato pdf.:


http://file024.mylivepage.com/chunk24/753969/512/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20PARTES%201%20a%2010%20en%20PDF.ra
r

Si alguno no lo encontráis pedírmelo.

me los puedes pasar por favor.
#5
si el olly encima tiene cantidades de plugins, y no se yo
leí por algunos lugares que iba a salir una versión 2.00
o ya salió, para ring 0.



hehe me imagino que más de uno se debe estar volviendo loco por tenerlo..

yo lo que lamento es no haberme podido bajar los archivos sobre manejo del Olly de la web de Ricardo Narvaja.
si alguno los pudo descargar a tiempo si tiene la amabilidad de volverlos a subir, vamos a estar agradecidos.

Salu2
#6
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.

#7
Observar los registros

Entrar en softcite Ctrl+D y escribir "D EAX". En la ventana de datos aparecerá el contenido en ascii del registro EAX. Hacer la misma prueba con el resto de registros y observareis que la ventana cambia indicandonos lo que hay en cada uno de ellos pero ojo, no nos enseña lo que hay en EAX sino lo que hay en el lugar al que apunta EAX, si EAX=04043567 estaremos viendo los datos que hay en la posición de memoria 04043567.
Si hacemos "D *EAX" softcite cojerá el valor de los primeros 4 bytes a los que apunta EAX y nos enseñará lo que hay en esa dirección. Se que es un poco lioso pero hacer pruebas hasta que comprendáis lo que está sucediendo.
Veamos un ejemplo práctico:
Supongamos que en la ventana de registros observamos que EAX = 0050F608
entonce, si hacemos "D EAX" veremos que la ventana de datos apunta a la dirección 0050F608 y veremos los bytes que contiene. Estos pueden ser por ejemplo 11-01-00-00-FF-FF-FF-FF etc...
Ahora vamos a hacer "D *EAX" ¿ que hace softice ? pues carga los primeros cuatro bytes (11-01-00-00), los coloca en orden inverso (00-00-01-11) y nos muestra el contenido de esta dirección (00000111). ¿ lo habeis entendido ?. Este dato es muy importante ya que las funciones son llamadas pasandoles como parámetros una dirección concreta y otras veces son llamadas diciendoles en qué dirección se encuentra la dirección donde están los datos. Sería como decir "la dirección es 00000111" y "la dirección se encuentra donde apunta EAX"
Se que es un poco complicado pero practicar con esto hasta que entendáis este detalle y no paséis a otro punto hasta tenerlo bien claro.

Break Point

El break point (bp) hay que entenderlo como un lugar (el que a nosotros nos interese) donde haremos que el programa se detenga y softice nos de el control enseñandonos el código desensamblado o descompilado. Para hacer una prueba sobre esto hacer lo siguiente:

1.- Dentro de windows pulsar Ctrl + D para entrar en softice
2.- Escribir "BPX GETWINDOWTEXTA"
acabamos de decirle que cuando se ejecute la función de capturar el texto de una ventana interrumpa ese programa y nos de el control.
3.- Salir de softice con F5
4.- Ejecutar cualquier programa que tenga una ventana donde se escriba alguna cosa (digamos, por ejemplo, la introducción de un número de serie)
5.- Escribir lo que sea y pulsar aceptar.
6.- Si en este momento estáis dentro de softice es que vuestro bp ha funcionado, si no es así es que el programa que habeis arrancado no utiliza "getwindowtexta" para la captura de texto, así que probar con "getwindowtext", "getgdlgitemtexta" o "getdlgitemtext".
7.- Estamos antes de que el programa capture el texto que hemos introducido, para que termine la función y saber quien la ha llamado pulsar F12 y F12 otra vez.
8.- Ahora estamos después del código que ha capturado el texto introducido... y a partir de este momento hay que trabajarselo.
9.- A partir de aquí, el programa hará una serie de comprobaciones de la cadena introducida. Esta comprobación varía dependiendo del programador que ha hecho la aplicación. Es posible que realice varias operaciones con  el valor de cada byte que compone la cadena (sumas, restas, multiplicaciones, operaciones XOR, Etc.) y lo compare con el número que se supone es el adecuado (de aquí que varios números de serie sean validos para registrar un mismo programa). También es posible (aunque rara vez sucede) que se compruebe la cadena con otra cadena (la buena) en cuyo caso veremos la buena y la introducida por nosotros en la memoria, no estarán muy alejadas la una de la otra. En cualquier caso, despues de la comparación siempre hay una instrucción que nos envía al código que continua la ejecución normal del programa o nos tira a la calle en caso de que la comparación no sea la adecuada. Estas instrucciones son mas o menos así:

cmp dword ptr tal_y_cual, pascual       compara un número con otro
je 00123456                                       salta al código bueno si es igual
jmp 00345678                                    salta al código de tirarnos a la calle


Es lógico pensar que si variamos la instrucción je 00123456 por jne 00123456 ó jmp 00123456 el código se ejecutará como si el programa fuera legal o registrado y no importa el tipo de protección que tenga, nos da lo mismo que sea un disco llave, una mochila o un número de serie. Da lo mismo el tipo de protección que utilice el programador y lo sofisticada que ésta sea, a nosotros nos importa un pepino, tan solo tenemos que dar con la instrucción que la comprueba y parchearla.

Podemos poner un BP en cualquier función de las API's de Windows. Las que capturan el texto introducido en una ventana son:

BPX GETWINDOWTEXT
BPX GETWINDOWTEXTA (para la versión de 32 bites)
BPX GETDLGITEMTEXT
BPX GETDLGITEMTEXTA (para la versión de 32 bites)


Hay que tener en cuenta que cuando softice detiene la ejecución del programa por el BPX nos encontraremos ANTES DE QUE ESTA FUNCION SE EJECUTE, así que tendremos que pulsar F12 para ejecutarla y ver quien la ha llamado ya que la comparación se efectuará después. Este fundamento es la base para destripar cualquier protección del tipo nº de serie. Os aseguro que una vez comprendido el mecanismo es muy fácil saltarse la mayoría de estas protecciones, tan sólo tendremos que dar con el fragmento de código que realiza esta tarea..

Puntos de ruptura importantes

Además de los puntos de ruptura ya comentados y dependiendo del comportamiento de la aplicación, podemos probar los siguientes:

    Supongamos que despues de introducir un número de serie no válido nos sale una ventan advirtiendonos de ello, bien pues deberemos detener el programa en algún sitio, así que porbaremos con alguna de estas funciones:

MESSAGEBEEP
SENDMESSAGE
MESSAGEBOX
SHOWWINDOW
GETPRIVATEPROFILESTRING
GETPRIVATEPROFILEINT
HMEMCPY


Es importante observar el comportamiento de cada programa para meterle mano por un sitio u otro. Colocando un BPX en la función que utilice el programador para mostrarnos el mensaje de error (tendremos que probarlas todas) estaremos en la parte del código que ya HA HECHO la comprobación de la protección, con lo que estaremos muy cerca del código que deberemos parchear, sólo tendremos que tener en cuenta que éste código está detras de lo que estamos traceando. Para no perdernos sobre un millón de paradas que nos hará Softice sobre las funciones interceptadas, hay que colocar los BPX SOLAMENTE antes de que el código llame a la función en el momento oportuno, o sea, que no hay que colocar los BPX antes de rodar la aplicación, hay que ponerlos en el preciso instante en el que sabemos que va a ser llamada para comprobarla. Supongamos que rodamos la aplicación y estamos sobre la ventana de introducción del numerito, pues introducimos el numerito y antes de pulsar sobre el botón de aceptar es cuando colocamos el BPX, de esta forma sabemos que softice dentendrá la aplicación en el momento que a nosotros nos interesa.

COMANDOS DEL SOFTICE

:pera ver el resto del tut este es el link

autor: Crack El Destripador
#8
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.

#9
Ingeniería Inversa / Re: Duda Sobre SICE
20 Junio 2007, 09:05 AM
ta... sobre ese videotut ahí se ve perfecto que anda, lo que
si no me keda claro si esa versión k el man usa es más
moderna o antigua que las de numega o compuware.
y si lo fueran si hay alguna diferencia en performance
:P :P ;D
#10
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 ¿?