uSo DeL SoFTiCe

 

Antes de nada decir que en esta seccion tan solo explicare un pequeño uso del SICE (SoftIce) y una simple configuracion del winice.dat, no os penseis que con este tutorial llegareis a tener un control avanzado (ni siquiera medio) del SICE.

Decir que el SoftIce es el mejor debugger disponible para nuestros propositos, aunque poco a poco le va comiendo el terreno el TRW2000 (otro debugger). Un debugguer basicamente nos permite un estudio "intensivo" del codigo de un programa, espero no tener que decir que ese codigo esta en ensamblador (uppss si ya lo he dicho xDDD).

Una vez instalado el SoftIce, lo primero que debemos hacer es configurarlo debidamente para su correcto funcionamiento. Antes de nada deciros que en la instalacion deberis elegir la tarjeta grafica correcta ya que si no es asi, el SICE simplemente no funcionara.

 

CONFIGURACION

 

Toda la configuracion basica del SICE esta guardada en un fichero llamado winice.dat que se encuentra en la misma carpeta en la que esta el ejecutable. Si abris ese fichero, vereis algo similar a esto:

NMI=ON <--- Esta parte del codigo no debeis tocarla nunca!!
SIWVIDRANGE=ON
LOWERCASE=OFF
MOUSE=ON
NOLEDS=OFF
NOPAGE=OFF
PENTIUM=ON
THREADP=ON
VERBOSE=ON
PHYSMB=32
SYM=1024
HST=256
DRAWSIZE=2048

TRA=8

 

INIT="X;" <--- Aqie se introduce una serie de codigos (que mas adelante explico) que se ejecutan al inicializarse el SICE.

;Lo que viene ahora con las acciones que realizan las combinaciones de teclas del SICE

F1="h;" <--- Aparece una ayuda de codigos
F2="^wr;" <--- Aparece una nueva seccion en la parte superior de la "consola" con los registros del sistema
F3="^src;" <---
F4="^rs;" <--- Nos envia al escritorio para poder observar "donde nos encontramos en el programa"
F5="^x;" <--- Sirve para ejecutar el codigo
F6="^ec;"
F7="^here;" <--- Establece un breakpoint temporal en la línea donde se encuentra el cursor y comienza la ejecución
F8="^t;" <--- Nos permite entrar en una CALL
F9="^bpx;" <--- Situamos un bpx en la direccion en la que nos encontremos
F10="^p;" <--- Sirve para avanzar en lasl inear de codigo
F11="^G @SS:ESP;" <--- Nos vuelve de una CALL (como el RET)
F12="^p ret;" <--- Similar
SF3="^format;" <--- Cambia el codigo hexadecimal de byte a word dword y demas
CF8="^XT;"
CF9="TRACE OFF;" <--- Sale del modo de simulación de trazado
CF10="^XP;"
CF11="SHOW B;" <--- Muestra las instrucciones que se encuentren en el buffer de trazado
CF12="TRACE B;" <--- Comienza el trazado desde la instrucción más antigua en el buffer de trazado
AF1="^wr;" <--- Igual que F2
AF2="^wd;" <--- Aparece o desaparece la seccion de Datos
AF3="^wc;" <--- Aparece o desaparece la seccion de Codigo (en Asm)
AF4="^ww;" <--- Activar el comando WATCH (espia de registros)
AF5="CLS;" <--- Limpia la "consola" de texto
AF8="^XT R;"
AF11="^dd dataaddr->0;"
AF12="^dd dataaddr->4;"
CF1="altscr off; lines 60; wc 32; wd 8;" <--- Configura la disposicion de las secciones de la consola (eso lo haremos en INIT)

CF2="^wr;^wd;^wc;" <--- AF1 + AF2 + AF3 = CF2 (pillais no? xD)

 

WDMEXPORTS=OFF

MONITOR=0

 

; WINICE.DAT <--- Todo el texto que empieza con punto y coma son comentarios.

; (SIW95\WINICE.DAT)
; for use with SoftICE Versions greater than 3.0 (Windows 95)
; ; *************************************************************************
; 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

; [...] y mas cosas...

 

Despues de ver esto podeis daros cuenta de la potencia que tiene este programa. Y que con una buena configuracion se puede conseguir una mayor eficacia.

Ahora lo que haremos es configurar INIT y explicar unos cuantos comandos (si deseas saber una gran variedad de comandos del SICE busca el magnifico tutorial que tiene BLaCKFeNiX ahora MrSilver):

X = Sale del SICE
wl = Aparece o desaparece una seccion con las variables locales
wc XX = Indicas el nº de lineas que tendra la seccion de codigo (XX = Nº de lineas)
wd XX = Indicas el nº de lineas que tendra la seccion de datos(XX = Nº de lineas)
wr = Aparece o desaparece una seccion con los registros del sistema (su valor)
Code ON/OFF = Activa o desactiva en la seccion de codigo informacion sobre los bytes en hexadecimal del codigo en Asm (Ej: 75h = JNE)
altscr off = Para que SICE no use una ventana diferente para las salidas
Lines 25/43/50/60 = Indica el nº de lineas que queras que aparezcan en la ventana
faults off = Para que SICE no "rompa" en fallos de proteccion general (que ocurren MUY MUY a menudo xD)

 

Con esta pequeña descripcion de comandos podemos ya configurar nuestro INIT. Aviso de que todos los comandos que introduzcais en INIT debeis separarlos por ponto y coma ( ; ). Os pondre como ejemplo mi INIT personal:

INIT="code on; altscr off; lines 50; wc 25; wd 10; wr; faults off;X;"

 

Una vez configurado en INIT nos queda la otra cosa importante, configurar lo modulos de los que SICE se va a servir. Estos modulos, por si no os habeis fijado estan en el fichero winice.dat, en la parte de comentarios. Aunque nosotros no usaremos el comando LOAD, sino que usaremos EXP. Aqui teneis un pequeño ejemplo de lo que todos vosotros debeis tener como minimo:

EXP=c:\WINDOWS\SYSTEM\KERNEL32.DLL // Funciones del KERNEL32

EXP=c:\WINDOWS\SYSTEM\USER32.DLL // Funciones básicas de cuadros de diálogo

EXP=c:\WINDOWS\SYSTEM\GDI32.DLL // Funciones de dibujo del GDI de windows

EXP=c:\WINDOWS\SYSTEM\ADVAPI32.DLL // Funciones para el manejo del registro de Windows

 

Ademas de estas funciones puedes cargar otras que tu necesites. Otras muy usadas por los crackers son tambien las librerias de Visual Basic:

EXP=c:\WINDOWS\SYSTEM\MSVBVM50.DLL //Libreria de Visual Basic 5

EXP=c:\WINDOWS\SYSTEM\MSVBVM60.DLL //Libreria de Visual Basic 6

EXP=c:\WINDOWS\SYSTEM\VB40032.DLL //Libreria de Visual Basic 4

EXP=c:\WINDOWS\SYSTEM\VBRUN300.DLL //Libreria de Visual Basic 3

 

COMANDOS

 

Ahora, en esta parte os presentare un pequeñisimo conjunto de comandos para que os familiariceis con SICE. Asi que venga vamos al tema:

 

BPX

Establece o borra un breakpoint de ejecucion

Comando: BPX [ address] [IF expression] [DO "command1;command2;..."]

address: Dirección lineal donde establecer el breakpoint.

c= Contador de activación del breakpoint.

IF expression Conditional expression: la expresión debe evluarse como TRUE (diferente a 0) para que se active el breakpoint.

DO command Breakpoint action: Una serie de comandos de SoftICE que se ejecutarán cuando el breakpoint se active.

BPR

Establece un breakpoint en un rango específico de memoria

Comando: BPR start-address end-address [ verb] [IF expression][DO "command1;command2;..."]

start-address: Inicio del rango de memoria.

end-address: Fin del rango de memoria.

verb: Puede ser de lectura (R), escritura (W), ambas (RW), ...

= Contador de activación del breakpoint.

IF expression Conditional expression: la expresión debe evluarse como TRUE (diferente a 0) para que se active el breakpoint.

DO command Breakpoint action: Una serie de comandos de SoftICE que se ejecutarán cuando el breakpoint se active.

BPM

Establece un breakpoint en un acceso o ejecución de una posición de memoria

Comando: BPM [size] address [verb] [ debug-reg] [IF expression] [DO "command1;command2;..."]

size: Especifica el rango de posiciones cubiertos por el breakpoint.

verb: R lectura (read) , W Escritura (Write), RW Lectura y escritura (Read and Write), X Ejecución (Execute).

qualifier: EQ igual, NE no igual, GT mayor que, LT menor que,...

debug-reg: Registro de depuración, pudiendo ser: DR0, DR1, DR2, DR3.

c=: contador de activación.

IF expression expresión condicional: La expresión debe evaluarse como TRUE (diferente que 0) para que el breakpoint surta efecto.

DO command: Una serie de comandos que se ejecutaran cuando el breakpoint se active.

?

Evaluar expresión

Comando: ? [expression]

BC

Desactiva los breakpoints indicados en lista o todos ( * )

Comando: BC lista / *

lista: Lista de los breakpoints a desactivar

* : Borra todos los breakpoints

BE

Activa uno o mas breakpoints. Los indicados por lista o todos

Comandos: BE lista / *

lista: Lista de los breakpoints a activar

* : Activatodos los breakpoints

D

Muestra el contenido de la memoria

Comando: D [size] [address [l length]]

size: Especificador de tamaño.

address: Dirección de memoria que se desea visualizar.

l length: Muestra length bytes en la ventana de comandos.

E

Edita el contenido de la memoria

Comando: E [size] [address [ data-list]]

size: Especificador de tamaño.

address: Dirección de memoria a editar.

data-list: Lista de objetos de datos del tamaño especificado

G

Ir a una dirección de código

Comando: G [=start-address] [ break-address]

=start-address: Cualquier expresión que equivalga a una dirección aceptable.

break-address: Cualquier expresión que equivalga a una dirección aceptable.

A

Permite modificar una instruccion de la direccion especificada con comandos ensamblador

Comando: A [direccion]