|
|
 |
ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Título |
Introducción al SoftIce |
Tipo de Tutorial |
[X]Original, []Adaptación, []Aplicación, []Traducción |
Cracker |
Mr.Brown |
Grupo |
Whiskey Kon Tekila |
Fecha |
15 de Julio de 1998 |
AL ATAQUE
|
Instalación del Soft-Ice 3.22 para W95
|
- Tener el SoftIce 3.20, y la actualización a la versión 3.22 (ver sección de hErrAmiEntAs para conseguirlos)
- Ejecutar el programa de instalación (3.20), y cuando lo pida, decirle que no actualize el Autoexec.Bat, ya que es mejor hacerlo después a mano.
- Ejecutar el programa de actualización (3.22).
- Editar el AutoExec.Bat, y añadir al final :
CHOICE /T:N,3 "Cargar Debugger Soft-Ice 3.22 "
IF ERRORLEVEL 2 GOTO SEGUIR
C:\SIW95\WINICE.EXE
:SEGUIR
- Al arrancar el Pc, tendremos 3 segundos para contestar si queremos cargar el SoftIce.
(Se puede cambiar el tiempo y/o la opción por defecto con el parámetro /T:OpcionDefecto,Segundos )
Si hemos pedido cargar el debugger, el windows arrancará normalmente, pero al pulsar Ctrl-D tiene que aparecer el entorno del debugger, y a partir de aquí ya es otra historia....
- Para ejecutar el SoftIce desde una "ventana" de guindous, hay que activar la casilla
de Universal Video Driver, cuando se configura la targeta gráfica.
Se puede volver a reconfigurar con el "Display Adapter Setup" que se instala juntamente con el SoftIce, y dejarlo como mejor nos vaya.
|
Configuración del entorno (WinIce.Dat)
|
Los parametros de configuración estan en el fichero WinIce.Dat, y se puede
acceder a ellos también desde el pgm Symbol Loader, en la opción de
SoftICE Initialization Settings.
Algunos comandos se pueden teclear directamente desde el SoftIce, o se pueden
tener en el WinIce.Dat para que se ejecuten al arrancar.
Probad primero, y lo que más os interese lo poneis en la linia INIT="X;"
CODE ON : Para ver los bytes en hexa de cada instrucción asm.
LINES # : Número de linias para la pantalla.
WR : Para ver/ocultar la ventana de Registers.
WL : Para ver/ocultar la ventana de Locals.
WC # : Número de linias para la ventana de Code.
WD # : Número de linias para la ventana de Data.
WW # : Número de linias para la ventana de Watch.
Un ejemplo de configuración podría ser :
INIT="CODE ON;LINES 60;WR;WL;WD 13;WC 25;WATCH eax;WATCH *eax;X;"
Estando en el SoftIce, el tamaño de las ventanas también se puede modificar con el ratón.
Y también se pueden cambiar los colores con el comando COLOR
|
Configuración del entorno (WinIce.Dat)
|
Para poder interceptar llamadas a funciones externas del programa que estamos
traceando, hay que retocar unas linias en el WinIce.Dat
Se tienen que "exportar" los ficheros que contengan las funciones que queramos pillar.
Los típicos que conviene tener para interceptar las llamadas al Api de windows son :
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\advapi32.dll
Estas linias las vereis en el WinIce.Dat, pero con un puntoycoma delante que las inactiva.
Tan sólo quitar el ; y retocar el path del windows si no se ajustase a vuestro Pc.
Sin estos "Exports", no se podria poner un BreakPoint tipo BPX GetWindowTextA, que son muy
útiles para bastantes desprotecciones.
|
Traceando ....
|
Tenemos varias opciones para ir avanzando por el programa :
T (F8): Ejecuta la instrucción actual y se para en la siguiente.
P (F10): Igual que T, pero no entra en los Call.
P RET (F12): Ejecuta hasta una instrucción de retorno (RET).
G address (F11): Ejecuta hasta la dirección 'address'.
|
Husmeando ....
|
Para poder ver o buscar lo que hay en memoria :
D address [L length] : Muestra el contenido de la memoria.
S address L length data-string: Busca un valor en la memoria RAM.
Ejemplos :
D EAX => para ver qué hay en EAX
D *EAX => para ver qué hay en la dirección que apunta EAX
D EBP-200 ==> para ver qué hay en EBP-200
D 000F:A8A57 ==> para ver qué hay en la dirección F:A8A57
S 0 L FFFFFFFF 'clave' => Busca el texto 'clave' por toda la memoria.
S 0 L FFFFFFFF A1,41 => Busca 'A141' en hexadecimal por toda la memoria.
S es:di+10 L ecx A1,41 => Busca 'A141' en hexa. desde es:di+10 hasta (es:di+10)+ ecx
|
Parando ....
|
El uso de los BreakPoints, o Puntos de Ruptura es muy útil para parar el programa en un momento dado.
Ponerlos bien significa ahorrarse ver muchas linias de código inútil.
Para manipular los BreakPoints tenemos :
BL : Muestra los BreakPoints que hemos puesto.
BD # : Desactiva el BreakPoint número # (* para todos).
BE # : Activa el BreakPoint número # (* para todos).
BC # : Elimina el BreakPoint número # (* para todos).
Algunos de los BreakPoints disponibles son :
BPX address/symbol : Parada por ejecución.
BPIO [-h] port [R|W|RW] : Parada por acceso a puerto E/S.
BPINT interrupt-number : Parada por interrupción.
BMSG hWnd [L] begin-msg : Parada por mensaje.
BPM address : Parada por acceso a memoria.
Para ver ejemplos y coger ideas de Puntos de Ruptura, ver el documento de
BreakPoints.
|
Pidiendo ....
|
Con el SoftIce disponemos de varios comandos para obtener información del Sistema.
Por ejemplo,
WMSG : Muestra los mensajes de windows.(wm_gettext, wm_lbuttondown,..)
TASK : Muestra las tareas actualmente en ejecución.
HWND nombreTask : Muestra información sobre los "windows handles".
EXP : Muestra/Carga las funciones "exportadas" de las DLLs.
Supongamos que queremos interceptar qué se hace con una clave que acabamos de introducir en un programa.
Se podría hacer (entre otras maneras) :
TASK => para ver el nombre del programa.
HWND nombrePgm => para ver que apuntadores hay para ese programa.
BMSG apuntador mensaje ==> para poner un BreakPoint.
Ej: interceptar para la tarea prueba32, el "Window-Handle" 2C0
(Class_Name: Edit, que corresponde al cuadro de texto)
HWND prueba32
BMSG 2C0 wm_gettext
|
|
[ Entrada | Documentos Genéricos | WkT! Web Site ]
|
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
|
|
(c)
Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros
, lee
esto
antes e infórmate de cómo puedes
ayudarnos |
|
|
|
|
|