Cómo recuperar el Grub [Fedora]

Hace un par de meses, me encontraba arrancando con normalidad mi portátil Samsung, que lleva de serie un programa de recuperación, y queriendo entrar la BIOS, toqué el botón equivocado e inicié el modo de recuperación de Samsung.

Como no queria recuperar nada simplemente le di a cancelar y reiniciar lo más rápido que pude y nada más hacer esto, me di cuenta de que directamente me arrancaba desde mi Windows 7, sin ni siquiera poder elegir si quería iniciar desde Fedora.

Tras mucho buscar encontré con la solución, la cual la publico porque me costó bastante encontrar una solución que se adaptase a mi problema además de estar en inglés (y siempre es más cómodo leerlo en español) y quien sabe, puede que el próximo en perder el Grub seas tú.

Recuperando el Grub de Fedora

Como soy muy precabido (y no tenia CDs regrabables) grabé el Fedora (creo que era el 13) en un disco que de milagro volví a encontrar, porque lo tenía perdido por ahí, y ni siquiera me habria imaginado que lo volveria a necesitar (nunca he tenido un problema tan grave como para necesitarlo).

Iniciamos el ordenador desde el disco de Fedora, y en la pantalla principal seleccionamos linux rescue. Acabaremos usando nuestro PC como si de una terminal se tratase, así que esperamos a que se cargue todo pacientemente.

Lo primero de todo, necesitamos saber en qué partición tenemos el sistema operativo (en nuestro caso Fedora), así que para ello, tecleamos:
$ fdisk -l

En mi caso, no me hizo falta montar las particiones, pero si te hiciera falta simplemente creas un directorio y la montas mediante:
$ mkdir /sysimage
$ mount -t ext3 /dev/hda /sysimage

Para lo siguiente, entramos en modo root. Como dije anteriormente, a mi no me hizo falta montar las particiones, así que entré haciendo:
$ chroot /mnt/sysimage
En el caso de que la hubieramos montado, sería con la ruta que pusimos:
$ chroot /sysimage

A continuación vamos a entrar en el grub tecleando sencillamente:
# grub

Buscamos los ficheros de configuración del gestor de arranque:
grub> find /boot/grub/stage1

Esto nos devuelve en dónde se encuentra, en nuestro caso: hd0,4
Establecemos el sistema de arranque sobre la unidad devuelta por el comando find:
grub> root (hd0,4)

Nos devuelve: Filesystem type is ext2fs, partition type 0x83

Finalmente, instalamos el grub sobre la partición de arranque, sobre el primer disco (hd0):
grub> setup (hd0)

Nos devuelve (o debería devolver) algo como:
Checking if “/boot/grub/stage1” exist… yes
Checking if “/boot/grub/stage2” exist… yes
Checking if “/boot/grub/e2fs_stage1_5” exist… yes
Running “embed /boot/grub/e2fs_stage1_5 (hd0)”… 23 sectors are ambedded.
succeeded

Running “install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2
/boot/grub/grub.conf”… succeeded
Done.

Ahora salimos del Grub:
grub> exit

Y reiniciamos:
# reboot

Nota: después de hacer esto, al iniciar por primera vez la partición de Fedora, tendremos que esperar un rato (8 minutos o así tuve que esperar yo) para que se reconfigure.

Filtros de Wireshark más comunes e interesantes


Wireshark (antes conocido como Ethereal) es quizás el analizador de protocolos más conocido por todos, ya que no solo es posible instalarlo en cualquier máquina (Windows, Linux o Mac), sino que gracias a la cantidad de filtros que dispone (de entre otras muchas cosas, pero solo me centraré en esto) nos facilita enórmemente las cosas a la hora de filtrar y visualizar los paquetes capturados deseados.

En este post trataré de poner algunos filtros bastante interesantes que suelo usar, de esta manera, pueden servir de referencia a alguien más si los necesita. El objetivo de este post no es escribirlos todos repito, sino poner los que yo creo que son bastante interesantes. Si quereis que añada alguno más o quereis decir algo, comentad!

Concatenadores y Operadores

Concatenadores

  1. && —> AND lógico (y)
  2. || —> OR lógico (ó)
  3. Operadores

  4. contains —> Contener (se usa cuando no sabemos exáctamente todo. Más abajo hay un ejemplo).
  5. == —> Comparación (igual)
  6. != —> Comparación (desigual)

Nota: Cuando se trata de igualdades, siempre hay dos símbolos. Si la igualdad es un número, se pone este directamente. Si es una cadena de texto, se ha de poner con comillas.

Protocolos

  1. ssl —> Protocolo SSL (capa segura).
  2. telnet —> Telnet.
  3. dns —> DNS.
  4. msnms —> Mensajería Instantánea (Messenger).
  5. ftp —> Protocolo FTP (podriamos ver el nombre de usuario y contraseña).
  6. ftp-data —> Nos permite ver los datos del protocolo FTP.
  7. ip —> Protocolo IP.
  • ip.src==192.168.1.1 —> Dirección IP de Origen.
  • ip.dst==192.168.1.1 —> Dirección IP de Destino.
  1. tcp —> Protocolo TCP
  • tcp.port==80 —> Indicamos los paquetes con el puerto deseado.
  • tcp.srcport==80 —> Indicamos el puerto de origen.
  • tcp.dstport==80 —> Indicamos el puerto de destino.
  1. http —> Protocolo HTTP
  • http.host==”www.google.com” —> Queremos ver los paquetes que tengan a Google como host.
  • http.date==”Wed, 30 Mar 2011 22:40:55 GMT” —> Paquetes con respecto a una fecha
  • http.content_type==”application/json” —> Según el tipo. Hay más tipos, pondremos ejemplos
  • http.content_type==”image/png” —> Imágenes PNG
  • http.content_type==”image/gif” —> Imágenes GIF
  • http.content_type==”image/jpeg” —> Imágenes JPEG
  • http.content_type==”text/html” —> Archivos HTML
  • http.content_type==”text/css” —> Hojas de estilo CSS
  • http.content_type==”video/quicktime” —> Vídeos
  • http.content_type==”application/zip” —> Archivos ZIP
  • http.request.method==”GET” —> Tipo de Petición GET
  • http.request.method==”POST” —> Tipo de Petición POST
  • http.user_agent contains “Mozilla” —> Navegador Mozilla
  • http.request.uri!=*—> Con esto me libro de los paquetes “NOTIFY * HTTP…”
  • http.request.uri matches “[0-9]” —> Uso de expresiones regulares.

Tutorial addon/complemento iMacros de Firefox

Índice:

Dos tipos de referencia: Posición y Tags
Comandos del navegador
Bucles
Conclusión

Hace poco, mientras escribía un post acerca de cómo llenar la base de datos de cuentas basura en una plataforma de registro sin captcha como Prestashop (link) me daba cuenta de lo poderosa que es esta herramienta (incluso más de lo que yo me imaginaba) y como tal, se merece una entrada a modo de tutorial de los comandos y usos básicos e interesantes.

Introducción
iMacros nos permite automatizar tareas en el navegador, como hacer click en determinado sitio, visitar cierta página, introducir texto en alguna caja de texto, y realmente cualquier cosa que podamos realizar desde el navegador en cualquier página web de forma automatizada, incluso permite la realización de bucles.

Dos tipos de referencia: Posición y Tags
Para realizar estas tareas automáticas, tenemos dos tipos de referencias que a la hora de grabar, pueden marcar cierta diferencia, y es bueno conocer ambas para saber cual nos conviene usar en cada momento.

  • Posición:

Esta forma de referencia se basa simplemente en la posición (X,Y) como si de una gráfica de dos dimensiones se tratara. Esto redirige el ratón a cierta posición para realizar un click.

CLICK X=40 Y=61 (hace click en esa posición)
CLICK X=984 Y=14 CONTENT=hola (hace click en esa posición y escribe "hola")

Nota: la posición 0,0 empieza arriba a la izquierda

  • Tags (HTML):

Esta forma de referencia se basa en los tags HTML. Este método permite también clickear, pero se complica mucho más, ya que para clickear en un sitio por ejemplo, realiza lo siguiente:

TAG POS=1 TYPE=SPAN ATTR=TXT:Entradasrecientes

Es mucho más complicado de programar que por posición X,Y pero a la hora de grabar es igual de sencillo.

Primer ejemplo: Búsqueda en el buscador
Para entender mejor ambas formas de referenciar, realizaremos una búsqueda en el buscador de la página, realizando asi de ambas formas lo mismo.

  • Posición:


URL GOTO=http://delanover.com/ (vamos a la página)
CLICK X=932 Y=130 CONTENT=hola (clickeamos en el cuadro de texto, y escribimos "hola"
CLICK X=1028 Y=132 (clickeamos en esa posición, que es la del botón de buscar)

  • Tags (HTML):


URL GOTO=http://delanover.com/
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://delanover.com/ ATTR=ID:searchQuery CONTENT=hola (hace referencia al contenido dela caja de texto)
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:http://delanover.com/ ATTR=VALUE:Encontrar (hace referencia al botón de buscar)

Comandos del navegador
Explicaremos ahora los comandos que hacen referencia al navegador en sí, y no al contenido.

-Para ir a una página (cuadro de direcciones), lo realizaremos mediante:

URL GOTO=http://delanover.com/

-Abrir y cerrar pestañas:

TAB OPEN
..
TAB CLOSE

-Para moverse entre pestañas:

TAB T=1
TAB T=2
..

Nota: Son posiciones relativas. Si nos encontramos en la pestaña tercera, TAB T=2 será la cuarta, y así sucesivamente.

-Esperar X segundos:

WAIT SECONDS=3

-Descargar algo:

[lineas de descarga]
ONDOWNLOAD FOLDER=C:\Users\lipman\Downloads FILE=Firefox.exe WAIT=NO
[lineas de descarga]

Seleccionamos la ruta, el nombre, y si queremos esperar a que termine la descarga para terminar el iMacros. Con el nombre cuidad con las extensiones, pero si queremos dejar el nombre por defecto de la descarga, simplemente dejar un *.

Segundo ejemplo: Descargar Firefox
El segundo ejemplo consistirá en abrir 3 pestañas, en la primera pondremos la página para la descarga de firefox, en la segunda no pondremos nada, y en la tercera pondremos esta página. Esperaremos unos segundos, iremos a la primera pestaña, y descargaremos firefox.

TAB T=1 (vamos a la pestaña 1)
URL GOTO=http://www.mozilla.com/es-ES/download/?product=firefox-4.0rc1&os=win〈=es-ES (vamos a esa página)
TAB OPEN
TAB OPEN (abrimos 2 pestañas)
TAB T=3 (hacemos referencia a la tercera)
URL GOTO=http://delanover.com (vamos a esa página)
WAIT SECONDS=3 (esperamos 3 segundos)
TAB T=1 (vamos a la primera pestaña)
ONDOWNLOAD FOLDER=C:\Users\lipman\Downloads FILE=* WAIT=NO (seleccionamos las propiedades de la descarga)
TAG POS=1 TYPE=A ATTR=HREF:http://download.mozilla.org/?product=firefox-4.0rc1&os=win〈=es-ES&&TXT:hazclicaquí (clickeamos en la descarga, método de referencia: tags)

Bucles
Puesto que esta herramienta trata de automatizar una tarea, lo ideal es realizar con este complemente tareas repetitivas, como anteriormente realizábamos rellenando la base de datos con cuentas basuras. Para esto nos serviremos de la variable {{!loop}}

Este apartado lo entenderemos mejor con un ejemplo: supongamos que queremos visitar las páginas www.1.com, www.2.com… y así sucesivamente. Para ello realizariamos:

URL GOTO=www.{{!loop}}.com

en donde {{!loop}} vale cada vez un número más incrementado, que realmente es el número de bucle que se está realizando. Le dariamos a “Ejecutar bucle” desde 1 hasta donde queramos.

Conclusión
Personalmente no soy partidario de instalar cualquier addon de Firefox a la ligera, puesto que más de una vez ha habido sorpresitas indeseadas para los no precavidos. Sin embargo, creo que este complemento es ideal para todos aquellos que trasteamos muchas cosas con el navegador (junto con firebug y firecookie). Al contrario que estos dos últimos, este addon es muy probable que tenga mucho menor uso, por lo que yo recomendaria desactivarlo siempre que no se use.

Saludos, lipman

Usando la Geolocalización MAC en nuestro favor. Parte I

Entradas relacionadas:
[Análisis] Prey, software antirrobo de Código Abierto
Usando la Geolocalización MAC en nuestro favor. Parte II

Actualmente no funciona, debido a que al parecer, Google tiene deshabilitada la respuesta JSON de cuando enviamos una petición para geolocalizar

1.-Introducción
2.-Geolocalización a través de la dirección IP
3.-Geolocalización a través de la dirección MAC
4.-Investigando cómo funciona la Geolocalización a través de las MAC
5.-Usando la Geolocalización MAC en nuestro favor

Esta entrada tiene segunda parte

1.-Introducción

La geolocalización, nombre compuesto de geo (tierra) y localización, hace referencia a saber el lugar en el que algo o alguien se encuentra situado con respecto a la Tierra.

Con el avance de las tecnologías tendemos a controlar y estar más controlados todo tipo de cosas, incluida nuestra posición. Desde hace años están diseñando cada vez más sistemas de localización (GPS) incorporados desde en los teléfonos móviles, hasta en relojes, y no nos asombraremos cuando hasta nuestro perro tenga un sistema de localización incorporado.

2.-Geolocalización a través de la dirección IP

Hace unos años recuerdo esas páginas, que a dia de hoy siguen existiendo, que se pusieron de moda porque permitian localizar una dirección IP. No creo que fuera el único que se dirigiese a una página para averiguar mi IP y posteriormente pegarla en una página de esas, con la desilusión que supuso saber que realmente me decía que estaba en otro sitio (bastante lejos) del que estaba. Creo recordar que siempre me han dicho que estoy en Madrid, y cuando descubrí esto pensé: “bueno, al menos permite saber en qué pais estoy, que lujazo!”.

Intentamos geolocalizar una máquina conectada a un router corriente (la nuestra propia) en un geolocalizador como podría ser este. En mi caso recibo que estoy en Madrid (como recordaba). Esto es debido a que nuestro proveedor de Internet está relacionado con esa situación. Si localizas tu IP y eres de España, lo más probable es que te localice en Madrid o Barcelona.

Por otro lado, las máquinas que actúan de servidores web para alojar websites, al tratar de localizarlas nos encontramos con la misma historia, aunque no nos devuelven en Madrid, sino en cualquier otro sitio (dependiendo del hosting). Por ejemplo, hago ping a www.delanover.com para saber la IP y esta la pongo en el geolocalizador. Me devuelve que está localizada en Orlando.

Cuando nos referimos a los ordenadores conectados a routers comunes y corrientes, es más que obvio que ha de haber una cercanía física entre cualquier dispositivo que comparta IP en la misma red (ya que ha de estar conectado a la misma red para que más de un dispositivo tenga esa IP). Sin embargo, el concepto “cercanía física” no existe cuando hablamos de Internet, y al igual que pueden existir diversos ordenadores con la misma IP, pueden existir diversas páginas web con la misma IP (que al fin y al cabo, siguen siendo computadores conectados a la red).

¿Cómo averiguar páginas con la misma IP?
Hagamos ping otra vez a delanover.com desde la consola de windows por ejemplo. Nos devuelve la IP 67.23.226.44. Ahora nos vamos al buscador Bing de Microsoft, y buscamos: IP:67.23.226.44 y los resultados encontrados son los que comparten IP con delanover.com. Para comprobarlo siempre se puede realizar un ping a cada resultado obtenido.

La geolocalización IP como podemos observar es totalmente inexacta, ya que depende del proveedor que tengamos de Internet para devolvernos una localización u otra. Pero existe otra alternativa. Vamos a pensar: ¿Algo que sea único? Claro! La dirección MAC de las tarjetas wireless.

3.-Geolocalización a través de la dirección MAC

Aquí se haya el principal motivo del post: la geolocalización por MAC.

Espera, espera, ¿cómo es posible que puedan localizar mi ordenador a través de su MAC? Bueno, técnicamente son imposibles de localizar sin más, aunque realmente no hablamos de las MAC de las tarjetas wireless que tienen los ordenadores, sino de la de los routers (aunque claro, si estás conectado a Internet a través de uno de ellos, tu ordenador necesariamente va a estar cerca de tu router, así que se podría decir que te localiza igualmente).

Me interesé acerca de la geolocalización a través de MAC a partir del post acerca de Prey, software capaz de, entre otras cosas, darnos una localización más o menos exacta de dónde se encuentra nuestro punto de acceso.

4.-Investigando cómo funciona la Geolocalización a través de las MAC

Retomando un poco el post acerca de Prey, vamos a analizar un par de paquetes interesantes mediante Wireshark que capturamos en el momento en que el ordenador robado subía sus datos al servidor de Prey para que desde otro ordenador se viesen a través del panel de control:

Nos fijamos que este paquete usa JSON para transmitir información interesante, en concreto (acerca del router): nuestra MAC, nuestro ESSID, el canal, el ruido, y la señal. En el host al que se dirige pone que va hacia el panel de control de prey (cosa obvia) pero.. ¿cuál es esa IP de destino que aparece? ¿A donde está enviando esos datos?

Vamos a ver, vayamos al navegador y escribamos 209.85.229.147. Sorpresa! nos lleva a Google. En este momento me vienen a la cabeza numerosas noticias sobre Google y el tema de la privacidad que abordaremos más adelante, de momento sigamos con nuestro análisis:

Siguiente paquete, justo el segundo debajo del que hemos analizado primero:

Si en el anterior paquete veiamos que la IP de origen era 192.168.2.102 (mi IP local) y el destino era la IP esa de Google, ahora vemos que es al revés. Recordamos que estamos tratando con aplicaciones JSON, que se basan en el envío, procesamiento y recibo de información, por eso que una vez enviada y procesada la información, la recibimos.

Lo que recibimos exáctamente son: coordenadas de latitud y longitud, pais, código del pais, región, condado, ciudad e incluso la calle, aunque simplemente con las coordenadas ya tenemos todo el resto, puesto que podemos usar Google Maps para ver dónde se encuentra.

Conclusión de todo esto
Mediante Google, somos capaces de, a partir de la MAC de nuestro punto de acceso, obtener las coordenadas geográficas de dónde se encuentra de manera muchísimo más exacta que lo que la localización IP nos permitía.

Como dije antes, me venían a la cabeza unas cuantas noticias acerca de la supuesta violación de la privacidad de Google recopilando información gráfica. Me refiero a Google StreetView (eso que nada más enterarnos de que existe, lo primero que todos hacemos es buscar nuestra casa para ver cómo se ve). Pero había una cosa más que los coches de Google recogían, y era información acerca de nuestros puntos de acceso, básicamente la MAC y la localización de donde se encuentran. Por esto se montó un poco de revuelo en Alemania, como podemos leer en esta noticia de meses atrás.

Lo que nos queda claro, es que si tenemos un punto de acceso bastante reciente, no tienen porqué tenerlo localizado, aunque personalmente puse Internet hace unos seis meses y me localiza exáctamente la dirección de casa.

5.-Usando la Geolocalización MAC en nuestro favor

Cuando a Google lo acusaron de atentar contra la privacidad por el tema de obtener datos de las MACs alegó que son datos públicos a los que tiene acceso todo el mundo y claro, si Google tiene acceso, e incluso si Prey tiene acceso, ¿por qué no nosotros mismos?

Como dije anteriormente y pudimos ver en los paquetes capturados por Wireshark, se usa JSON para el envío, procesamiento y recibo de la información que queremos.

En esta página explican bastante bien cómo funciona, incluso ponen a disposición una herramienta (en realidad es un conjunto de herramientas) para descargar y a partir de la dirección MAC, obtener la dirección geográfica.

Descargar el software: link
Requiere Windows y .NET Framework 3.5 SP1

Nada más tener instalado el programa en nuestro ordenador, nos vamos a la ruta de instalación y buscamos la siguiente ruta, que por defecto es C:\O2\O2Scripts_Database\_Scripts\APIs\Google. Justo ahí, deberiamos tener un script, cuyo nombre es Tool – Find Physical Location via MAC Address (using Google’s APIs), que podemos ejecutar gracias a la herramienta instalada, en la que simplemente tenemos que poner la dirección MAC que queremos escanear (separada por guiones) y no solo tendremos las coordenadas, sino que aparece directamente en el mapa, acorde a la imagen:

También hablan de una herramienta online para ello: http://www.samy.pl/mapxss/

Samy Kamkar, autor de esa web, dió una conferencia el pasado 2010 en el Blackhat, en cuyo final de la conferencia apuntaba a la Geolocalización a través de la MAC (video recomendado, si quereis ver solo la parte de la geolocalización, es a partir de 41:37). Explica bastante bien cómo lo usa para “conocer a una chica” (el video se titula How I met your Girlfriend).

Saludos, lipman

[Análisis] Prey, software antirrobo de Código Abierto

Entradas relacionadas:
Usando la Geolocalización MAC en nuestro favor. Parte I
Usando la Geolocalización MAC en nuestro favor. Parte II

Me ha salido un poco largo, así que voy a tener que realizar una especie de índice:
1.-Introducción
2.-Plataformas para las que está disponible
3.-Simulación de un robo
3.1.-Primer paso: registro, instalación y configuración
3.2.-Segundo paso: denunciamos el robo
4.-Plan Pro: Dejando el territorio de lo gratuito
5.-Más en profundidad y opinión personal

Esta entrada tiene segunda parte

1.-Introducción

Después de leer cómo pillaron a un ladron que robó un ordenador gracias a la aplicación Prey, supe instantáneamente que tenía que probarlo y si merecía la pena, escribir un post sobre ello.

Para empezar, Prey es un programa (bastante liviano por cierto, su instalación ocupa casi 13 MB) que te permite obtener datos de tu ordenador en el caso de que te lo roben: dirección (geolocalización, que en la prueba que hice me dió exactamente la dirección y calle en donde vivo, sigo impresionado), screenshots, fotos (si el portátil cuenta con webcam), dirección MAC, IP privada y publica, puerta de enlace e incluso las redes disponibles que tiene a su alcance.

2.-Plataformas para las que está disponible:


Windows, Linux (Android, Ubuntu y demás distros) & Mac

3.-Simulación de un robo

Disponemos de dos computadores: vamos a simular el robo de uno, y desde el otro vamos a ver los reportes generados. Estos reportes son subidos a internet, ahora veremos cómo funciona:

3.1.-Primer paso: Registro e Instalación
Nos registramos aquí, que como podemos observar todo está en español, incluido el propio “panel de control”, haciendo más fácil la comprensión de todo. Tras registrarnos, nos descargamos el programa desde aquí, y tras la instalación nos recomendará configurarlo (que es muy sencillo), para lo que he sacado screenshots:

Introducimos la dirección de correo y contraseña con la que nos hemos registrado en la página de Prey:

Al realizar el último paso estaremos ya en el proceso de sincronizar y asociar el dispositivo (en este caso el laptop) a la cuenta de Prey. A mi al principio me daba este error:

Aseguraros de que teneis acceso a Internet y teneis el Firewall deshabilitado o lo configurais o estais pendiente de él. Al probar de nuevo, ya nos funciona:

Bien, ya lo tenemos instalado y sincronizado, ahora reiniciamos, y si vamos al administrador de procesos podremos ver el proceso perteneciente a Prey:

Configuración
En el panel de control de Prey, podemos observar a la derecha, en “Acciones a Ejecutar” cuatro cosas: “Alarma, Alerta, Bloqueo y Seguridad”.

  • Alarma: se activa un ruido molesto durante 30 segundos, que según dicen en el CP de Prey, sirve para localizar mejor el portatil robado (cosa que pongo en duda, porque si está lejos o simplemente en silencio.. ya ves)
  • Alerta: en el ordenador robado aparecerá un mensaje configurable, del tipo:

  • Bloquear: se bloquea el ordenador hasta que se ponga una password
  • Seguridad: borra las cookies de los navegadores y las contraseñas guardadas. Cuidado, que si activamos cualquiera de estas cuatro opciones, independientemente de si está marcado el ordenador como desaparecido, se ejecutarán, y esta última opción es peligrosa.

Por otra parte, como vamos a hacer una prueba y nos interesa todo, marcaremos todo en el panel de control, como muestra la imagen: Get Active Connections, Get Nearby Wifi Hotspots.. etc. También pondremos el intervalo en 10 minutos, para que nos envie un reporte cada 10 min.

3.2.-Segundo paso: Denunciamos el robo

Después de esto, simplemente activamos lo de “Desaparecido” y lo ponemos en Si. Recordemos que tenemos los dos ordenadores con acceso a Internet, así que nada más activarlo, se enviará una señal al ordenador “robado”.

En el PC robado simplemente no aparece nada, pero al cabo de 10 minutos, tengo en el panel de administración de Prey lo siguiente:

  • Imagen de Google Maps en donde marca mi supuesta posición.

Nota: quisiera hacer aquí un importante hincapié, ya que me ha sacado la posición exacta en donde vivo, en un radio de 10 metros. La precisión que tiene me asombra.

  • Screenshot y foto de la webcam (si tiene)
  • Red: IP pública, privada, puerta de enlace, MAC.
  • Wifi: Señales disponibles con: ESSID, BSSID, canal y señal.
  • Conexiones activas: protocolo, dirección local, remota, y estado.

Y tras otros 20 minutos (se ve que no me ha actualizado o tarda en actualizar lo de la frencuencia del reporte) me manda otro reporte similar.. y así sucesivamente.

Personalmente, creo que los reportes son muy sencillos y agradables de leer.

4.-Plan Pro: Dejando el territorio de lo gratuito

Disponemos también de la opción de convertir nuestra cuenta en una cuenta Pro, pagando cierta cantidad de dinero dependiendo de la cuenta, que oscila entre 5 a 400 dólares al mes. La diferencia que existen entre ellos es la cantidad de dispositivos que se pueden monitorizar simultáneamente bajo la misma cuenta.

Sin embargo tiene 3 ventajas más, que son interesantes:

  • Máximo de 100 reportes.

Las cuentas gratuitas solo pueden recibir hasta 10 reportes, en los que, a medida que se van generando nuevos, se borran los viejos.

  • Cifrado SSL para reportes.

Esto nos permite subir los reportes generados por el ordenador robado al servidor web a través del protocolo de cifrado seguro, siendo segura la transferencia para no tener que enviar datos en texto plano.

  • Intervalos de hasta 2 minutos.

Con la cuenta regular, el intervalo mínimo son 10 minutos.

5.-Más en Profundidad y Opinión Personal

Las características que incluye para obtener datos de un supuesto PC robado son muy amplias, quizás las más interesantes sean la Geolocalización (que hace a partir de la API de Google) y la toma de fotografías de la webcam (en el caso de los portátiles que lo tengan), puesto que pueden ser datos cruciales para encontrar un portátil.

Por otra parte, con respecto a lo del código abierto, la ventaja y desventaja que tiene esto, es que cualquiera puede ver el código fuente, que en ocasiones no es tan bueno. Otro dato importante, es que a la hora de instalar la aplicación, la guardemos en otra ruta y con otro nombre incluso, para que si el supuesto ladrón conociera el programa, que no lo quitase.

Hablando de quitar el programa… si intentamos desinstalar el programa, nos pedirá la cuenta de correo con la cual hemos sincronizado la aplicación y el servidor web. Esta es la parte que menos me gusta, ya que si fuésemos los ladrones, podriamos averiguar esa cuenta de correo fácilmente, yéndonos al fichero Config de la carpeta principal de Prey:
línea 42: mail_to=”delanover@delanover.com”

Saludos, lipman

Intel Core i5

A continuación les dejaré un paper que tuve que escribir acerca del core i5 para un trabajo de la uni. Como me gustó, y entre que lo tuve que hacer aprendí algunas cosas interesantes (como el funcionamiento de las tecnologías de Intel), lo quiero compartir:

Introducción
Intel Core i5 fue el primero de esta familia (i3, i5, i7) en salir al mercado. No guarda muchas diferencias con su versión inferior, el Intel Core i3, quizás la más importante (aunque siempre dependiendo del uso que se le de al ordenador) es que, a pesar de ambos disponen de Hyper Threading, no se encuentra en los i3 la tecnología Turbo Boost, que permite aumentar la frecuencia del procesador, explicada con detalle más adelante.
Otra diferencia interesante, es el incorporamiento de una GPU en todos los procesadores i3, a diferencia de los i5, que en estos solo se encuentra en su versión de microprocesador Arrandale.

Historia
El 8 de septiembre del pasado 2009, Intel sacó el primer procesador con núcleo i5, un Lynnfield Core i5-750, cuya tecnología Hyper Threading quedó deshabilitada. Disponen de una memoria caché de 8 MB, 4 núcleos, una memoria de 2xDDR3-1333 construidos bajo la tecnología de 45 nm. Usa arquitectura Nehalem , reemplazando a la anterior usada por Intel, la Penryn. No solo se comercializó para los Intel Core i5, sino que también se encuentra disponible para los Core i7 y los Xeon. A continuación, una tabla de los tres Lynnfield Core i5:

Nombre Frecuencia Fecha de Lanzamiento
Core i5-750 6,67 GHz 8 de septiembre de 2009
Core i5-750S 2,4 GHz 7 de enero de 2010
Core i5-760 2,8 GHz 18 de Julio de 2010

Tabla 1: Procesadores Lynnfield

Posteriormente, el 7 de enero de este año 2010, fueron lanzados los procesadores móviles (para portátiles sobre todo), sustituyendo a los Intel Core 2, Celeron, y Pentium Dual-Core. Arrandale construidos en 32 nm, con 3 MB de caché y tan solo 2 núcleos. Al igual que con Lynnfield, comercializaron más procesadores Arrandale, en este caso, para los Core i3 y los Core i7. Estos procesadores los podemos dividir en dos familias: la de voltaje estandar (contenido entre los 0,775 y 1,4 voltios) con una memoria de 2xDDR3-1066 y la de voltaje ínfimo (contenido entre los 0,725 y 1,4 voltios) con una memoria de 2xDDR3-800. A continuación, una tabla con 3 procesadores de cada familia:

Nombre Frecuencia Fecha de Lanzamiento
Standart Voltage
Core i5-430M 2,27 GHz 7 de enero de 2010
Core i5-540M 2,53 GHz 7 de enero de 2010
Core i5-580M 2,67 GHz 26 de septiembre de 2010
Ultra Low Voltage
Core i5-430UM 1,2 GHz 25 de mayo de 2010
Core i5-520UM 1,07 GHz 7 de enero de 2010
Core i5-560UM 1,33 GHz 26 de septiembre de 2010

Tabla 2: Procesadores Arrandale

Clarkdale es la versión de escritorio de los procesadores Arrandale, por lo que también se usaron para los Core i3 y los Core i5. Fueron lanzados tambien en enero, con la tecnología Hyper Threading habilitada junto con la de Turbo Boost. Tienen 4 MB de caché, dos núcleos, memoria de 2xDDR3-1333 y están construidos en 32 nm. De los 6 procesadores existentes hasta la fecha, se escribirá el primero y los dos últimos:

Nombre Frecuencia Fecha de Lanzamiento
Core i5-650 3,2 GHz 7 de enero de 2010
Core i5-670 3,47 GHz 7 de enero de 2010
Core i5-680 3,6 GHz 18 de abril de 2010


Imagen 1: Procesador Intel Core i5-750

Tecnologias de Intel para sus procesadores
Intel Turbo Boost Technology
Esta tecnología innovadora de Intel, se basa, a grandes rasgos, en que el propio procesador se haga overclocking a sí mismo, esto quiere decir que aumente sus capacidades por encima de las establecidas por el propio fabricante.
Esto se realiza de manera automática cuando el procesador piensa que necesita mayor velocidad. No se lleva a cabo siempre, ya que esta característica de los Core i5, depende siempre de la temperatura, la corriente y la potencia al que está siendo suministrado el microprocesador, y solo en caso de que no corra peligro, se aumenta la frecuencia de este.
El aumento de frecuencia producido se hace de manera secuencial. Cada “paso” que el procesador realiza para aumentar su frecuencia, esta aumenta en 133,33MHz, pudiendo aumentar tanto como la cantidad y el número de núcleos del procesador lo permita. De manera equitativa, cuando ya no necesita tanta frecuencia o cuando el procesador ha detectado que la temperatura o el voltaje ha subido hasta un límite no recomendado, la frecuencia del procesador desciende “paso” a “paso” (de -133,33MHz en -133,33MHz)
A pesar de estar por encima de la frecuencia base establecida por el fabricante, todos los núcleos del procesador trabajan en todo momento al mismo voltaje y frecuencia.
Por otra parte, debido a la forma en la que la BIOS y el Sistema Operativo se comunican, los programas nunca detectarán que la frecuencia del microprocesador se encuentra por encima del nivel base establecido por Intel.
En la página web de Intel podemos visualizar un video explicativo de esta tecnología: http://www.intel.com/technology/product/demos/turboboost/demo.htm?iid=tech_tb+demo

Intel Hyper-Threading Technology
Antes de explicar en qué se basa la tecnología de Intel Hyper Threading, tenemos que explicar qué es el Multiprocesamiento Simétrico (conocido como SMP, del inglés Symmetric Multi-Processing), ya que para que funcione esta tecnología de Intel en nuestros equipos, tienen que ser compatibles con la tecnología SMP.
El Multiprocesamiento Simétrico permite a dos procesadores distintos compartir la misma memoria, de tal manera que se pueden mover tareas entre los procesadores para garantizar una alta eficiencia en el trabajo requerido por estos. Estos procesadores, se comunican con la memoria mediante un bus compartido entre ellos, y al ser de uso común, este bus debe ser arbitrado para que cada procesador lo use cada instante.
Esta tecnología, está disponible en versiones de Windows superiores al 2000 y en máquinas Linux con Kernel compatible con SMT.
Por otro lado, la empresa desarrolladora de microprocesadores ARM, criticó la tecnología SMP debido al incremento del gasto energético que esta tecnología requiere, por lo que Intel deshabilitó la tecnología Hyper Threading en algunos de sus procesadores.
El Hyper Threading de Intel, se basa principalmente en simular en un único procesador, dos procesadores virtuales, con el objetivo de aprovechar mejor la unidad aritmético lógica (ALU), manteniéndola así ocupada el mayor tiempo posible. Esto quiere decir que, un procesador con esta tecnología habilitada que disponga de 2 núcleos, tendrá 4 hilos (correspondiéndole 2 hilos a cada núcleo) por los que simultáneamente se pasarán datos y aumentará drásticamente el rendimiento. Según Intel, se puede producir un aumento del rendimiento de hasta el 30%
Video explicativo de esta tecnología: http://www.youtube.com/watch?v=W06u7o5PCNk

Intel Smart Caché
Desde hace ya varios años, la memoria caché viene integrada con el propio procesador. Esta memoria, es más rápida que la memoria principal o RAM, por lo que aquí se encuentran, datos duplicados de la memoria principal a los que accedemos con mayor frecuencia, para así acceder con mayor velocidad a ellos. Por tanto, una memoria caché mayor, puede guardar más cantidad de datos a los que acceder rápidamente, y esto depende únicamente del procesador con al que va acoplado.
Intel Smart Cache, aumenta la probabilidad por la que, cada núcleo (partiendo de que dispongamos de un procesador multi-núcleo) pueda acceder a datos de la parte de la caché más eficiente que se encuentra disponible. Esto quiere decir, que cualquier núcleo del procesador puede acceder a la cantidad de caché que crea que necesita. Por ejemplo, tenemos un procesador de dos núcleos, y uno de ellos está usando en un instante predeterminado el 10% de la memoria caché. Entonces, gracias a esta tecnología, el otro núcleo tiene mayor posibilidad de acceder al otro 90% libre si cree que lo necesita, es decir, que cada núcleo puede acceder hasta el 100% de la caché disponible.
Video explicativo del Intel Smart Cache: http://www.intel.com/technology/product/demos/cache/demo.htm

Intel SpeedStep Technology
Esta tecnología mejorada en los actuales Core i5 fue desarrollada por primera vez para los Intel Pentium III de antaño. Es una muy buena utilidad complementaria al Intel Turbo Boost Technology, ya que, es capaz de adaptar el procesador al rendimiento requerido, de tal manera que, si se está corriendo una aplicación que apenas requiera demasiado uso del procesador, esta tecnología permite disminuir la capacidad del procesador. Las ventajas de esta tecnología más fácilmente visibiles, son las que están reflejadas en el uso de portátiles con estos microprocesadores, ya que esta característica principalmente, hace aumentar la duración de la bateria, disminuir el calentamiento del procesador (y el consecuente ruido producido por el ventilador para enfriarlo) y alarga la vida de este.
Video: http://www.intel.com/technology/product/demos/eist/demo.htm

Bit de desactivación de ejecución
Este sistema de seguridad, permite proteger al buffer de ataques por parte de gusanos o virus. La intención de estos, es desbordarlo, de manera que en algunos casos se puedan hasta perder datos, costando a los usuarios y empresas pérdidas de tiempo y productividad.
El bit de desactivación de ejecución, previene de estos ataques clasificando la memoria en áreas según el lugar en donde el código de los programas se ejecuta. De tal manera que, cuando un virus intenta introducir código en el buffer, el procesador desactiva le ejecución de código evitando que se produzcan daños y la posterior propagación del gusano.


Imagen 2: Novedades del i5

Set de Instrucciones y Microarquitectura
Un set de instrucciones es un repertorio, la parte de la arquitectura del ordenador relacionada con la programación en lenguaje máquina, en la que se detallan las instrucciones que la CPU debe entender y ejecutar.
Por otra parte, la microarquitectura, es la forma en la que el set de instrucciones es implementado en un procesador. Un mismo set de instrucciones puede ser implementado de manera diferente por microarquitecturas diferentes, y estas se eligen dependiendo de los objetivos que tengamos a la hora de fabricar el ordenador.
Tambien tenemos que explicar los dos distintos tipos de construcción de microprocesadores. CISC (Complex Instructions Set Computer) es un microprocesador que se caracteriza por tener un conjunto de instrucciones elevado, con lo que su unidad de control es más compleja, y en identificar una instrucción es más lenta, ya que tiene que buscar más. RISC (Reduced Instructions Set Computer) tienen instrucciones reducidas y muchos registros, con lo que se puede simplificar más, siendo más rápido que CISC.

Set de Instrucciones
Arquitectura x86, que a pesar de haber cumplido más de 30 años, sigue entre nosotros. Empezando como memorias para calculadoras, IBM que se encontraba desarrollando el IBM PC, eligió este procesador para incluirlo en sus máquinas. Este, el Intel 8086, abuelo de muchísimos de los procesadores actuales, funcionaba desde los 4,77 hasta los 10MHz.
La extensión del x86, el x86-64, permite usar direcciones de 64 bits. Desarrollada primeramente por AMD, fue implementada en los chips de Intel, como en los Pentium 4. Entre otras cosas, esta extensión aumenta el número y tamaño de registros, el espacio de direcciones (pudiendo redireccionar hasta 16 exabytes de memoria). Debido a que la segmentación no está soportada, no hay que recuperar y almacenar información segmentada, requiriendo ciertas comprobaciones para la protección de esta segmentación. Incluye también sets de instrucciones descritos posteriormente (SSE, SSE2 Y SSE3)
El set de Instrucción MMX añade 8 nuevos registros, representados desde el MM0 hasta el MM7. Cada registro es un número entero de 64 bits, aunque debido a su implementación de datos compactados, puede almacenar tambien dos enteros de 32 bits, 4 enteros de 16 bits u 8 enteros de 8 bits.
Para el resto de sets de instrucciones, tenemos que explicar que es el SIMD. Las siglas son de: Single Instruction, Multiple Data, significando, una instrucción, muchos datos. Esta técnica es empleada para conseguir un paralelismo a nivel de datos, es decir, que una sola instrucción afecte a varios datos. Esto se ve claramente con un ejemplo: imaginemos que queremos cambiar de brillo nuestra pantalla. Cada pixel tiene tres valores (rojo, verde y azul). Estos valores son leidos y reemplazados por los que queremos. En este caso, el procesador basado en SIMD fue el encargado de coger todos los píxeles y realizar esa función. Si no, esto se hubiera llevado a cabo pixel por pixel.
El siguiente set de Instrucción es una extensión del anterior, MMX, el SSE (Streaming SIMD Extensions). Guarda paralelismos con el MMX en que añade otros 8 nuevos registros, pero esta vez, de 128 bits de longitud, aunque igual que en el MMX, se pueden utilizar para guardar diferentes registros, como 4 enteros de 32 bits, 2 enteros de 64 bits o 16 enteros cortos de 8 bits. Añade al repertorio instrucciones de transferencia de datos, de conversión, aritméticas y lógicas.
Siguiendo el mismo modelo que MMX y SSE, nos encontramos con SSE2 (Streaming SIMD Extensions 2) lanzado tambien por AMD, en el año 2000. Con respecto su anterior versión SSE, añade 144 nuevas instrucciones. De lo más importante, añade un set de instrucciones para el control de la caché, intentando minimizar el ensuciamiento de la caché debido a flujos de información indefinida. Al maximizar las instrucciones MMX para operar con registros XMM, se pueden convertir todos los códigos MMX en SSE2
Una extensión para el SSE2 es el SSE3, cuyo cambio más notable con respecto la anterior versión, es la capacidad de trabajar horizontalmente en un registro. Siguiendo la misma línea, posteriormente se sacó la versión SSSE3, extensión de SSE3. Añade 32 nuevas funciones. Finalmente también se encuentran los sets de instrucciones SSE4.1 y SSE4.2.

Microarquitectura
Básicamente existen dos tipos de microarquitecturas implantadas en diferentes procesadores pertenecientes a la rama i5. La primera de ellas, se llama Nehalem, que fue lanzada al público en noviembre de 2008.
Esta microarquitectura, está disponible para procesadores de dos, cuatro, seis y hasta ocho núcleos (aunque los pertenecientes al i5 son los de dos y cuatro) y en su versión de cuatro núcleos, dispone de hasta 731 millones de transistores.
Desarrollo del multihilo (Hyper Threading comentado páginas atrás) y del Intel QuickPath Interconnect, otro paradigma de interconexión entre memoria y procesador, en el que este, asume que tiene un control de memoria integrado, haciendo que este acceso sea notablemente más rápido (hasta 25 GB/s). Ver video explicativo: http://www.intel.com/technology/quickpath/demo/demo.htm
Las siguientes capacidades de la memoria caché: 2×32 KB de L1 (32 KB para instrucciones y 32 KB para datos), 256 KB de L2 y 2 MB de L3 (cada una de estas por núcleo). Antes de seguir, explicaremos de manera breve cada uno de los niveles de la memoria caché para el mejor entendimiento de los datos aportados anteriormente.
La memoria caché la podemos dividir en 3 niveles distintos. El primer nivel, level 1 (L1) es la parte de la caché más rápida, corriendo a la misma o muy parecida velocidad del procesador que además, está incluida en el interior de este. Esta memoria a su vez se usa para almacenar dos cosas distintas, por eso la podriamos dividir en caché L1 para instrucciones y caché L1 para datos. El siguiente nivel, L2, es algo más lento que el nivel primero, pero aun así, es mucho más rápido que la memoria RAM. La utilización de este nivel está más encaminada en el uso de esta por parte de programas del sistema, y se situa en la placa base. Por último, el nivel tercero, L3, es el más lento pero el mayor con diferencia, de hecho, a medida que la memoria es más lenta, es mayor de tamaño (como podemos observar en los datos).
Nehalem, aumenta el rendimiento ya que aumenta el tamaño de los núcleos, puesto que con respecto a la velocidad de los hilos (relacionado con el hyper threading), aumenta de 1.1x a 1.25x (un hilo) y de 1.2x a 2x (dos hilos), y, finalmente, disminuye un 30% el consumo a pesar de tener el mismo rendimiento.
La segunda microarquitectura derivada de Nehalem, es llamada Nehalem-C o Westmere y nació debido a la necesidad de realizar la reducción de 45 a 32 nanómetros de su predecesor. Sus ventajas generales, principalmente son la posibilidad de implemento desde seis, hasta dieciseis núcleos. Promete ser sucesor de Bloomfield y Gainestown.


Imagen 3: Intel Dual Core i5

Socket
Los sockets (en español, zócalos) son los soportes en donde se colocan los procesadores. El socket está soldado a la placa base, de forma que tiene conexión eléctrica con el circuito impreso. Cada vez aumenta más el número de pines de estos, debido a aumento del consumo de energía y disminución del voltaje. En los últimos años, han pasado de usar cinco voltios, a uno, y potencias de veinte watios, a ochenta. Al querer aumentar la potencia y disminuir el voltaje, lo que necesitamos es mayor intensidad, más amperios, y esto lo conseguimos aumentando el número de pines del zócalo.
El Intel Core i5, utiliza un socket LGA 1156 (Land Grind Array), utilizado en los ordenadores de sobremesa y única y exclusivamente, de Intel.
Este modelo sustituyó a los antiguos sockets 775, que se conectaban a un puente norte con el bus frontal. Este puente norte se ha integrado en los LGA 1156 permitiendo varias conexiones hacia el resto del sistema: PCI-Express 2.0×16 para la comunicación con la tarjeta gráfica, DMI para la comunicación con el concentrador controlador de la plataforma, y dos canales para la comunicación con la memoria SDRAM DDR3


Imagen 4: Socket 1156

Direct Media Interface
El DMI, conocido como Direct Media Interface, es una interconexión punto por punto, entre el northbridge (puente norte) y el southbridge (puente sur) de un procesador Intel en una place base.
Northbridge y Southbridge son dos chips situados en los procesadores de Intel, que manejan diferentes tipos de datos. En el caso del Northbridge, maneja datos de la comunicación entre el CPU, la RAM, la ROM, y PCI Express (o AGP) de las tarjetas gráficas. Es la parte que más se calienta al hacerle al procesador overclocking, de tal manera que es uno de los puntos vitales para la refrigeración si se quiere llevar a cabo dicha práctica.
El Southbridge es más lento que el northbridge, ya que maneja más datos de entrada/salida, como son los buses PCI, y las conexiones SATA, USB, y LAN.
Volviendo al DMI, en el caso de los Intel Core i5, provee de velocidades de transferencia de hasta 2,5GT/s.

Conclusión
Como conclusión, podriamos asegurar que desde que se presentaron a finales del año pasado 2009 estos nuevos procesadores, Intel ha dado un paso enorme con respecto su mayor rival, AMD. Sus diferentes y sobre todo diversas tecnologias debido a sus propias investigaciones, sin hablar del mucho dinero invertido en marketing, ha hecho marcar una gran diferencia. Debo hacer incapié en la diversidad de tecnologías aplicadas a los procesadores, que demuestran que no solamente quiere ser el mejor, sino que piensa en cada tipo de persona. Desde los más jugones con tecnologias como el Hyper Threading o Turbo Boost, hasta los usuarios de a pie de portátiles, notebooks y netbooks, con su tecnología SpeedStep aumentando su bateria, pasando por las empresas, por tecnologias como la del Bit de desactivación de ejecución.
Por otro lado, y debido a la consulta de su página web, también mencionaría la grandísima facilidad con la que explican sus diferentes tipos de tecnologías en su propia web mediante videos en flash en un inglés perfectamente entendible para los que menos saben.
Con respecto al precio, siempre ha mantenido un precio considerable. Recorando todo el tiempo que su antiguo y famoso procesador Core Quad Q6600 estuvo valiendo 200€ (aunque al principio valía bastante más), en el caso de, por ejemplo el Intel Core i5-750 sacado en septiembre, su precio rondaba los 210 dólares. Actualmente, los Core i5 que superan los 3,4 Ghz, oscilan entre los 180 y 280 dólares, precio totalmente comprensible.
Por último, con respecto a sus características física en si, podría decir que, siendo su principal rival (a nivel de características) los AMD Phenom II, estos últimos se encuentran por debajo de las posibilidades de ganar en un análisis riguroso contra los Core i5. AMD de hecho tuvo que bajar los precios de estos hace poco, situándolos muy cercanos a los 100€.

Saludos, lipman.

Instalar la libreria FPDF y algunos comandos básicos

FPDF (Free PDF)

Esta libreria nos permite crear de una manera muy cómoda y sencilla un documento PDF bastante personalizado: cabeceras, pies de página, colores, imágenes (jpeg, png, gif), saltos de línea, saltos de página y diferentes fonts y codificaciones entre otras cosas.
Podemos realizar incluso referencias al propio documento y poderosas tablas, las cuales pueden venir muy bien para resultados de consultas en bases de datos.

  • Instalación

Descargamos la versión más reciente desde su página oficial, en la cual nos encontraremos un archivo comprimido zip con tutoriales y explicaciones de cada función en particular (también disponibles en la página oficial). El archivo más importante del zip es el llamado fpdf.php aunque también necesitaremos tener en nuestro directorio local, el archivo fpdf.css y la carpeta de font.

  • Errores comunes

Antes de empezar a jugar con esta libreria, comentaré un error que puede aparecernos, para de esta manera, poder evitarlo. Puede que nos saltase un error que nos dijera “Cannot modify header information – headers already sent by …”. Esto es solucionable si en el script en donde vamos a realizar el pdf no introducimos nada antes ni después de los tags de inicio y fin de php, es decir, nada antes ni después de “, , , o cualquier otro). Esto puede ser debido a que esta libreria toca la cabecera de nuestro documento, por lo que no debe de haber nada antes de tal.
Otro error común, sobre todo para los castellano parlantes, puede ser el uso de terminadas letras, como la ñ o las vocales acentuadas. Para ello, suponiendo que nuestro texto se encuentre en una variable, la parsearemos de la siguiente manera:

$str = utf8_decode($str);

Por otra parte, puede que sea un caracter “extraño” como el símbolo del euro. Por ello, para estos casos, los definiremos de la siguiente forma:

define('EURO', chr(128));

$str = "Ejemplo de € y " . EURO;
// En nuestro PDF nos muestra lo siguiente: "Ejemplo de ? Y €"

  • Introducción

Para indicar que estamos usando esta libreria, tenemos que hacer referencia al archivo fpdf.php de la siguiente forma:

require("fpdf.php");

Por otra parte, para iniciar la creación del documento PDF, tenemos que indicarlo del siguiente modo:

$pdf=new FPDF();

El funcionamiento a grosso modo es muy simple. Vamos añadiendo páginas y en cada una añadimos lo que queramos. Cuando queramos editar propiedades del tipo colores o fuentes de texto, tenemos que declararlas justo antes de usarlas. Es decir, si queremos hacer dos líneas de texto con fuentes distintas, primero tenemos que declarar las propiedades de la primera fuente, luego escribir la primera línea, declarar las propiedades de la segunda y escribirla.
De igual modo, si alguna vez escribimos algo que ocupe más de una página, esta se añade automáticamente, aunque disponemos de una función (Addpage) para añadir páginas, la cual nos permite acabar de escribir en una página o poner páginas en blanco.
Hay algunas propiedades también, como las cabeceras o los piés de página, que no basta con declarar lo que queremos, sino que hay que realizar la propia función como veremos más adelante. De la misma forma que anteriormente hemos indicado que se iniciaba la configuración del documento pdf, para exportarlo y que salga como tal, dispondremos de otra función que tendremos que aplicar al final (Output).

  • Funciones básicas

Addpage (añade una página), Cell (crea una celda), setFont (declaramos un estilo de fuente), Ln (salto de línea), Image (añade una imagen), setFillColor (establece un color de relleno), setTextColor (establece un color para el texto), SetX (posicionar en el eje X), SetY (posicionar en el eje Y), GetX (obtener posición en el eje X), GetY (obtener posición en el eje Y). Ejemplo:

AddPage();
//Añadimos una página.

$pdf->Addpage();
//Añadimos otra página. De esta manera, la primera quedará en blanco.

$pdf->SetFont('Arial','B',16);
//Seleccionamos la font de nuestros textos. Serial Arial, Bold, de tamaño 16. Ver fonts permitidas en la línea
//104 del archivo fpdf.php. Los estilos permitidos son B (negrita), U (subrayado), I (cursiva), vacio (normal).

$pdf->Cell(10, 20, "Texto interior", 1);
//Creamos una celda de 10 de ancho, 20 de alto, con ese texto en su interior, y 1 de borde.


$pdf->setFillColor(10, 200, 14);
//Declaramos un color de relleno RGB (verde claro).

$pdf->Ln(30);
//Salto de línea de tamaño 30.

$pdf->Cell(50, 20, "Otro texto", 2, 2, L, true);
//50 de ancho, 20 de alto, con ese texto, 2 de borde, L de alineado (landscape), y true es el relleno definido antes
//El segundo 2, nos permite decidir dónde irá el elemento posterior a este. En caso de estar en 2, irá debajo.
// Si hay un 1, al comienzo de la línea siguiente. Si hay un 0, irá a la derecha.

$variable = $pdf->GetY();
// obtenemos la posición Y.

$pdf->SetX($variable);
//Declaro que quiero que el siguiente elemento tenga de posición X, lo que tenía de posición Y.

$pdf->Cell(5, 5, $variable, 1);
//Creamos esta celda.

$pdf->Image("google.jpg", 80, 0, 70, 40);
//Ponemos una imagen. El segundo y el tercer parámetro son las coordenadas X e Y, los dos siguientes 
//son la anchura y la altura respectivamente.

$pdf->Output();
//Función que nos permite obtener el PDF.
?>

  • Funciones más interesantes

En este apartado trataremos de hacer una cabecera y un pie de página para que salgan en todas las páginas. Para esto, hay que extender la clase FPHP como veremos posteriormente de manera que habrá que crear las funciones Footer y Header. Por otra parte, aprenderemos a referenciar objetos dentro del propio documento y establecer el número de páginas totales y actual.

SetFont('Arial','B',15);
    //Declaramos una fuente
    $this->Cell(30,10,'Titulo',1,0,'C');
    //Titulo
    $this->Ln(20);
	//Salto de línea
}

//Pie de página
function Footer()
{
    
    $this->SetY(-15);
    //Posición: a 1,5 cm del final
    $this->SetFont('Arial','I',8);
    
    $this->Cell(0,10,'Página '.$this->PageNo().'/{nb}',0,0,'C');
	//PageNo nos muestra el número de página actual
	//El "/{nb}" es para que nos muestre el número de páginas máximo
	//de tal forma que se quede del tipo "Página 1/2"
	//Esto es debido a la función posterior "AliasNbPages"
}
}

//Creación del objeto de la clase heredada
$pdf=new PDF();
$pdf->AliasNbPages();
//Es la función que nos declara un Alias por defecto para 
//obtener el número de páginas máximo

$pdf->AddPage();
$link = $pdf->AddLink();
//Establecemos el link

$pdf->Write(5, "Pulsar aquí", $link);
//Al pulsar en ese texto, nos linkeamos gracias al link declarado anteriormente

$pdf->AddPage();
$pdf->AddPage();
$pdf->SetLink($link, 70);
//Establecemos el link a 1,5 centímetros (eje Y)

$pdf->Output();
?>

Para finalizar, decir que hay multitud de funciones para un uso más intensivo y completo de esta libreria que se encuentran en la parte de “Manual” su página web. En estas breves páginas he intentado escribir las más importantes y útiles para un sencillo uso.

Saludos, lipman.

Your WordPress.com Account Xxxx Is Not Authorized to View the Stats of This Blog y No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos

Si teneis un blog de WordPress y teneis instalado el plugin para las estadísticas de las visitas llamado WordPress Stats es probable que os de un error de ese tipo.

Solución al error “X is not authorized to view the stats of this blog”.
-Desactivar ese plugin
-Instalar Jetpack


Jetpack

Para instalar Jetpack nos vamos a Plugins -> Añadir nuevo, y en el buscador, introducimos el nombre. Si no teneis cuenta en wordpress.com os pedirá hacerla, ya que para activar el plugin pide login.

Nota: Jetpack requiere WordPress 3 en adelante, lo mejor será actualizar a la última versión, no sin antes hacer una backup por si algo falla. Para hacer la copia de seguridad, nos vamos a Herramientas -> Exportar y nos exportará en un documento XML las entradas, comentarios, y demás. Y para actualizarlo, simplemente dadle a donde os dice que ya hay una versión posterior a la que usais, o desde Herramientas y por ahí teneis una versión de actualizar, o incluso desde las nuevas versiones, en la parte de Escritorio tenemos un apartado exclusivo para actualizar.

Otro error derivado de actualizar: No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos.
Después de actualizar a wordpress 3.1 (ya era hora, porque usaba el 2.9.1, aunque era feliz con esa versión), me apareció para actualizar otro plugin que tenia yo para la sintaxis de códigos, WP-Syntax y tras intentar actualizarlo y darme un error relacionado con el directorio public_html.

A cualquier dirección del blog (incluso las de administración) a las que iba, me aparecía el mensaje “No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos“.

Si esto ocurre, no alarmarse! Simplemente entramos desde un cliente FTP como Filezilla a nuestro servidor web (o desde el que nos proporciona nuestro servicio de hosting) y eliminamos el archivo .maintenance situado en el directorio raiz donde tenemos instalado nuestro blog.

Saludos, lipman

[Parte 2] Agregar Captcha a Prestashop y arreglar la base de datos

Parte 1

Recordemos la situación actual: Tenemos en nuestra base de datos un montón de cuentas introducidas con la intención de llenar nuestra base de datos, así que lo primero será borrarlas, y lo segundo intentar que no lo puedan volver a repetir introduciendo un Captcha para la verificación. También ayudaría banear la IP del atacante, excepto si lo hiciese con una botnet (vaya tipo…).

Borrando las cuentas basura
Para lo siguiente, vamos a tener que analizar la situación. En la situación actual, podemos darnos cuenta de que las cuentas son del tipo delanoverN@a.c, por lo que podemos recorrer la base de datos mirando cada cuenta de correo y borrándola si concuerda con el patrón usado por el atacante. Esto sería muy sencillo, puesto que simplemente, podriamos mirar a partir del arroba, ya que el dominio a.c no existe, así que podríamos recoger la cadena, y comprobar si desde el arroba hasta el final, contiene “a.c”.

Para esto, podemos irnos directamente a la base de datos e introducir la orden para eliminar, o desde un fichero php:

$consulta = "DELETE FROM ps_customer WHERE email REGEXP '@a\.c'";
$resultado = mysql_query($consulta);

Esta forma nos permite usar expresiones regulares, y detectará todas las que contengan @a.c, eliminándolas. En caso de complicarse más… se podría mirar la fecha de registro y eliminar a todos los usuarios registrados siguiendo cierto patrón, aunque esto es peligroso ya que podriamos eliminar a más de un usuario real.

Agregando el sistema de CAPTCHA a Prestashop

Aquí, la parte más interesante para los que quieran usar Prestashop, puesto que ya hemos visto el peligro que corremos si no disponemos del captcha. Vamos a usar reCaptcha, el captcha de Google. El primer paso es registrarnos, tras el cual, nos darán dos claves, una pública y una privada. La primera se encarga de que el sistema pueda saber qué página web le está llamando (en nuestro caso, la nuestra). Y la segunda clave, es la verificación del captcha.

Tras registrarnos, procedemos a descargarnos y subir a nuestro servidor los ficheros necesarios para el funcionamiento de este. Estos se encuentran en el siguiente enlace.

Una vez subidos los archivos, procedemos a la inserción del código (y a una modificación que tendremos que hacer). Para ello vamos a explicar cómo funciona a rasgos generales el código de la página, y que si no tenemos conocimientos de programación web, puede resultar un poco más complicado de entender.

Como podemos ver en el enlace a la hora de registrarnos, el archivo encargado de esto, se llama authentication.php y se encuentra en el directorio raiz de la tienda electrónica. Vamos a ver las últimas líneas de este fichero:

include(dirname(__FILE__).'/header.php');
$smarty->assign('errors', $errors);
Tools::safePostVars();
$smarty->display(_PS_THEME_DIR_.'authentication.tpl');
include(dirname(__FILE__).'/footer.php');

Podemos ver que, incluye la cabecera, luego una plantilla tpl, y finalmente el pie de página o footer. Antes de empezar a toquetear, debemos de tener claro dónde queremos colocar el captcha. Yo he decidido colocarlo justo antes del submit del formulario, es decir, entre el “Tax Identification” y el botón Register. Sin embargo, a priori no puedo meter el código, ya que para esto, tendría que dividir la plantilla en dos partes. Espero que se entienda un poco mejor esta aclaración con la siguiente imagen:

Conclusión: tenemos que dividir la plantilla en dos partes para poder introducir en medio nuestro código para llamarlo, así que vayamos a ello.

División de la plantilla en dos partes
La plantilla se encuentra en /themes/prestashop/authentication.tpl. Para empezar, renombraremos este archivo a authentication1.tpl, y crearemos uno vacio llamado authentication2.tpl. Recordemos que nosotros queremos poner el captcha tras la autenticación del DNI, así que vamos al final del fieldset class=”account_creation dni”, de manera que este archivo tiene que acabar:

	{l s='DNI / NIF / NIE'}

{/if}

Nuestro archivo authentication2.tpl contendrá lo que hemos quitado de ahí, que es lo siguiente:

{if isset($back)}{/if} *{l s='Required field'}

Ya tenemos dividida en dos la plantilla. Ahora tenemos que volver al authentication.php para cambiar lo que dijimos anteriormente de forma que quede de la siguiente manera:

include(dirname(__FILE__).'/header.php');
$smarty->assign('errors', $errors);
Tools::safePostVars();
$smarty->display(_PS_THEME_DIR_.'authentication1.tpl');
//Aquí irá el Captcha
$smarty->display(_PS_THEME_DIR_.'authentication2.tpl');
include(dirname(__FILE__).'/footer.php');

Agregando definitivamente el Captcha
Google también nos deja escrito una poca de ayuda para poder meter el captcha en la siguiente dirección. Seguiré explicando cómo se integra, ya que además, Prestashop autentica los datos y realiza el registro en la propia página donde se recogen, osea, no son dos páginas (una de recogida y una de verificación y creación del usuario) sino que se hace todo en la misma. Por lo que el código de “ambas páginas” lo tendremos que poner en la misma, en la de authentication.php.

Por partes: Google nos dice que en la página en donde tiene que ir el captcha, tenemos que poner el siguiente código:

require_once('recaptchalib.php');
$publickey = "your_public_key"; // you got this from the signup page
echo recaptcha_get_html($publickey);

La línea encargada de mostrar el captcha (la del echo) la colocamos justo entre medio de las dos partes de la plantilla, quedando:

include(dirname(__FILE__).'/header.php');
$smarty->assign('errors', $errors);
Tools::safePostVars();
$smarty->display(_PS_THEME_DIR_.'authentication1.tpl');
echo recaptcha_get_html($publickey);
$smarty->display(_PS_THEME_DIR_.'authentication2.tpl');
include(dirname(__FILE__).'/footer.php');

En la parte superior de la authentication.php pondremos las dos líneas que nos quedan para incluir la libreria:

require_once('recaptchalib.php');
$publickey = "xxxxxxxxxxxxxxx"; // Clave pública

Ya tenemos puesta la primera parte, pasemos a la segunda. Google nos dice que introduzcamos la siguiente:

  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }

La explicación de este código la podriamos dividir en dos: al principio se encuentra la parte encargada de la verificación, y posteriormente (con el if-else) se encuentra la parte condicional de lo que pasa si introducimos o no correctamente el captcha.

Volvemos a la parte superior de authentication.php y agregamos más de esas líneas, quedando junto con lo anteriormente escrito, de la siguiente manera:

require_once('recaptchalib.php');
$publickey = "xxxxxxxxxxxxxxx"; // Clave pública

$privatekey = "xxxxxxxxxxxx"; // Clave privada
$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);

Y finalmente, pasamos a la parte condicional de qué pasará al introducir mal nuestro querido captcha. Nos vamos a la parte de los errores, que tiene que estar sobre la línea 55, que empieza así:

if (Tools::isSubmit('submitAccount'))
{
	$create_account = 1;
	$smarty->assign('email_create', 1);
	$validateDni = Validate::isDni(Tools::getValue('dni'));
	if (!Validate::isEmail($email = Tools::getValue('email')))
		$errors[] = Tools::displayError('e-mail not valid');
	if (!Validate::isPasswd(Tools::getValue('passwd')))
		$errors[] = Tools::displayError('invalid password');
	if (Customer::customerExists($email))
		$errors[] = Tools::displayError('someone has already registered with this e-mail address');

Y justo ahí detrás, introducimos las dos últimas líneas que nos quedan:

	if (!$resp->is_valid)
		$errors[] = Tools::displayError('Error entering the CAPTCHA');

Test final
Al no introducir el captcha o introducirlo incorrectamente, nos saldrá el siguiente mensaje:

Y ahora, vamos a introducir en el navegador la línea que introduciamos en la Parte 1 para que se nos registrase una cuenta automáticamente con iMacros, a ver que pasa:

Con esto, damos por concluido este “tutorial”.

Saludos, lipman.

[Parte 1] Prestashop. El peligro de no usar Captcha

El peligro de no usar CAPTCHA

Buenas! Esta vez voy a tratar de hablar acerca de Prestashop, un sistema de comercio electrónico de código abierto.

Leí en otro blog acerca de un “fallo” (más bien descuido o como lo quieran llamar) de esta plataforma, y es que no usa captcha, pero no solo eso, sino que su sistema de verificación de usuarios a la hora de registrarse deja bastante que desear. Por un lado, se traga correos del tipo a@a.c y por otro, es posible crear cuentas con idénticos nombres, apellidos, direcciones… Lo único que se verifica, es que no haya dos cuentas de correo electrónico exáctamente iguales.

Procedemos a analizar con Tamper Data todos los datos que pasamos a la hora de registrarnos, simplemente rellenando los campos que son obligatorios. Deste Tamper Data, podremos ver algo parecido a esto:

Para encontrar lo que queremos con mayor facilidad, fijarnos en el campo de “Método” y buscar “POST” (método que usa el formulario para enviar los datos). Una vez encontrado, copiamos el contenido de POSTDATA, y vamos a hacer lo interesante: llenar la base de datos de cuentas basura.

Como dije anteriormente… lo único que se comprueba es que no existan dos direcciones de correo iguales, asi que podrían valer:

a1@a.c
a2@a.c
a3@a.c

Como no es plan de molestarnos en hacer un programa para ello, vamos a programar un script en la conocida addon de Firefox, iMacros. iMacros permite ejecutar todo tipo de cosas dentro del navegador, podria dedicarle una entrada entera y bien larga a este complemento tan interesante, que si no conociais, ya iba siendo hora. Usaremos iMacros para repetir el proceso tantísimas veces como queramos, de forma controlada.

Antes de programar el script, vamos a ver la base de datos con usuarios de prueba que he creado, para ver el antes, y el después. Como podemos ver, solo tenemos 6 usuarios en nuestra base de datos.

Procedemos a programar el script de iMacros, el cual explicaré un poco. Lo bueno de este addon, es la facilidad y flexibilidad que permite su código. Como vamos a ver, con 2 líneas habremos conseguido lo que queriamos:

1 URL GOTO=http://delanover.com/shop/authentication.php?POSTDATA=customer_firstname=nombre&customer_lastname=apellidos&email=delanover{{!loop}}%40a.c&passwd=password&days=&months=&years=&company=&firstname=nombre&lastname=apellidos&address1=asddd&address2=&postcode=1234&city=asddd&id_country=6&id_state=&other=&phone=&phone_mobile=&alias=Mi+direcci%C3%B3n&dni=&email_create=1&back=my-account.php&submitAccount=Registrarse
2 URL GOTO=http://delanover.com/shop/index.php?mylogout

La primera línea nos manda a esa dirección, en la cual, como podemos comprobar, están los datos que hemos recogido de Tamper Data anteriormente, precedidos de “http://delanover.com/shop/authentication.php?”. La interrogación es para separar, y el resto, es la dirección en donde nos registramos. Esto nos permite registrarnos con una sola línea.
La segunda línea, nos dirige a un enlace que nos desloguea. Es decir que lo que hacemos es: Registrarnos -> Desloguearnos -> Registrarnos -> Desloguearnos -> .. y así sucesivamente.

Prestamos atención a la variable {{!loop}} que se encuentra en la primera línea, en el correo. Esta variable, se irá incrementando en uno a medida que aumenta el bucle, así obtendremos cuentas de correo del tipo delanover1@a.c, delanover2@a.c, delanover3@a.c, …

Ahora sencillamente, ponemos el navegador, iniciamos el iMacros, seleccionamos el rango del bucle (desde 1, hasta 200 por ejemplo) y a esperar. Lo malo de esto es que no podremos usar el ordenador hasta que acabe (alguna pega tendria que tener) así que lo dejamos un rato corriendo y seguimos. Resultado de 15 minutos:

Continuará…

Parte 2

Saludos, lipman