Erwin.Ried.cl / Documentos / Cracking /
¿Debe escribir un nombre de archivo?

Desde las primeras versiones de Windows hasta las más actuales existe una absurda limitación que impide escribir un nombre de archivo o directorio que comience con un punto. Este documento describe una forma de solucionar este error de una manera definitiva. (11/03/2007 03:03 AM)


Nota
Las correcciones de los problemas que se enumeran a continuación no pueden ser publicadas en forma de un archivo modificado o instalador, pues así se violaría el punto cuarto "LIMITACIONES EN MATERIA DE INGENIERÍA INVERSA, DESCOMPILACIÓN Y DESENSAMBLAJE." y el punto seis "SEPARACIÓN DE COMPONENTES." del acuerdo de licencia del sistema operativo Windows, aceptado al momento de la instalación. Sin embargo, mi idea es mostrar las formas en que podrían ser reparadas, en forma de conocimiento computacional general.


En general, este documento tiene muchos aspectos relacionados con el documento titulado Al cambiar la extensión: ¿el archivo queda inutilizable?. Puede considerar ese documento para consultar detalles de los procedimientos señalados en el documento actual.


1. Primero lo primero

Lo principal es encontrar el archivo que produce el comportamiento indeseado. Podemos notar que la limitante de que no pueda colocarse un punto al comienzo del nombre de un archivo o carpeta es simplemente una limitante de la interfaz de usuario y no de Windows pues desde la consola de comandos todo funciona normalmente como debería:



Sin embargo, con solo renombrar el archivo directamente desde la interfaz de ventanas de Windows (explorer.exe) obtenemos el siguiente error:



Como vimos en un tutorial anterior, el cambio de nombre de archivos y carpetas es delegado a shell32.dll. Aunque esta librería proporciona acceso al sistema de ficheros solamente, ella misma no es la encargada de trabajar con el sistema de archivos del disco.


2. Dentro de la librería

Buscando dentro de la librería las instrucciones que producen el comportamiento indeseado utilizando W32Dasm, encontramos la siguiente secuencia:



Aunque hay una comparación antes del mensaje, si vemos la parte superior se hace referencia a dos direcciones de donde podría provenir la llamada a este código. Estas dos direcciones deben ser las dos condiciones que puede gatillar el mensaje las cuales probablemente deben ser "escribió un punto al comienzo del archivo" y "no escribió nada como nombre".

Revisemos las llamadas en busca de la comprobación al respecto de cuando "escribió un punto al comienzo del archivo" pues modificar el salto antes de la pregunta probablemente afecte a las dos condiciones y esto no es lo que deseamos.


3. Analizando el comportamiento

En la segunda llamada podemos ver el siguiente codigo en OllyDbg:



Añadí algunos comentarios al código (en la última columna de la imagen) para facilitar la comprensión del código.

Si razonamos unos segundos, la comparación es verdadera cuando el contenido de la memoria especificada es igual a 2E. En números decimales ese valor corresponde al 46, y en ASCII ese valor es un punto.

Entonces, si el primer caractes es un punto el salto se ejecuta y ahí mostramos el mensaje de error que vimos anteriormente.


4. Modificando el comportamiento

Si la comparación es verdadera cuando el contenido de la memoria especificada es igual a 2E, es decir un punto en decimal entonces ¿Qué pasaría si cambiaramos esa comparación con un espacio, que en decimal será 32 y en hexagesimal 20?.

Todo esto asumiendo que la función que es llamada antes de la comparación tiene por objetivo borrar los espacios del comienzo y final del nombre de los archivos o carpetas, es decir como una especie de TRIM.

De esta forma, el código resultante, luego de la modificación sería similar a:




5. Aplicando los cambios al sistema

Ahora reemplazamos el archivo utilizando alguna utilidad como ERD Commander 2005, y posteriormente, reiniciamos el equipo de manera normal:





6. ¿Trabajo terminado?

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



Una nueva modificación realizada correctamente a nuestro sistema, todo con el fin de lograr la mayor comodidad posible al usar nuestro equipo.


7. Conclusiones

De una forma relativamente simple, logramos modificar el comportamiento bases del sistema, sin influir en su estabilidad.

Una consideración importante es que la versión utilizada en este artículo fue Windows XP Home SP2. Las direcciones internas de los archivos como las librerías y otros archivos del sistema cambian entre las versiones Home y Professional, al igual que en las con o sin SP2, SP1 y también otras versiones basadas en el nucleo de Windows NT, como Windows 2000 o Windows 2003. Aunque las modificaciones pueden aplicarse de igual forma, pero las referencias no serán iguales.

Debo añadir que en las versiones beta de Windows Vista que he probado, esta limitación se eliminó, por lo que hacer este procedimiento probablemente no sea necesario en un futuro próximo.

Haga clic sobre una de las estrellas para calificar este artículo.

Opiniones y comentarios (Escribir un nuevo comentario)
Hola erwin, ya nos conocemos... Soy Manolo, de españa. Oye, gracias por la solución, está genial que enseñes estas cosas en tu web! pero prefiero hacerlo desde la consola
Escrito por Manolo (25/01/2008 03:36 PM)
oass!!la jodio compadre no sabia que se podian hacer estas cosasss???me resulto y eso queno kxo ni una de informaticaaa!!!!!jajajajaj adiossssssssssssssssssss!!!!!!
Escrito por sebachhh (25/05/2006 04:34 PM)

Copyright © 2013 por Erwin Ried.