Archives: mayo 2016

Arreglar problema de texto borroso en Windows 10

Si has actualizado a Windows 10, probablemente hayas notado problemas en la visualización de texto en pantalla, algo que tiene que ver con el DPI (Dots Per Inch) o PPP (Puntos Por Pulgada) del sistema operativo. Aunque por lo general es un ajuste que no se suele modificar al cambiar el software, hay usuarios que reportan fuentes borrosas.

Parece ser que cambios en los DPI del sistema están provocando que algunas fuentes aparezcan borrosas en la interfaz del sistema operativo. La heterogeneidad de este problema  hace que cada caso sea diferente, pero particularmente he experimentado este tipo de problemas en el navegador web, en algunas páginas en concreto, no en todas. También he detectado el mismo problema en las aplicaciones clásicas y los menús de configuración del sistema, mientras que todo funciona perfectamente en las aplicaciones Modern del sistema operativo.

Este error sólo afecta a los usuarios de Windows 10 y no a los de Windows 8 u 8.1. Es extraño ya que estos sistemas comparten una gran cantidad de código, especialmente en lo relacionado con escritorio, fuentes y librerías Modern UI. Claramente Microsoft no ha hecho del todo bien los deberes y su ambición de un único sistema operativo para todos los dispositivos no ha ayudado, creando este tipo de problemas en su nicho de mercado dominante (PC de Escritorio y Portátiles).

Sabiendo de la inexistencia del problema en sistemas Windows 8 y 8.1, hay una aplicación llamada Windows 10 DPI Fix que se encarga automáticamente de aplicar al sistema el método de escalado de fuente de Windows 8 en lugar de utilizar la de Windows 10.

windows-10-dpi-fix

Si tenemos problema con las fuentes borrosas en el sistema, podremos ver cómo con solo ejecutar la herramienta el problema se soluciona y las fuentes dejan de estar borrosas.

Yo personalmente abogo por aplicar una solución particular y focalizada si el problema de las fuentes borrosas no es muy acusado. Con ello quiero decir que si el problema está un conjunto reducido de aplicaciones, las cuales presentan fuentes borrosas, te propongo lo siguiente.

 

Caso práctico

Voy ha plantear un caso particular de una aplicación en la que he sufrido el problema de fuente borrosa. La aplicación en cuestión es XAMPP, la cual en su panel de control, muestra las fuente borrosas.

xampp_windows10_blur

Para los que tenemos una leve miopía es como intentar ver algo lejano sin ponernos las gafas. Algo que resulta bastante molesto... y que perjudica su lectura.

Para solucionarlo ve al ejecutable que lanza la aplicación y dale con el botón derecho a "Propiedades". Se desplegará una ventana, donde hay que seleccionar "Compatibilidad".

compatibilidad_deshabilitar-ajuste-escala

Deberemos marcar  la opción "Deshabilitar el ajuste de escala de la pantalla si se usa la configuración elevada de ppp". Para guardar damos en "Aplicar" y después "Aceptar". Al ejecutar de nuevo la aplicación veremos que el texto es más pequeño (lógico porque hemos deshabilitado el escalado), pero por lo menos no aparece borroso que es nuestro objetivo.

xampp_windows10_no-blur

A efecto de apreciar mejor la diferencia tras aplicar la configuración, os pongo el antes (a la izquierda) y el después (a la derecha). No dudes en hacer click en la imagen para verla con más detalle.

xampp_windows10_difference

Espero que estas propuestas para paliar el problema de los textos borrosos en Windows 10 os sirvan, y sobre todo esperemos que Microsoft haga algo al respecto.

 

Consejos para no infectarte con Malware

Es una realidad, a día de hoy Internet está lleno de malware y cuando navegamos es posible que acabemos descargando y ejecutando este tipo de software.

El malware se define como software que tiene como objetivo infiltrase o dañar un sistema de información sin el consentimiento de su propietario. El término se refiere genéricamente a una variedad de software hostil, intrusivo o molesto.

A pesar de tener nuestro sistema actualizado, nuestro navegador actualizado y tener un antivirus protegiendo la última línea de batalla de los dos anteriores, habitualmente puedes llegar a tener infecciones por malware o simplemente tener un falso positivo, que se define como una detección erróneamente clasificada como malware.

Ante el primer caso, mi consejo es el siguiente: evitad la descarga de contenido procedente de enlaces que referencien a un javascript y no muestren la url final del archivo a descargar. Desconfiad de ellos, porque el script os devolverá el archivo a descargar, pero no sabréis de antemano nada sobre el archivo. Esta técnica se suele usar para proporcionar descargas de malware y variar el fichero (normalmente un archivo.zip) que pase desapercibido por el navegador y el antivirus. Esto no quiere decir que haya sistemas que usen un javascript para servir contenidos de manera legítima y benévola, pero por norma general desconfiad.

Para saber que hay un javascript tras un enlace, es tan fácil como hacer click derecho sobre el enlace y selecciona "Copiar dirección de enlace". Si lo copias en un editor de texto os aparecerá algo parecido a esto:

javascript:void(0);

En vez de algo como esto:

https://mascandobits.es/blog/wp-content/uploads/2015/10/mi_descarga.zip

Una forma mucho más preventiva de bloquear estos elementos, es usar programas como NoScript, que nos permite desactivar el código javascript de las webs que visitemos. En el blog de Víctor Goñi tenéis una somera introducción al uso de NoScript.

En el segundo caso de tener un posible falso positivo, yo recomiendo usar el sentido común (que a veces es el menos común de los sentidos 😉 ). Tu antivirus o navegador pueden detectarlo como potencial malware, pero está en nuestra mano descargarlo. En el caso del antivirus podemos desconectar momentáneamente el antivirus para poder descargarlo y en el caso del navegador siempre podremos forzar la descargar o recuperar el archivo. Alguno me dirá: ¡Estás loco hermano! Pues NO. Mientras no ejecutes el archivo o lo descomprimas, estaremos a salvo.

Malware-PC

Alguno a estas alturas estará pensando, cuál el motivo por el que a pesar de un posible falso positivo decido descargar el archivo. Una de las formas de percibir ingresos extra por las compañías que desarrollan los navegadores y los antivirus, es la de provocar falsos positivos en ciertos archivos para que funcione como medida disuasoria para su descarga. Terceras empresas suelen pagar a navegadores y antivirus para mostrar estos avisos, ya que la descarga de dichos archivos son contrarias a su negocio o le provocan directamente pérdidas económicas. Cracks, Keygens, Scene, Descifrado (Desencriptación) de Sistemas de Información, Herramientas de Ingeniería Inversa... son algunos de los muchos ejemplos en los que se puede dar falsos positivos pagados por empresas. Esto no quiere decir que dentro de estos grupos, haya software con malware, que los hay.

Especulaciones a un lado, tenemos nuestro archivo descargado. Para comprobar que no es malware, hay una prueba sencillísima, abre una nueva pestaña y vuelve a descargar el mismo ficheros sin ejecutarlo. Si el fichero se descargar con el mismo nombre (el segundo fichero tendrá el mismo nombre más "(1)"), es probable que no sea malware. No por ello bajaremos la guardia.

Una forma de clarificar la cosa es pedir una o varias opiniones más sobre el posible archivo cargado con malware. Para ello podemos acceder a Virus Total, dónde podremos pedir que varios motores de antivirus analicen el fichero y nos devuelvan el resultado.

Virus-Total-ESP

 

Caso práctico

Personalmente todo esto que os cuento lo puse en práctica al ir a descargar DVDshrink, un software que permite romper el cifrado de los DVDs comerciales para generar copias de seguridad. Al descargar la última versión del programa, tanto el navegador como el antivirus saltaron.

Inmediatamente comprobé que la descarga del archivo usaba un enlace con javascript. Tras descargarlo una segunda vez, el nombre del archivo cambiaba. Con lo que acudí a Virus Total en busca de respuestas.

malware-malicious-virus

El primer archivo arrojó el siguiente análisis:

Primer análsis (2016-05-08 09:10:57 UTC)

El segundo archivo lo analicé en otro día distinto y no me lo relacionó con el primero que subí:

Segundo análisis (2016-05-11 11:03:18 UTC)

Virus Total genera un SHA256 que identifica unívocamente al archivo, y en este caso no había relación con el primero que subí. Además de todo ello, los resultados variaban y para colmo había alrededor de un 50% de resultados que decían que no era malicioso y el otro 50% decían que sí lo era.

*Nota: Virus Total actualiza los resultados si se vuelve a subir por otros usuarios el mismo archivo

Esto me hizo desconfiar automáticamente. En mi caso basta que 10 de los 56 motores de los antivirus, me devuelvan infección para destruir el fichero sin pensármelo demasiado, si no sé exactamente lo que estoy manejando. El que haya entre 1 y 4 resultados de infección también puede ser que se trate de una infección nueva. En este caso el software ya lo conocía anteriormente y su última versión pone que es del 2014, sería algo raro que tras ese tiempo se tratase de una infección nueva, si hubiese entre 1 y 4 resultados de infección.

Recuerda también que entre los resultados ofrecidos por los distintos motores de los antivirus, puede haber falsos positivos o reportes de infecciones hechos desde la parte heurística de cada motor, que se encarga de detectar posibles amenazas que no estén catalogadas dentro de las bases de datos de cada antivirus.

Al final cada uno tomamos la decisión de ejecutar el archivo y como todo en la vida podemos equivocarnos, a pesar de haber contrastado las fuentes de información para generar una decisión en consecuencia informada y de calidad.

 

Mapeo persistente de dispositivos USB en Linux

Actualmente los sistemas operativos son capaces de detectar y montar dispositivos para poder ser usados por el usuario a través del sistema, haciendo que estos dispositivos conectados al sistema sean accedidos de manera transparente.

En Linux cuando conectamos cualquier dispositivo como un dispositivo USB, el sistema lo mapea automáticamente como un terminal en "/dev". El dispositivo aparece con el prefijo "tty" más un identificador del tipo de conexión que implementa a nivel de hardware el dispositivo (USB, ACM, S, ...) y un número que numera los distintos dispositivos del mismo tipo. Para ver los dispositivos que tiene conectados y mapeados en "/dev" ejecuta los siguientes comandos:

cd /dev   # Movernos a /dev
ls   # Listar elementos del directorio

Debido a que el nombre del mapeo de cualquier dispositivo depende de los dispositivos que haya conectados previamente al sistema operativo, puede resultar complicado automatizar procesos que dependen de dispositivos que pueden ser conectados y desconectados en caliente (mientras el sistema operativo está encendido). Para solucionar el problema vamos a realizar un re-mapeo sobre el mapeo automático que hace el sistema.

Lo primero que hay que identificar es el IDVENDOR y IDPROUDCT del dispositivo que queremos mapear de manera persistente. El IDVENDOR es un número que identifica al fabricante del dispositivo y el IDPRODUCT es otro número que identifica al producto del vendedor. Con estos dos valores, suele ser suficiente para mapear unívocamente dispositivos (a no ser que tengamos varios dispositivos idénticos conectados 🙁 , pero eso también tiene solución 😉 ). Para listar los dispositivos y ver ambos valores ejecuta "lsusb":

lsusb
# Result
Bus 001 Device 004: ID 0846:9041 NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]
Bus 001 Device 005: ID 16d0:0856 MCS 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Detectar cuál es el dispositivo es tan fácil como hacer "lsusb" antes de conectar el dispositivo  y volver a hacer "lsusb" con el dispositivo conectado. El valor del IDVENDOR es el valor comprendido entre el ID y los dos puntos, y el IDPRODUCT el valor comprendido entre los dos puntos y el primer espacio en blanco.

Si necesitamos mapear varios dispositivos de un mismo producto que son de un mismo fabricante, repetiremos el mismo proceso pero listando los puertos conectados y mapedados en "/dev" para conocer el mapeo que le asigna el sistema (ver primer snippet de código) y procederemos a ejecutar el siguiente comando para conocer el el valor SERIAL del dispositivo:

udevadm info -a -n /dev/ttyXXX | grep '{serial}' | head -n1
# Resultado
ATTRS{serial}=="XXXXXXXX"

Donde ttyXXX puede ser ttyUSB0, ttyUSB1, ttyUSB2 ..., ttyACM0, ttyACM1, ttyACM2 ..., ttyS0, ttyS1, ttyS2 ... El valor que nos devuelve de SERIAL es un identificador único para el dispositivo conectado.

Con esta información vamos a crear unas reglas para que al conectar el dispositivo nos realice el mapeo de manera persistente y estática de los dispositivos conectados. Para ello vamos a definir unas reglas UDEV en el siguiente directorio "/etc/udev/rules.d", creando el fichero "99-usb-serial.rules":

sudo nano 99-usb-serial.rules

El fichero lo crearemos con la siguiente estructura si queremos mapear un dispositivo de acuerdo a un un fabricante y producto:

SUBSYSTEM=="tty", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", SYMLINK+="nombre_mapeo_1"
SUBSYSTEM=="tty", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", SYMLINK+="nombre_mapeo_2"
...

Si además necesitas diferencia diversos dispositivos de un mismo fabricante, añade el serial del dispositivo:

SUBSYSTEM=="tty", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", ATTRS{serial}=="XXXXXXXX", SYMLINK+="nombre_mapeo_1"
SUBSYSTEM=="tty", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", ATTRS{serial}=="XXXXXXXX", SYMLINK+="nombre_mapeo_2"
...

Deberemos completar los valores "XXXX" con la información que hemos recogido en los pasos anteriores y guardamos haciendo CTRL+O y salimos con CTRL+X.

El fichero de reglas que hemos definido crea enlaces simbólicos que apuntan a las direcciones de acceso de los dispositivos y dichos enlaces simbólicos siempre apuntarán al dispositivo que hemos definido.

Si tras generar el fichero de reglas, no se realiza el mapeo que hemos definido, prueba conectar y desconectar el dispositivo, o a reiniciar el sistema. Os aparecerá en "/dev" un enlace simbólico con el nombre que hayáis definido en "SYMLINK+"

A la hora de usar estos mapeos desde scripts de Linux, debeís usar el comando:

readlink -f [symbolic_link]

De esta forma se obtiene la ruta completa a donde apunta el enlace simbólico y podremos programar scripts de manera más transparente, gracias al mapeo, el cual  nos generará un enlace simbólico persistente al dispositivo que conectemos.