Autor Tema: Programando Plugin para Firefox  (Leído 4213 veces)

0 Usuarios y 1 Visitante están viendo este tema.

humberto121

  • *
  • Mensajes: 38
  • Liked: 2
Programando Plugin para Firefox
« : abril 19, 2009, 11:02:28 pm »
El servicio de MegaUpload tiene cuentas premium que permiten descargas de archivos grandes a buena velocidad. Existen paginas que ofrecen las sesiones (cookies) de estas cuentas premium, no ofrecen el login/pass porque lo podrian cambiar y se podria perder el acceso a la cuenta.

Por lo general tenemos que encontrar estas cookies y las tenemos que poner manualmente, para automatizar este proceso decidi crear esta extension para firefox.

Lo que hace es que al ser activada se conecta a un url de un .txt que contiene la cookie premium y nos la pone automaticamente. He decidido remover la cookie del url default que trae este script, pero si lo quieren funcional solo tienen que crear un .txt y apuntarlo desde este script.


Me apoye con google buscando  tutoriales, no tenia ni idea como funcionaba, asi que decidi partir desde 0, yo trabajo bajo windows asi k ni idea k era un xpi,  para los que no saben xpi "La extensión xpi viene de XPInstall donde XP se refiere a Cross (X) Platform o multiplataforma, es decir, que puede ser ejecutado en distintas plataformas (Windows, Linux, Mac OS,…)".
Fuente: http://mundogeek.net/index.php?s=xmlns

Simplemente cambiando la extension de xpi a zip en windows podemos extraer los archivos que se encuentran dentro. En este obtendremos  3 carpetas:
->chrome     //Aki  va guardado nuestro programa en terminación jar
->content          // Son publicas para  el usuario y van dentro del jar
->locale             //Son publicas para el usuario y van dentro del jar
chrome.manifest    //Declaramos el manifiesto chrome
install.rdf                 //Especificamos nombre y datos de la isntalacion como compatibilidad

Ok esto es general y puede variar ok

Empezaremos con install.rdf el contenido de este es el siguiente:

Código: [Seleccionar]
<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">

  <Description about="urn:mozilla:install-manifest"> // declara que es para mozilla
    <em:id>Correo del creador </em:id>
    <em:version>1.0</em:version>  //Espefica la version de la aplicacion
    <em:type>2</em:type> // el tipo si es complemento, plugin o aplicacion
   
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> //Espefica que solo es para firefox
        <em:minVersion>1.5</em:minVersion> // Indica la minima  y
        <em:maxVersion>3.0.*</em:maxVersion> // Maxima version
      </Description>
    </em:targetApplication>
   
    <!-- Front End MetaData -->
    <em:name>MCokie v1</em:name> // Nombre de la aplicacion
    <em:description>Agrega de una forma facil cookies, el uso inadecuado de esto no es responsabilidad del autor</em:description>  //Descripcion de la aplicación o función de la misma
    <em:creator>Humberto121</em:creator> //Nombre del creado
    <em:homepageURL>http://drivers911.co.cc/</em:homepageURL> // url  o pagina web del creador
    <em:iconURL>chrome://MCokie/content/icon.png</em:iconURL> //Icono que identifica el plugin
  </Description>     
</RDF>

Continuamos con el chrome.manifest   en este pequeño archivo se declara como se usara el plugin
1-content MCokie jar:chrome/MCokie.jar!/content/
2-overlay chrome://browser/content/browser.xul chrome://MCokie/content/MCokie.xul
2-locale MCokie en-US jar:chrome/MCokie.jar!/locale/en-US/
3-locale MCokie pt-BR jar:chrome/MCokie.jar!/locale/pt-BR/
4-locale MCokie es-ES jar:chrome/MCokie.jar!/locale/es-ES/

En la 1º línea declaramos la ubicación del programa que correra y que se utilizara la carpeta content.
En la 2º línea con el overlay decimos que utilizara chrome://browser/content/browser.xul  que es como el interprete de xul y luego enseguida especificamos el menú que se cargara de xul y la ubicación de la misma.
En  la 3º,4º y 5º línea especifica que archivo se usara para cada versión de idioma de firefox ok.


Bueno ahora necesitamos hacer nuestro .jar para que funcione pero como se hace esto????
Pues este .jar es un zip cambiado de extensión solamente,  en el archivo que les mando pueden probar .

En este caso mi .jar esta compuesto por  estas carpetas y archivos:
->content          Aquí va la programación
-icon.png    //Este es el icono que lleva el programa
-MCokie.js   //La programación en si en javascript
-MCokie.xul    //Crea los menus y llama a las funciones
->locale             Aquí van las traducciones asi le podríamos llamar
     ->en-US
      -MCokie.dtd    //Traduccion
   ->es-ES
      -MCokie.dtd   //Traduccion
   ->pt-BR
      MCokie.dtd   //Traduccion

Bueno como todos sabemos el icon.png lo pueden generar con muchos software busquen en google si no saben.

Lo intersante esta en MCokie.js que es todo este código:

Código: [Seleccionar]
var pbmup_preferencesService = null; //Declaramos la variable
function pbmup_getPreferencesService() //Creamos una funcion
{
    if(!pbmup_preferencesService) //Comparacion de variable
    {
        pbmup_preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
    }

    return pbmup_preferencesService;
}
function pbmup_isPreferenceSet(preference)
{
    if(preference)
    {
        return pbmup_getPreferencesService().prefHasUserValue(preference);
    }

    return false;
}

function pbmup_deletePreference(preference)
{
    if(preference)
    {
        if(pbmup_isPreferenceSet(preference))
        {
            pbmup_getPreferencesService().clearUserPref(preference);
        }
    }
}

function pbmup_setStringPreference(preference, value) {
if(preference) {
var supportsStringInterface = Components.interfaces.nsISupportsString;
        var string                  = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsStringInterface);

        string.data = value;

        pbmup_getPreferencesService().setComplexValue(preference, supportsStringInterface, string);
    }
}
//Lo que esta en negrita es para verificar que mozzila soporte la creacion y modifcacion de cookies
function pbmup_setcookie(name, value, host, path, expires, scheme) {   //Creamos la funcion para crear una cookie y como se ve arriba se compone de nombre,valor,host,path,expiracion,y si tiene seguridad
var cookieService = Components.classes["@mozilla.org/cookieService;1"].getService().QueryInterface(Components.interfaces.nsICookieService);
var cookie        = "";
var uri           = null;

cookie = name + "=" + value + ";";
    cookie += "domain=" + host + ";";
cookie += "path=" + path + ";";
cookie += "expires=" + expires + ";";

uri = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(scheme + host + path, null, null);

cookieService.setCookieString(uri, null, cookie, null);
} // Hasta  aquí termina la función para crear una cookie

var conexion1;
var vale;
var intervalo; // declaramos variable
function Ligar() {  //creamos función ligar
Requisi(); //Llama a una función con el nombre Requisi
intervalo = setInterval("Requisi();",40000); //Creamos un intervalo que mientras este activada la función ligar, automáticamente llame a la función Requisi, el tiempo se espefica en milisegundos
} //Fin de la funcion
function Requisi() //Iniciamos funcion Requisi
{
  clear();  //Hacemos que se ejecute la funcion clear
  conexion1=crearXMLHttpRequest(); //Creamos una solicitud de pagina
  conexion1.onreadystatechange = procesarEventos; //Chekamos el estado de la pagina solicitada
  conexion1.open("GET",'http://crbob.iespana.es/cook.txt', true); //Abrimos la conexión con la función get, ala pagina deseada en este caso es 'http://crbob.iespana.es/cook.txt'
  conexion1.send(null); //Se envía la peticion
}

function procesarEventos() //Iniciamos la función procesarEventos
{
  var detalles = document.getElementById("detalles"); //Declaramos la función detalles que no es necesaria pero la gregue por que la iva autilizar en un comparador.
  if(conexion1.readyState == 4) //Checamos el estado de conexion1 leyendo su estado el estado 4 significa cargada. Preguntar si se desea saber los demas
  {
   vale=conexion1.responseText; //Declaramos que la variable vale es igual a la respuesta recibida por conexion1.responseText,
    agregar(); //Ejecutamos la funcion agregar
   }
}
function crearXMLHttpRequest() //Creamos la funcion crearXMLHttpRequest que es para que soporte a diferentes navegadores, pues en ie es un objeto
{
  var xmlHttp=null;
  if (window.ActiveXObject)
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  else
    if (window.XMLHttpRequest)
      xmlHttp = new XMLHttpRequest();
  return xmlHttp;
}

function Desligar() {  //Declaramos la funcion desligar que lo que hace es parar el intervalo que comenzamos
    clearInterval(intervalo);
}



function agregar() {  //Creamos la funcion agregar
    var scheme        = "http://";
var host          = ".megaupload.com";
var path          = "/";
var uri           = null;
    var expires       = "Fri Jun 06 2036 00:00:00 GMT";
    var expiresDate   = new Date(expires); //Declaramos las variables que se utilizaran enseguida

pbmup_setcookie("__utma", "216392970.141421526255870910.1239838514.1239838514.1239838514.1", host, path, expiresDate, scheme);
pbmup_setcookie("__utmc", "216392970", host, path, expiresDate, scheme);
pbmup_setcookie("user", vale, host, path, expiresDate, scheme);
pbmup_setcookie("__utmz", "216392970.1239838514.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)", host, path, expiresDate, scheme);
pbmup_setcookie("__utmb", "216392970.5.10.1239838514", host, path, expiresDate, scheme);
pbmup_setcookie("l", "es", host, path, expiresDate, scheme);
//LLamando ala funcion setcookie y con los valores que añadimos se crean las variables
//vale es una variable que yo puse para que creara solo esa pero se pueden poner mas
    host = ".megavideo.com" //Con esto cambiamos de host
    pbmup_setcookie("__utma", "216392970.141421526255870910.1239838514.1239838514.1239838514.1", host, path, expiresDate, scheme);
pbmup_setcookie("__utmc", "216392970", host, path, expiresDate, scheme);
pbmup_setcookie("user", vale, host, path, expiresDate, scheme);
pbmup_setcookie("__utmz", "216392970.1239838514.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)", host, path, expiresDate, scheme);
pbmup_setcookie("__utmb", "216392970.5.10.1239838514", host, path, expiresDate, scheme);
pbmup_setcookie("l", "es", host, path, expiresDate, scheme);
}

function clear() //Funcion clear sirve para limpiar la cache, y no nos este volviendo el mismo valor siempre
{
    var cacheService = getCacheService();

    try
    {
        cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
        cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
    }
    catch(exception)
    {
       
    }
}
function getCacheService()
{
    var cacheClass = Components.classes["@mozilla.org/network/cache-service;1"];
    var service    = cacheClass.getService(Components.interfaces.nsICacheService);
 }


Para que esto funcione necesitamos remplazar http://crbob.iespana.es/cook.txt por el URL de un .txt donde tengamos la cookie premium. Por el momento no puedo publicar la cookie.
« Última Modificación: abril 20, 2009, 11:20:18 am por hkm »

Jorge L Lopez Yanez

  • **
  • Mensajes: 64
  • Liked: 0
Re: Programando Plugin para Firefox
« Respuesta #1 : mayo 11, 2009, 04:26:14 pm »
CUal es el sitio que te da las cookies?

No seria mas facil que el javascrip accediera al sitio, y pormedio de regex hiciera un parse a la cookie y utilizara esa... a final decuetnas sigue siendo manual lo que haces, tienes ke escribirla en un archivo .txt y subirlo a internet.....