--
ESTUDIO COLECTIVO DE DESPROTECCIONES | ||
![]() |
WKT Tutorialz Site | ![]() |
![]() |
![]() |
![]() |
Mr.Brown | Introducción al SoftIce | Julio 1998 |
Instalación del Soft-Ice 3.22 para W95 |
|
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. 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.dllEstas 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. |
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) |