Monday, September 13, 2010

Extraer cookies de Firefox 3 (en Linux)

El cuento es el siguiente, tengo una cuenta premium en rapidshare y hasta ahora me había funcionado perfectamente mi script para guardar cookies:

wget --save-cookies .cookies/rapidshare --post-data "login=el_login&password=el_password" --no-check-certificate -O - https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi > /dev/null

Pero como no todo puede ser fácil, los "amigos" de rapidshare decidieron cambiar la forma de hacer login en el sitio, de manera que ya no puedo guardar las cookies como antes.

Buscando por la red encontré un plugin de firefox para exportar cookies pero no quiero estarle instalando cosas a firefox, embasurándolo pués. También encontré scripts en python que hacen el trabajo pero me dió flojera usar python y tener que "entender" el script, así que decidí intentar sacar las cookies "a mano" yo mismo.

El archivo de cookies de firefox 3 es una base de datos sqlite que se encuentra (en Linux) en $HOME/.mozilla/firefox/cookies.sqlite.

En este archivo hay una tabla con el nombre moz_cookies con los siguientes campos:

id INTEGER PRIMARY KEY,
name TEXT,
value TEXT,
host TEXT,
path TEXT,
expiry INTEGER,
lastAccessed INTEGER,
isSecure INTEGER,
isHttpOnly INTEGER


Para bajarme la mayoría de las cosas de rapidshare uso wget con la opción --load-cookies. Wget espera un archivo de cookies con el siguiente formato:

.rapidshare.com TRUE / FALSE 1731510000 enc cadena


El formato es explicado aquí: http://kb.mozillazine.org/Cookies.txt

Cada uno de estos campos debe estar separado por un "TAB".

Para extraer esta información debemos hacer lo siguiente:

  • Entrar en la página deseada y autenticarse.

  • Verificar en el navegador que se tiene la cookie (depende del navegador... investiga!!!).

  • Copiar el archivo de cookies a un lugar "seguro" (/tmp por ejemplo).

  • Ejecutar lo siguiente (en Linux):

    $ sqlite3 cookies.sqlite
    sqlite> .separator \t
    sqlite> .output /tmp/cookies.txt
    sqlite> select host, "TRUE", path, "FALSE", expiry, name, value from moz_cookies where host = '.rapidshare.com' and name = 'enc';
    sqlite> .quit


    En /tmp deberíamos tener el archivo cookies.txt con los resultados separados por "tab".

    Con el comando:

    $ cat -vte /tmp/cookies.txt

    deberíamos observar el archivo de cookies con los valores seleccionados y con el caracter "^I" de separador.

  • Utilizar este archivo de cookies con wget.

Un solo detalle más, si se quiere alargar la fecha de expiración se puede sustituir el expiry en el por algo como expiry+3600*24*365, con lo que le estaríamos añadiendo un año a la fecha de expiración de la cookie.

Espero que esto sirva de ayuda.