Restaurar archivos ocultos

¡Aaaah, los disquetes!… Qué recuerdos. Esos 1.44 MB de almacenamiento infinito donde cabían todos tus documentos de Word; de tantos colores, con sus pegatinas donde apuntabas qué contenían… Tecnología obsoleta. Ahora llevamos dispositivos de almacenamiento USB de 8 gigas o más en lo que ocupa una llave. Sin embargo, de aquellos toscos e ineficientes soportes magnéticos a los actuales, hemos perdido una funcionalidad muy útil por el camino: la pestañita de protección contra escritura. Algo simple y de baja tecnología, pero a su vez de gran importancia.

Sí, es cierto, hoy en día también existen algunos USB con un pequeño switch que los convierte en dispositivos de sólo lectura, al estilo de los viejos disquetes, pero son raros de encontrar. Lo cierto es que la inmensa mayoría de memorias USB están totalmente desprotegidas ante ordenadores desconocidos, lo cual ha hecho que proliferen como moscas los famosos virus de pendrive: esos que se encuentran latentes en el ordenador y te meten todo tipo de mierda en cuanto lo enchufas. Los hay que modifican el archivo «autorun» para que el virus se ejecute automáticamente la próxima vez que uses el USB, los hay que abogan por que tú, pobre inocente, los abras con diferentes artimañas, etc. Y ni que decir tiene que, cuando ese infecto pendrive vuelve a tu ordenador personal, o tienes un buen antivirus alerta o… estás jodido. También cabe la posibilidad de abrirlo con otro sistema operativo que no sea Windows y borrar las amenazas —porque, hasta ahora, la gran mayoría de estos virus (por no decir todos) son para Windows (lo que no quiere decir que los otros sistemas sean invulnerables)—.

Existe software para bloquear la escritura y la ejecución de programas en las unidades extraíbles. Ni siquiera se necesita este software: modificando una clave en el registro de Windows podemos obtener el mismo resultado. Pero todo método que se base en el software para lograr este objetivo es totalmente inútil por la sencilla razón de que sólo nos sirve para nuestro propio ordenador personal. En un ordenador ajeno, la protección por hardware es la única que funciona. El caso es que la metemos por todas partes sin protección (la memoria USB). Y mientras nadie se decida a fabricar el condón USB —esto es sólo un concepto—, tenemos que arreglárnoslas tirando de antivirus y restaurando los pequeños destrozos que sufren nuestros pendrives.

Uno de estos pequeños cabrones troyanos pululan con nocturnidad por los ordenadores de la facultad de Almudena. El modus operandi del susodicho es el siguiente: le otorga los atributos de archivo «oculto» y «del sistema» a las carpetas presentes en la unidad extraíble; después, crea ejecutables con el virus y los renombra para que tengan el mismo nombre que tus carpetas. El resultado es que, cuando vuelves a tu ordenador, no ves tus carpetas, sino virus con el mismo nombre. El antivirus los detecta sin problemas y los borra. Sin embargo, todas las carpetas siguen ocultas y cualquiera las daría por eliminadas.

Obviamente, es un verdadero coñazo dedicarse a cambiar los atributos de las carpetas ocultas cada vez que este virus entra en el pendrive, y tampoco es algo sencillo para un usuario medio. Por ello, he realizado un pequeño script en VBScript que automatice esta tarea. El código es el siguiente:

[code language=»vb»]Dim fso, folder, ruta, result, path

path = "."
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
ruta = folder.path

result = MsgBox("A continuación se va a proceder a eliminar los atributos de todos los archivos de la siguiente carpeta y todas sus subcarpetas:" & vbNewLine & vbNewLine & ruta & vbNewLine & vbNewLine & "¿Desea proceder?", vbOKCancel + vbQuestion, "Restaurar archivos ocultos")
If result = 1 Then
ModifyAttributes(path)
result = MsgBox("Finalizado con éxito", vbOKOnly + vbInformation)
Else
result = MsgBox("No se ha producido ningún cambio", vbOKOnly + vbExclamation)
End If

Function ModifyAttributes(path)
Dim fso, folder, subFlds, subFiles, fld, file

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)

Set subFiles = folder.Files
For Each file in subFiles
file.attributes = 0
Next

Set subFlds = folder.SubFolders
For Each fld in subFlds
fld.attributes = 0
ModifyAttributes(fld)
Next
End Function[/code]

El script podéis descargarlo aquí o copiar el código anterior en un archivo de texto. En ambos casos tendréis que cambiar la extensión del archivo de «.txt» a «.vbs». Para utilizarlo, basta con copiarlo a la unidad extraíble donde se encuentren los archivos ocultos y ejecutarlo allí. Lo que hace es recorrer recursivamente el directorio donde se encuentra y todos los subdirectorios y borrar los atributos de todos los archivos y carpetas.

Cómo conectarnos con seguridad a una red WiFi abierta

En ocasiones, podemos querer conectarnos a una red WiFi abierta; existen dos escenarios, a saber: (1) estamos en la universidad/cafetería/… de turno o (2) somos muy majos y queremos dejar nuestra red abierta para el disfrute de los demás. Obviamente, hacerlo sin seguridad es un suicidio porque cualquiera puede estar monitorizando nuestro tráfico y, quién sabe, intentando robar contraseñas, etc. Por ello, a continuación voy a pasar a explicar cómo añadir nosotros mismos una capa de seguridad para utilizar redes WiFi abiertas con tranquilidad (aunque este método tampoco es 100 % seguro, digamos que sí en un 99 %, a no ser que nos encontremos en una DEFCON o similar…).

Ambos escenarios descritos requieren un servidor SSH que puede estar disponible en nuestro router WiFi, o bien podemos poner nosotros mismos una máquina vieja con Linux en nuestra red (existen excelentes tutoriales para todo tipo de servidores). En el escenario (2) no se necesita nada más porque el servidor se encontrará en la misma red desde la que nos conectamos (la de casa). En el (1) accederemos a ese servidor a través de Internet, así que se hace difícil de localizar debido a que los ISP proporcionan direcciones IP dinámicas; luego necesitaremos un servicio como DynDNS (que puede configurarse en la mayoría de los routers, por no decir en todos) para disponer de un nombre de host fijo con el que «llamar a casa».

El método que utilizaremos se denomina Dynamic Port Forwarding y nos sirve para enviar todas nuestras conexiones a través de un túnel SSH cifrado que actúa como proxy SOCKS local. Esto, que probablemente sonará a chino, es algo así:

Las conexiones que antes se realizaban en claro y que podían ser interceptadas durante su periplo aéreo, ahora viajan a través de un túnel cifrado hasta un servidor SSH desde el que se redirigen a su destino final. Este esquema es para el escenario (1); en el escenario (2), el router y el servidor SSH son el mismo equipo. Ahora bien, ¿qué aplicaciones y configuraciones necesitamos?

En Windows

Existen aplicaciones que ya implementan la posibilidad de utilizar un proxy SOCKS, como Firefox o Skype. Otras en cambio no: Tweetdeck, etc. En cualquier caso, aunque todas las aplicaciones lo soportasen, habría que ir una por una configurándolas a tal efecto. En su lugar, vamos a ver cómo utilizar una herramienta llamada proxyficador que se encarga de monitorizar las actividades de red de todos los programas y redirigir ese tráfico a un servidor proxy. En concreto, el software necesario es el siguiente:

  • PuTTY: necesario para abrir el túnel SSH.
  • Proxyfier: la misma palabra lo dice. No es freeware, pero no he encontrado nada mejor. En otros programas, como FreeCap, es necesario hacer un perfil para cada aplicación. Proxyfier, en cambio, redirige automáticamente todo el tráfico de cualquier aplicación si así se lo indicamos.

El primer paso consiste en abrir la conexión SSH indicando que se desea reenviar a través de dicha conexión todo el tráfico destinado a un puerto (para nuestros ejemplos utilizaremos el puerto 8080). Para ello, abrimos PuTTY y ponemos la ruta al servidor SSH en el campo Host Name (ejemplos: servidorssh.dyndns-home.com desde fuera de la red, 192.168.1.1 desde dentro de la red).

A continuación, en la columna de la izquierda desplegamos Connection > SSH y pinchamos en Tunnels. Una vez allí, (1) indicamos el puerto, (2) marcamos la opción Dynamic, (3) añadimos la opción y (4) abrimos la conexión. Se nos pedirá que aceptemos el certificado (¡hay que revisar bien que es el auténtico!) junto con el nombre de usuario y la contraseña (previamente configuradas en el servidor SSH).

El siguiente paso es instalar y configurar Proxyfier. En primer lugar configuramos las reglas de proxyficación.

En el cuadro de diálogo que se abre, marcamos Process All except the following + manually proxyfied, lo que significa que proxyficará todo el tráfico salvo la lista de exclusiones siguiente. Aquí tenemos que añadir, aparte del loopback que ya viene por defecto, la propia aplicación PuTTY para no crear un bucle sin sentido, así que presionamos Add.

En el siguiente diálogo, (1) ponemos un nombre representativo, (2) añadimos el ejecutable de PuTTY y (3) presionamos OK.

Ahora le toca el turno a las opciones del proxy.

Para añadir el proxy que vemos en la siguiente imagen, presionamos Add.

En el diálogo emergente, (1) indicamos la dirección local como dirección del proxy, (2) el puerto, (3) el protocolo y (4) OK.

Para lograr mayor privacidad, si queremos que las peticiones DNS también viajen por el túnel y que nadie sea capaz de ver qué sitios visitamos, acudiremos a la pestaña de resolución de nombres.

Allí tenemos que marcar la opción Remotely para lograr lo descrito antes.

¡Y listo! Al cerrar el programa se minimiza a la barra de tareas y hace su trabajo en silencio. Ya podemos navegar tranquilamente.

En Linux

Para establecer la conexión SSH, basta con abrir una terminal y escribir el siguiente comando:

[code light=»true»]ssh -D 8080 <nombre_de_usuario>@<servidor_SSH>[/code]

No he encontrado ningún programa de Linux que redirija el tráfico de cualquier programa automáticamente hacia el proxy SOCKS. Lo más parecido a Proxyfier es el proyecto Kernel Socks Bouncer, pero es un módulo del kernel y no lo he probado. Sin embargo, tenemos otras soluciones menos versátiles pero fáciles de utilizar como ProxyChains y tsocks. Para utilizarlos, hay que editar el archivo de configuración correspondiente (/etc/proxychains.conf y /etc/tsocks.conf respectivamente) e incluir el servidor (127.0.0.1) y el puerto (8080). Después, para que una aplicación utilice el túnel cifrado basta con llamarla por línea de comandos de la siguiente manera:

[code light=»true»]tsocks <aplicación> [argumentos][/code]

Image maps con CSS

En ocasiones, insertamos imágenes en los artículos del blog y nos gustaría explicar elemento a elemento lo que nuestros lectores verán en ellas (como le ha pasado a nuestro amigo EC-JPR en su último artículo). La mejor forma de realizar esto es mediante los llamados mapas de imágenes con CSS (no confundir con los mapas HTML —etiqueta <map>—, también interesantes, pero menos potentes). Para ver qué es esto, nada mejor que acudir directamente a un ejemplo.

Existen muchísimos tutoriales sobre este tema. Una simple búsqueda en Google nos arroja un montón de resultados interesantes como el muy recomendable How to create an image map using CSS: quizás el mejor que podréis encontrar —precisamente, cuenta cómo llegar a crear el ejemplo anterior—. Os animo a explorar otros tutoriales en los que hallaréis buenas ideas.

Yo nunca he necesitado un mapa de imagen, y es por ello que he adaptado el ejemplo de más arriba a la necesidad de EC-JPR a modo de ejercicio. Lo dejo aquí para posterior uso mío, por si lo necesitase más adelante, y por supuesto para todos vosotros. Tiene algunos cambios/mejoras con respecto al ejemplo.

Código HTML que va insertado en el cuerpo del post:

[code lang=»html» collapse=»true»]<dl id="ambumap" class="aligncenter">
<dt id="title" title="Ambulancia">
<span>Ambulancia</span>
</dt>
<dd id="ambu1">
<p title="Botellas de oxígeno medicinal"><span>Las <strong>botellas de oxígeno medicinal</strong> están conectadas a la instalación de la furgoneta para alimentar las distintas tomas de pared.</span></p>
</dd>
<dd id="ambu2">
<p title="Collarines, férulas"><span>Los <strong>collarines</strong> mantienen rígido el eje cabeza-tronco, algo crucial si no queremos desnucar a un accidentado con fracturas vertebrales altas. Y las <strong>férulas</strong>, que inmovilizan una extremidad fracturada.</span></p>
</dd>
<dd id="ambu3">
<p title="Colchón de vacío"><span>Un <strong>colchón de vacío</strong> es un colchón lleno de bolitas de plástico que se adapta a la forma del enfermo, y que se queda rígido cuando lo vaciamos de aire. Es muy útil para transportar a pacientes que no se pueden menear demasiado (no conviene tener danzando las fracturas de un politraumatizado).</span></p>
</dd>
<dd id="ambu4">
<p title="Gasas, vendas, goteros…"><span><strong>Sueros</strong> de todos los tipos y sabores: <a href="http://www.flickr.com/photos/ec-jpr/4976465960/" title="Distintas bolsas de fluidos IV [Flickr]">salino, glucosado, Plasmalyte, Gelafundina</a>, etc. Y, a su lado, material de curas: <strong>vendas, gasas, Betadine, tensiómetro</strong>… pero esto sale mejor en otra foto.</span></p>
</dd>
<dd id="ambu5">
<p title="Tablero espinal, camilla de cuchara"><span>Un <strong>tablero espinal</strong> (porque, si la columna vertebral está jodida, el blando colchón de la camilla no es la mejor opción) y una <strong>camilla de cuchara</strong>, que es como un tablero pero se abre por el medio, para recoger al paciente del suelo <a href="http://www.youtube.com/watch?v=Igv3tEYQXs4">moviéndolo lo menos posible</a>. Como curiosidad, son de plástico para poder hacer radiografías sin necesidad de retirarlas.</span></p>
</dd>
<dd id="ambu6">
<p title="Mochilas de ataque"><span>Unas <strong>mochilas &#8220;de ataque&#8221;</strong>, con material de primera intervención.</span></p>
</dd>
<dd id="ambu7">
<p title="Silla para rescate en edificios"><span>Una <strong>silla plegable</strong> para evacuar al enfermo desde un edificio, porque la camilla no cabe en el ascensor.</span></p>
</dd>
<dd id="ambu8">
<p title="Cascos y gafas de protección"><span><strong>Cascos y gafas de protección</strong>.</span></p>
</dd>
<dd id="ambu9">
<p title="Respirador"><span><strong>Respirador</strong>.</span></p>
</dd>
<dd id="ambu10">
<p title="Control luces y ventilación"><span><strong>Control luces y ventilación</strong>.</span></p>
</dd>
<dd id="ambu11">
<p title="Lámparas, asideros"><span><strong>Lámparas, asideros…</strong>.</span></p>
</dd>
</dl>[/code]

Código CSS que va insertado en un campo personalizado del post:

[code lang=»css» collapse=»true»]/* set the size of the definition list <dl> and add the background image */
#ambumap {
display:block;
width:450px;
height:579px;
background:url(https://www.enchufa2.es/wp-content/uploads/2010/09/4689detras.jpg) no-repeat;
position:relative;
font-size:12px;
}
#ambumap p {
margin:0;
}
/* set up the definition list <dt><a> to hold the background image for the hover state */
#ambumap #title {
display:block;
width:450px;
height:0;
padding-top:579px;
overflow:hidden;
position:absolute;
left:0;
top:0;
background:transparent url(https://www.enchufa2.es/wp-content/uploads/2010/09/4689detras.jpg) no-repeat;
}
/* the hack for IE pre IE6 */
* html #ambumap #title {
height:579px;
he\ight:0;
}
/* the <dt><a> hover style to move the background image to position 0 0 */
#ambumap #title:hover {
background-position: -450px 0;
z-index:10;
}
/* place the <dd>s in the correct absolute position */
#ambumap dd {
position:absolute;
padding:0;
margin:0;
}
#ambumap #ambu1 {
left:18px;
top:259px;
z-index:20;
}
#ambumap #ambu2 {
left:100px;
top:79px;
z-index:20;
}
#ambumap #ambu3 {
left:94px;
top:252px;
z-index:20;
}
#ambumap #ambu4 {
left:100px;
top:145px;
z-index:20;
}
#ambumap #ambu5 {
left:268px;
top:155px;
z-index:20;
}
#ambumap #ambu6 {
left:288px;
top:180px;
z-index:20;
}
#ambumap #ambu7 {
left:354px;
top:184px;
z-index:20;
}
#ambumap #ambu8 {
left:343px;
top:88px;
z-index:20;
}
#ambumap #ambu9 {
left:200px;
top:130px;
z-index:20;
}
#ambumap #ambu10 {
left:166px;
top:160px;
z-index:20;
}
#ambumap #ambu11 {
left:176px;
top:84px;
z-index:20;
}
/* style the <dd><a> links physical size and the background image for the hover */
#ambumap #ambu1 p {
display:block;
width:78px;
height:228px;
z-index:20;
}
#ambumap #ambu2 p {
display:block;
width:70px;
height:85px;
z-index:20;
}
#ambumap #ambu3 p {
display:block;
width:44px;
height:85px;
z-index:20;
}
#ambumap #ambu4 p {
display:block;
width:51px;
height:73px;
z-index:20;
}
#ambumap #ambu5 p {
display:block;
width:20px;
height:205px;
z-index:20;
}
#ambumap #ambu6 p {
display:block;
width:35px;
height:180px;
z-index:20;
}
#ambumap #ambu7 p {
display:block;
width:80px;
height:200px;
z-index:20;
}
#ambumap #ambu8 p {
display:block;
width:85px;
height:85px;
z-index:20;
}
#ambumap #ambu9 p {
display:block;
width:56px;
height:32px;
z-index:20;
}
#ambumap #ambu10 p {
display:block;
width:100px;
height:25px;
z-index:20;
}
#ambumap #ambu11 p {
display:block;
width:100px;
height:40px;
z-index:20;
}
/* style the span text so that it is not initially displayed */
#ambumap p span {
display:none;
}
/* show border when hovered */
#ambumap p:hover {
border:1px solid white;
}
/* define the common styling for the span text */
#ambumap p:hover span {
position:absolute;
width:320px;
display:block;
background:#eee;
color:#000;
border:1px solid #000;
padding:5px;
}
/* move the span text to a common position */
#ambumap #ambu1 p:hover span {
left:32px;
top:248px;
}
#ambumap #ambu2 p:hover span {
left:-50px;
top:105px;
}
#ambumap #ambu3 p:hover span {
left:-44px;
top:105px;
}
#ambumap #ambu4 p:hover span {
left:-50px;
top:93px;
}
#ambumap #ambu5 p:hover span {
left:-218px;
top:225px;
}
#ambumap #ambu6 p:hover span {
left:-238px;
top:200px;
}
#ambumap #ambu7 p:hover span {
left:-304px;
top:220px;
}
#ambumap #ambu8 p:hover span {
left:-293px;
top:105px;
}
#ambumap #ambu9 p:hover span {
left:-150px;
top:52px;
}
#ambumap #ambu10 p:hover span {
left:-116px;
top:45px;
}
#ambumap #ambu11 p:hover span {
left:-126px;
top:60px;
}[/code]

Resultado:

Ambulancia

Las botellas de oxígeno medicinal están conectadas a la instalación de la furgoneta para alimentar las distintas tomas de pared.

Los collarines mantienen rígido el eje cabeza-tronco, algo crucial si no queremos desnucar a un accidentado con fracturas vertebrales altas. Y las férulas, que inmovilizan una extremidad fracturada.

Un colchón de vacío es un colchón lleno de bolitas de plástico que se adapta a la forma del enfermo, y que se queda rígido cuando lo vaciamos de aire. Es muy útil para transportar a pacientes que no se pueden menear demasiado (no conviene tener danzando las fracturas de un politraumatizado).

Sueros de todos los tipos y sabores: salino, glucosado, Plasmalyte, Gelafundina, etc. Y, a su lado, material de curas: vendas, gasas, Betadine, tensiómetro… pero esto sale mejor en otra foto.

Un tablero espinal (porque, si la columna vertebral está jodida, el blando colchón de la camilla no es la mejor opción) y una camilla de cuchara, que es como un tablero pero se abre por el medio, para recoger al paciente del suelo moviéndolo lo menos posible. Como curiosidad, son de plástico para poder hacer radiografías sin necesidad de retirarlas.

Unas mochilas “de ataque”, con material de primera intervención.

Una silla plegable para evacuar al enfermo desde un edificio, porque la camilla no cabe en el ascensor.

Cascos y gafas de protección.

Respirador.

Control luces y ventilación.

Lámparas, asideros….

Para incluir el código CSS necesario, hago uso del plugin para WordPress Per-Post CSS. Podéis descargarlo aquí, porque el original tiene un pequeño error.

Windows fuerza a que Firefox busque con Bing (revisited)

Hablábamos el otro día de que, a través de recientes actualizaciones, Microsoft está forzando a Firefox a realizar búsquedas en Bing cuando introducimos términos en la barra de direcciones, cuando por defecto se utiliza Google. Bien, pues parece que el problema no termina con desinstalar la actualización que mencionábamos en el post anterior. A muchos usuarios nos ha vuelto a aparecer el problema y no es plan de dejar de actualizar Windows.

Gracias a la respuesta de un usuario en los foros de Mozilla, encuentro la solución definitiva, que pasa por modificar el registro según los siguientes pasos:

  1. Abrir el Edi­tor del Re­gis­tro de Win­dows (te­clear re­ge­dit en la caja Bus­car del menú Inicio en Vista/Win­dows 7).
  2. Na­ve­gar hasta la si­guien­te rama del re­gis­tro: HKE­Y_­LO­CA­L_­MA­CHI­NE \ SOFT­WA­RE \ CurrentControlSet \Services \ TCPIP \ Parameters
  3. Buscar el valor lla­ma­do ICSDomain y hacer doble click sobre él.
  4. Borrar la información del valor (que será «mshome.net») y presionar Aceptar.
  5. Reactivar el adaptador de red. Para ello…
    1. En el Centro de redes y recursos compartidos, en el menú de la izquierda, seleccionar Cambiar configuración del adaptador.
    2. Sobre el adaptador en uso (la interfaz wireless si os conectáis vía inalámbrica o la Ethernet si os conectáis por cable), botón derecho del ratón y Desactivar.
    3. De nuevo botón derecho y Activar.

La versión para tontos/vagos (elegir según proceda) de los pasos 1-4 consiste en descargar este fichero, cambiarle la extensión de .txt a .reg y ejecutarlo.

Forzar la recarga de los elementos de una página web con Firefox

Cuando visitamos una página web, nuestro navegador guarda en los archivos temporales todos aquellos elementos que son susceptibles de no cambiar mucho: básicamente imágenes, hojas de estilos CSS y archivos JavaScript. Esto agiliza las sucesivas visitas a esa web, puesto que todos esos elementos ya están almacenados y no tienen que volver a ser descargados a corto plazo. A largo plazo, lógicamente, serán renovados. Sin embargo, a veces, puede que necesitemos que se recarguen estos archivos inmediatamente para reflejar cambios recientes. Por ejemplo, si tenemos un blog y hemos modificado su aspecto, obviamente querremos ver el resultado al cargar de nuevo la página. Para esta tarea, al menos en Firefox, el botón de recargar o los comandos F5 y Ctrl+R no sirven. En cambio, la combinación de teclas Ctrl+F5 sí que fuerza a que el navegador recargue todos los elementos de una web. Otra opción igualmente válida es hacer click en el botón de recargar mientras mantenemos pulsada la tecla Shift.