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=ONLOWERCASE=OFFMOUSE=ONNOLEDS=OFFNOPAGE=OFFPENTIUM=ONTHREADP=ONVERBOSE=ONPHYSMB=32SYM=1024HST=256DRAWSIZE=2048TRA=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 codigosF2="^wr;" <--- Aparece una nueva seccion en la parte superior de la "consola" con los registros del sistemaF3="^src;" <---F4="^rs;" <--- Nos envia al escritorio para poder observar "donde nos encontramos en el programa"F5="^x;" <--- Sirve para ejecutar el codigoF6="^ec;"F7="^here;" <--- Establece un breakpoint temporal en la línea donde se encuentra el cursor y comienza la ejecuciónF8="^t;" <--- Nos permite entrar en una CALLF9="^bpx;" <--- Situamos un bpx en la direccion en la que nos encontremosF10="^p;" <--- Sirve para avanzar en lasl inear de codigoF11="^G @SS:ESP;" <--- Nos vuelve de una CALL (como el RET)F12="^p ret;" <--- SimilarSF3="^format;" <--- Cambia el codigo hexadecimal de byte a word dword y demasCF8="^XT;"CF9="TRACE OFF;" <--- Sale del modo de simulación de trazadoCF10="^XP;"CF11="SHOW B;" <--- Muestra las instrucciones que se encuentren en el buffer de trazadoCF12="TRACE B;" <--- Comienza el trazado desde la instrucción más antigua en el buffer de trazadoAF1="^wr;" <--- Igual que F2AF2="^wd;" <--- Aparece o desaparece la seccion de DatosAF3="^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 textoAF8="^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=OFFMONITOR=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 SICEwl = Aparece o desaparece una seccion con las variables localeswc 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 salidasLines 25/43/50/60 = Indica el nº de lineas que queras que aparezcan en la ventanafaults 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] |