lunes, 15 de diciembre de 2008

Metiéndonos con 0s y 1s

Thunder [yuniet02015@hab.jovenclub.cu]

Un salu2 a todos los fieles lectores de BlackHat, una vez más...aquí estamos, y voy a empezar este articulo con una pregunta:
Al cambiar la extensión de un archivo: ¿el archivo queda inutilizable?

INTRODUCCION

No se a cuantos, cuantas veces, les ha hecho falta cambiarle la extensión a algún archivo, no se, cuantos motivos...desde simple tarequeo a motivos investigativos, escondedera... no se... la cosa es que nuestro querido Windows esta programado para que cada vez que queremos hacer semejante cosa, se nos avise del “peligro” que corre nuestro archivo si hacemos esto:

Cambiar Nombre

Cuando cambiamos la extensión de cualquier archivo, Windows siempre nos alerta de la posibilidad de que el archivo quede inutilizable, lo cual es incierto.

-Como? Me están metiendo mentira?...que pasaje...

Bueno, en verdad esto lo que quiere decir es que el archivo, en este caso un archivo txt, no podrá ser abierto nuevamente con el bloc de notas al hacer doble clic en el, o sea, que dicho archivo se retira de la familia de los ficheros del bloc de notas o otra familia... no se... la que le pongamos. Ahora, al tener texto “corriéndole en las venas”, no importa que lo haya “adoptado” otra “familia”, nuestro archivo siempre será “un txt” (si me entendieron la metáfora). Por lo que si le volvemos a cambiar la extensión a nuestro querido archivo a “.txt”, será reconocido nuevamente como un archivo de bloc de notas y todo estará igual que siempre, por lo que...nuestro archivo no quedo inutilizable, así que lo que realmente te dice ese mensaje es que al cambiarle la extensión a un archivo por otra, puede quedar inutilizable por el hecho de que al hacer doble clic no abrirá la aplicación correspondiente, solo eso, por lo que no quiere decir que se perderá el archivo o aún que quedara corrupto.

Ahora, si no eres de estas personas que cambian las extensiones de sus archivos frecuentemente, si quieres puedes dejar este escrito aquí y seguir con el otro articulo de la revista..., en cambio, si como yo, eres de los que cambian con bastante frecuencia las extensiones, y no soportas la insistente “advertencia” de Windows al hacerlo, pues esto es para ti. Vamos a ver como podemos, con un poco de Ingeniería Inversa, suprimir el molesto mensajito que nos enseña nuestro queridísimo Win, de manera que nunca más nos vuelva a molestar...jeje.

PRIMERO LO PRIMERO

Lo principal es encontrar el archivo que produce el comportamiento indeseado. Esto se aplica para cualquier comportamiento, aunque en este caso en especial será para el mensaje en cuestión. Al ser un mensaje de la interfaz de Windows, no puede estar muy lejos del grupo de conocidos:
-explorer.exe, shell32.dll y otros personajes más del directorio System32

Lo más simple para encontrar las cadenas de texto, es utilizando una aplicación que pueda realizar búsquedas de cadenas ASCII y Unicode dentro de los archivos como Hex Workshop, WinHex, o cualquier otro editor Hexa. La siguiente imagen corresponde a un fragmento de shell32.dll.

POR DONDE VIENE LA COSA?

Ahora que ya conocemos el archivo, debemos saber como se genera ese comportamiento. Abrimos la librería con un desensamblador como W32Dasm o OllyDbg, aquí con entender un mínimo de lenguaje ensamblador la secuencia es lógica. Primero buscamos la ubicación de la cadena respectiva:

Aunque hay muchas coincidencias que hacen referencia a la cadena buscada, debemos seguir buscando hasta encontrar una que haga un PUSH a la pila del título, mensaje y tipo de ventana de mensaje a la vez, esto significaría algo (aunque probablemente no en el mismo orden) como:

PUSH "Cambiar nombre"
PUSH "Al cambiar la extensión, el archivo puede..."
PUSH <mensaje_aceptar_cancelar>
CALL libreria.mostrar_mensaje

Por ejemplo, para realizar un ciclo FOR desde uno a diez utilizando una variable VAR sería "1 10 FOR VAR" a diferencia de lo que habitualmente conocemos "FOR VAR=1 TO 10" o más tradicionalmente "for (VAR=1;VAR<=10;VAR++)".
Justamente luego de algunas pruebas encontramos un código sospechoso. Este código se visualiza mucho mejor gracias al analizador y debugger de código OllyDbg:

Para verlo de una forma mas “evidente”:

MODIFICANDO CÓDIGO

Entonces, ¿qué pasaría si cambiamos esa CALL por NOP (o sea, no realizar nada). Pues probablemente resolveríamos el problema, sin embargo no sería una solución elegante, pues la pila quedaría con argumentos no utilizados que podrían provocar excepciones luego. Una mejor solución será que busquemos más arriba en el código la parte donde se hace el salto a la dirección 7CAD233A ("la extensión sigue igual") o se sigue al CALL ("se cambió la extensión") en la dirección 7CAD2329, para de esta forma invertir dicho salto y hacer que siempre vaya a la primera respuesta, o sea, que siempre salte a la línea 7CAD233, la línea de la parte “buena”. En la imagen sale resaltada la instrucción que debemos modificar:

O sea, cambiamos JE por JMP. Un salto incondicional JMP que le dice a Windows que la extensión no fue modificada, por lo tanto debe cambiar el nombre de archivo sin advertirnos lo que sucederá si cambiamos la extensión...jeje.

Listo, ahora guardamos los cambios en la dll. Si no hubiéramos usado OllyDbg deberíamos haberlos realizado por medio de un editor hexa, pero en nuestro amigo OllyDbg es de manera directa:

APLICANDO LOS CAMBIOS

Ahora reemplazamos el archivo utilizando alguna utilidad como ERD Commander 2005, HirensBoot, o la que se, luego reiniciamos la PC de manera normal

SE ACABO LA COSA?

Finalmente comprobamos el funcionamiento de los cambios realizados a la librería shell32.dll.

Parece que esto sería la despedida de la advertencia de cambio de extensión, probablemente nunca más la veremos aunque, claro, podría volver en futuras reinstalaciones del sistema.

PALABRAS FINALES

De una forma relativamente simple, logramos modificar el comportamiento en las bases del sistema, sin influir en su estabilidad. La versión utilizada en este artículo fue Windows XP Professional SP2. Las direcciones internas de los archivos como las librerías y otros archivos del sistema cambian entre las versiones de Win, así como en cada PC, aunque las modificaciones pueden aplicarse de igual forma, pero las referencias no serán iguales. Bueno nada, espero que les halla gustado deshacerse de este fatídico mensaje y...en fin...nos vemos en otra.



Artículos relacionados


No hay comentarios: