--

ESTUDIO COLECTIVO DE DESPROTECCIONES
WKT Tutorialz Site
WKT
Mr.Brown Introducci≤n al SoftIce Julio 1998

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 | Documentoz GenΘricoz | WKT TEAM Main Site ]
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ]