--
|
||
|
|
|
|
|
|
Mr.Brown |
Introducción al SoftIce |
Julio 1998 |
Instalación del Soft-Ice 3.22 para W95 |
· 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 : ·
Al arrancar el Pc, tendremos 3 segundos para
contestar si queremos cargar el SoftIce. ·
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. |
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. 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. |
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 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. 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 : S 0 L FFFFFFFF 'clave' => Busca el texto 'clave' por toda la memoria. |
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. 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. 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. Ej: interceptar para la tarea prueba32, el "Window-Handle" 2C0
(Class_Name: Edit, que corresponde al cuadro de texto) |