Tips

[Informe Antivirus] Panda Security sobre virus e intrusos 28-03-2008

Ultimamente me han estado llegando los informes de panda antivirus cada 15 dias quiien sabe por que, pero no dejare de publicarlos claro a menos que se me pase (ups :D ), Aqui les dejo el informe de esta semana.
Un 21% de los ordenadores protegidos que se han analizado esta semana en la web Infected or Not (http://www.infectedornot.com) estaban infectados con malware.

“La gran cantidad de nuevo malware que se pone en circulación cada día provoca que las soluciones tradicionales ya no sean suficientes para mantener protegidos a los usuarios. Para que resulten eficientes, estas soluciones deben ser complementadas con herramientas online capaces de acceder a una base mayor de conocimiento y de detectar, por lo tanto, más malware”, afirma Luis Corrons, Director Técnico de PandaLabs.

Respecto a los ejemplares de malware que más infecciones han causado esta semana, la lista está encabezada por el adware Comet, diseñado para mostrar anuncios a los usuarios durante la navegación. Los gusanos Puce.E y Bagle.RP ocupan los siguientes puestos de la lista.

Top 10 TotalScan

  1. Adware/Comet
  2. W32/Puce.E.worm
  3. W32/Bagle.RP.worm
  4. Adware/OneStep
  5. W32/Archivarius.A.worm
  6. Adware/Zango
  7. Adware/Starware
  8. W32/Bagle.RP.worm
  9. Trj/Downloader.SZW
  10. Adware/SpyAxe

En relación con los nuevos ejemplares aparecidos durante la última semana, el informe de PandaLabs destaca los troyanos Nakuru.A, y Selex.B y el gusano RenameLoi.A.

Nakuru.A, una vez ejecutado, ralentiza la conexión a Internet del ordenador infectado. Además, modifica las ventanas de Internet Explorer incluyendo un título con el texto: “Welcome to Your New Home Page”.

Selex.B, por su parte, es un troyano diseñado para capturar información del sistema y enviarla a su creador. Roba direcciones de correo de los ordenadores infectados a las que luego envía correo basura.

Para engañar al usuario, la primera vez que es ejecutado este troyano muestra una pantalla para simular que se está descargando un gestor de descargas llamado: “Fastlane Downloader 3.34b”.

El gusano RenameLoi.A por su parte, cuando es ejecutado por primera vez, muestra una pantalla de Internet con el fondo en verde y un texto religioso, a la vez que hace sonar un pitido. Esta página también la establece como página de inicio y de búsqueda de Internet Explorer y también se muestra con cada reinicio del PC.

Cuando el ordenador arranca, muestra otra pantalla, esta vez con el texto “[Day of judgment]“. Para propagarse, este gusano se copia en todas las unidades removibles. Además, crea varias copias de sí mismo en el equipo.

RenameLoi.A también modifica la página del inicio y el buscador del navegador de Internet y lleva a cabo acciones maliciosas y molestas cómo ocultar los ficheros con atributos de ficheros de sistema.

Leer más

[Informe Antivirus] Panda Security sobre virus e intrusos 22-02-2008

Bueno esto lo pongo, pues como ya saben es viernes, y para que no sorprendan a nadie el fin de semana les dejo el informe semanal que me envia panda.

Estoy escribiendo un manual muy bueno sobre Ajax, php y MySQL que de seguro les gustara, solo que no tengo mucho tiempo, pero prometo postearlo este fin de semana o durante la proxima semana asi que muy al pendiente igual y sale hoy jajaja.

Casi el 30% de los ordenadores que disponen de alguna solución de seguridad, están infectados con malware, según los datos de los análisis realizados durante la presente semana en la web (http://www.infectedornot.com)

Dada la gran cantidad de malware que los delincuentes de Internet ponen cada día en circulación, las compañías de seguridad no dan abasto para detectarlos todos. Esto provoca que no todas las soluciones antimalware detecten lo mismo y, por ello, muchos ordenadores protegidos están infectados sin que los usuarios lo sospechen

, afirma Luis Corrons, director técnico de PandaLabs.

Por su parte, el gusano Bagle.HK ha sido el ejemplar de malware más activo durante esta semana. Destaca la gran actividad de esta familia de gusanos, ya que son cuatro las variantes que aparecen en la lista de las 10 amenazas que más daños han causado estos días.

Códigos maliciosos más activos:

  • W32/Bagle.HX.worm
  • Spyware/Virtumonde
  • W32/Bagle.RP.worm
  • Adware/Comet
  • W32/Puce.E.worm
  • W32/Bagle.QV.worm
  • Trj/Rebooter.J
  • Adware/Starware
  • Adware/Zango
  • W32/Bagle.RC.worm

En cuanto a nuevos ejemplares de malware aparecidos durante la semana, PandaLabs destaca a los troyanos Phisher.BH y Explorea.A, así como al gusano Yalove.A.

Phisher.BH está diseñado para recopilar en un archivo .txt -llamado windowsupdate_inst.log- todas las direcciones de correo que puedan encontrarse almacenadas en el ordenador. Posteriormente se encarga de enviar el fichero a un servidor FTP que supuestamente está ubicado en Brasil.

Hecho lo anterior, desde ese mismo servidor se envían mensajes de correo electrónico que tratan de redirigir a los usuarios a falsas páginas diseñadas para realizar ataques phishing. Las mismas están relacionadas con entidades bancarias y sistemas de pago por Internet.

Por su parte, Explorea.A es un troyano que tiene como objetivo realizar diversos cambios en la configuración del sistema, algunos de ellos muy molestos y que, posiblemente, preparen el terreno a posteriores ataques de otros ejemplares de malware. Así, por ejemplo, deshabilita el editor del registro de Windows, oculta ficheros y carpetas e, incluso, es capaz de reiniciar el sistema.

Por último, Yalove.A es un peligroso gusano que descarga otros malware en el ordenador. Cuando es ejecutado, crea varias copias de sí mismo con nombres como fuik.gif o mywork.exe, entre otros. Además, genera un archivo denominado AUTORUN.INF. Tras ello, muestra aleatoriamente en el navegador Internet Explorer, links que conducen a copias del buscador Google.

Además de lo anterior, se conecta a cierto dominio de Internet desde el que descarga una copia de sí mismo y una ampliación.

Asimismo, modifica el archivo host.txt para impedir el acceso a un gran número de páginas web relacionadas con aplicaciones de seguridad informática que puedan estar instaladas en el sistema. Al mismo tiempo, impide la ejecuciòn de muchas herramientas de ese tipo

El gusano también crea y modifica diversas entradas en el registro de Windows.

Via | Email www.pandasecurity.com

Leer más

[WordPress] Include: Incluyendo archivos en nuestro blog

Bueno, es domingo, y como vieron anteriormente, modifique la seccion de agregar a los RSS, y la seccion que tengo con Linklift, esto yo simplemente queria agregarle una tablita o unos divs para que lograra hacer los cambios y ademas de copiar cun poco de codigo.

Hasta ahi todo hiba bien, sin embargo, no resulto como yo queria, y cuando hice el cambio de el diseño de los formularios y el enlace a los feeds, no quedo muy bien , por culpa de internet Explorer.

Y lo tuve que cambiar rapidamente, y pense, ¿como hacer para que los cambios que yo haga se vean bien y los agrege sin tener que estar haciendo mucho trabajo y esfuerzo?, la respuesta fue sencilla.

Usar la funcion include, de php, veamos de que se trata esta función,

La sentencia include() incluye y evalúa el archivo especificado

y se usa de la siguiente forma.

Contenido del archivo vars.php

$color = 'verde';
$fruta = 'manzana';

Contenido del archivo test.php que usa la funcion include


echo "una $fruta $color "; // una
include 'vars.php'; //aqui hacemos el include del archivo

echo "una $fruta $color"; // una manzana verde

Como vemos es bastante facil, sin embargo, usando wordpress, es muy distinto por una sencilla razon: el PATH(ruta).

Con esto me refiero a que si usamos simplemente la funcion include, php hara lo siguiente.

Buscara el archivo que le hemos indicado, en la misma carpeta donde esta el archivo donde usaremos la funcion include, y posteriormente pasara, a buscarlo en la ruta indicada en el archivo de configuracion php.ini.

Entonces si tenemos nuestro archivo index.php, de wordpress.

www.misitio.com/wp-admin/wp-content/themes/mitema_de_miblog/index.php

Sin embargo al usar la funcion include sin especificar la ruta completa, en realidad estara incluyendo al archivo siguiente.

usando

.
...
include("archivo_a_incluir.php");
...
.

www.misitio.com/archivo_a_incluir.php

Esto sucede por la estructura y el manejo de ficheros de wordpress, para solucionar esto, haremos uso de la siguiente constante de WORDPRESS para PHP.

TEMPLATEPATH, la cual nos indica cual es el path o la ruta real de nuestro template, entoces.

Leer más

[Mootools] MooTools Swiff, interactuando swf, ajax y Mootools

En el blog de Mootools, comentan la nueva version beta de esta libreria ajax la cual ya nos traera a Swiff.

Esta herramiento nos permitira conectar Javascript y archivos swf, cosa que se complicaba bastante al hacerla manualmente usando Fscommand.

Para poder empezar a trabajar con esta herramienta, la haremos de la siguiente forma.

Primero bajaremos Mootools 1.2 Beta de la siguiente Direccion http://mootools.net/download/tags/1-2b2

Desde ahi podemos elejir que plugins o complementos deseamos bajar, junto con el nucleo de Mootools, obviamente elejiremos las que uno desea pero tambien incluiremos Swiff la cual se localiza dentro de la seccion Utilities.

Ajax, Ajaxman, Javascript, Librerias, Mootools

Ahora crearemos un archivo Flash, en este caso nuestro archivo flash estara vacio, lo unico que pondremos estara en una accion ahora escribiremos el ActionScript que permita crear la interfaz con Swiff.


//(ActionScript) achivo mySwf.swf
import flash.external.*;

function echoText(text) {
    ExternalInterface.call('alert', "This message is from Flash: "+text);
}

//Fires the 'onLoad' event within the Swiff object.
ExternalInterface.call(onLoad);

Ahora lo publicamos, y podremos cargarlo mediante Mootools Swiff.

Leer más

[Tip-Javascript] Desempaquetando scripts

Atendiendo a un email que me llego, de parte de uno de mis lectores, he decidido hacer un post para darle seguimiento a su problema.

Resulta que hace tiempo yo puse una solucion para que si tenemos un script escrito en Javascript, lo pudieramos empaquetar, esta solucion consta de un programa, el cual mediante diversos mecanismos, comprime y por asi decirlo empaqueta nuestro codigo.

Hasta ahi todo bien, sin embargo que pasa si tenemos empaquetado nuestro codigo y deseamos hacer la inversa?, osea desempaquetar el codigo?.

Primero tenemos un programa que empaqueta codigo y tambien desempaqueta, pero solo desempaqueta el codigo, que le indicamos anteriormente que nos empaquete, este programa lo pueden localizar en la siguiente pagina web.

http://dean.edwards.name/packer/

Primero debemos bajar el codigo fuente de este programa (de preferencia en PHP), por que aun no se como programar bien en perl y quiza tengan problemas.

Si tienen dudas sobre la instalacion de apache o la configuracion de php pueden checar el manual que escribi anteriormente en el blog.

Manual de instalacion y configuracion de apache con windows

Ahora bien ya que hemos descargado nuestro codigo vamos a extraerlo y lo ponemos en nuestro servidor web, que por defualt seria Localhost

Si lo hemos hecho por default y lo descomprimimos directamente en raiz, podremos entrar usando la siguiente direccion: http://localhost/packer.php-1.0/.

Ahi veremos los siguiente archivos
Index of /packer.php-1.0

  • Parent Directory
  • class.JavaScriptPacker.php
  • class.JavaScriptPacker.php4
  • example-file.php
  • example-inline.php
  • readme.txt

abrimos el archivo example-inline.php y veremos una pagina donde podemos comprimir nuestro codigo javascript, podemos hacer la prueba con cualquier js que tengan a la mano.

Yo por ejemplo use el parte del codigo de la mini-libreria JXS, asi pues si tenemos el siguiente codigo

.
....
.......
................
Jxs=
{
_D:function(_i,_t,_d,_p,_ta)
{
if(typeof _ta!="undefined"||_ta!=0)Jxs._T(_i,_ta);
var _id=_I(_i);
_id.onkeydown=function(e)
{
var _tcl=(typeof e=="undefined")?window.event.keyCode:e.which;
switch(_t)
{
case"R":
var _ind=_d.split(",");
var _exp=(_p==true)?"_tcl<_ind[0] || _tcl>_ind[1]":"_tcl>_ind[0] && _tcl<_ind[1]";
if(eval(_exp)){if(e)e.preventDefault();return false;}
else{return true;}
break;
case"A":
var _ind=_d.split(",");
var _ctrl=0;
var _tam=_ind.length;
var _exp=(_p==true)?"_ind[i]==_tcl":"_ind[i]==_tcl";
var _ret=(_p==true)?"!_ctrl":"_ctrl";
for(i=0;i<_tam;i++)
{_ctrl+=(_ind[i]==_tcl)?1:0;}
if(eval(_ret)){if(e)e.preventDefault();return false;}else{return true;}
break;
case"U":
var _exp=(_p==true)?"_tcl!=_d":"_tcl==_d";
if(eval(_exp))
{if(e)e.preventDefault();return false;}
else{return true;}
break;
default:
var _exp=(_p==true)?"_tcl!=_d":"_tcl==_d";
if(eval(_exp))
{if(e)e.preventDefault();return false;}
else{return true;}
break;
}
}
},
_T:function(_i,_ta)
{
var _id=_I(_i);
if(typeof _ta=="undefined"||_ta==0)
{return true;}
else
{
_id.maxLength=_ta;
_id.setAttribute("size",_ta);
return true;
}
},
_V:function(_t,_i,_e,_m)
{
var _id=_I(_i);
switch(_t)
{
case"txt":
var _v=_V(_i);
var _l=(typeof _m!="undefined")?'_v=="" || _v.length<_m':'_v==""';
if(eval(_l))
{
alert(_e);
_F(_i);
return false;
}
else
{
return true;
}
break;
case"mail":
var emailStr=_V(_i);
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s"+specialChars+"\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars+'+';
var word="("+atom+"|"+quotedUser+")";
var userPat=new RegExp("^"+word+"(\\."+word+")*$")
var domainPat=new RegExp("^"+atom+"(\\."+atom+")*$")
var matchArray=emailStr.match(emailPat)
if(matchArray==null){alert(_e);_F(_i);return false;}
var user=matchArray[1];
var domain=matchArray[2];
if(user.match(userPat)==null){alert(_e);_F(_i);return false;}
var atomPat=new RegExp(atom,"g");
var domArr=domain.match(atomPat);
var len=domArr.length;
if(domArr[domArr.length-1].length<2||domArr[domArr.length-1].length>3){alert(_e);_F(_i);return false;}
if(len<2){alert(_e);_F(_i);return false;}
break;
default:
var _v=_V(_i);
var _l=(typeof _m!="undefined")?'_v=="" || _v.length<_m':'_v==""';
if(eval(_l))
{
alert(_e);
_F(_i);
return false;
}
else
{
return true;
}
break;
}
}
};
etc
etc etc etc
...................
.........................
..........................

Copiamos y pegamos el codigo y lo pegamos, despues le damos click en donde dice pack y listo con eso obtenemos nuestro codigo comprimido

Y queda asi

eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k1||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k1){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1)}}return p}('T={1b:C(6,B,l,o,c){7(y c!="w"||c!=0)T.Q(6,c);4 q=J(6);q.1i=C(e){4 9=(y e=="w")?1k.17.19:e.1c;N(B){z"R":4 a=l.O(",");4 n=(o==8)?"9<a>a[1]":"9>a[0] &amp;amp;&amp;amp; 9</a><a>3){r(m);t(6);5 b}7(10<2){r(m);t(6);5 b}j;15:4 h=G(6);4 H=(y x!="w")....

Interesante verdad??, pero como lo descomprimimos???.

Facil, notaran que hay un boton que dice decode, lo presionamos y veremos nuestro codigo tal cual fue hecho, ahora bien como notaron el campo es de solo lectura, asiq ue de momento no podremos pegar ningun tipo de codigo dentro de ese cuadro.

Entonces vamos a modificarlo:

1.- Abrimos el archivo example-inline.php, con un editor de php(o Vim/bloc de notas)

2.- En la linea 78 , veremos el siguiente codigo

 <textarea id="packed" cols="80" rows="10" readonly="readonly"></textarea>........

3.- Ahora solo quitaremos el readonly=”readonly” para que podamos escribir cualquier cosa dentro del recuadro y nos quedara asi.

<textarea id="packed" rows="10" cols="80"></textarea>

4.-Lo guardamos y listo recargamos la pagina del empaquetador en nuestro navegador, y veremos que ya podemos pegar nuestro codigo.

eval(function(p,a,c,k,e,d){e=function(c){return(c<a ?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k1||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k1){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1)}}return p}('l 14=h(1t){l 3F=h(){k(9.1l&&U[0]!=\'5t\')f 9.1l.2s(9,U);R f 9};P(l o 1f 9)3F[o]=9[o];3F.M=1t;f 3F};14.1A=h(){};14.M={J:h(1t){l 3l=Q 9(\'5t\');l 5n=h(23,1j){k(!23.2s||!1j.2s)f L;f h(){9.1k=23;f 1j.2s(9,U)}};P(l o 1f 1t){l 23=3l[o];l 1j=1t[o];k(23&&23!=1j)1j=5n(23,1j)||1j;3l[o]=1j}f Q 14(3l)},1Y:h(1t){P(l o 1f 1t)9.M[o]=1t[o]}};1I.J=h(){l O=U;O=(O[1])?[O[0],O[1]]:[9,O[0]];P(l o 1f O[1])O[0][o]=O[1][o];f O[0]};1I.4A=h(){P(l i=0;i<u .V;i++)U[i].J=14.M.1Y};Q 1I.4A(4k,1h,3N,6e,14);k(4Y 2L==\'5q\'){l 2L=14.1A;2L.M={}}R{2L.M.4C=19}T.J=B.J=1I.J;l 70=T;h $n(K){k(K===1D||K===5q)f L;l n=4Y K;k(n==\'3L\'){k(K.4C)f\'W\';k(K.1g)f\'1r\';k(K.6V){1K(K.5r){12 1:f\'W\';12 3:f K.6W.11(/\\S/)?\'6E\':\'3X\'}}}f n};h $2Y(K){f!!(K||K===0)};h $6H(K,5E){f($n(K))?K:5E};h $5k(33,1S){f u.7K(u.5k()*(1S-33+1)+33)};h $4v(1o){7t(1o);7u(1o);f 1D};k(T.5a)T.2a=T[T.4D?\'7B\':\'4j\']=19;R k(B.5Q&&!B.7J&&!7E.7q)T.29=19;.....

Nos queda algo como:

var(properties){var klass=function(){if(this.initialize&&arguments[0]!='noinit')return this.initialize.apply(this,arguments);else return this};for(var property in this)klass[property]=this[property];klass.prototype=properties;return klass};Class.empty=function(){};Class.prototype={extend:function(properties){var pr0t0typ3=new this('noinit');var parentize=function(previous,current){if(!previous.apply||!current.apply)return false;return function(){this.parent=previous;return current.apply(this,arguments)}};for(var property in properties){var previous=pr0t0typ3[property];var current=properties[property];if(previous&&previous!=current)current=parentize(previous,current)||current;pr0t0typ3[property]=current}return new Class(pr0t0typ3)},implement:function(properties){for(var property in properties)this.prototype[property]=properties[property]}};Object.extend=function(){var args=arguments;args=(args[1])?[args[0],args[1]]:[this,args[0]];for(var property in args[1])args[0][property]=args[1][property];return args[0]};Object.Native=function(){for(var i=0;i<arguments.length;i++)arguments[i].extend=Class.prototype.implement};new Object.Native(Function,Array,String,Number,Class);
if(typeof HTMLElement=='undefined'){var HTMLElement=Class.empty;HTMLElement.prototype={}}
else{HTMLElement.prototype.htmlElement=true}
window.extend=document.extend=Object.extend;
var Window=window;function $type(obj){if(obj===null||obj===undefined)return false;var type=typeof obj;if(type=='object'){if(obj.htmlElement)return'element';if(obj.push)return'array';if(obj.nodeName){switch(obj.nodeType){case 1:return'element';case 3:return obj.nodeValue.test(/\S/)?'textnode':'whitespace'}}}return type};function $chk(obj){return!!(obj||obj===0)};function $pick(obj,picked){return($type(obj))?obj:picked};

Sin duda esta herramienta es de gran ayuda para que estudiemos como estan programadas las grandes librerias, y no solo eso si no ver como podemos implementarlas mejor y quizas hasta desarrollar algun tipo de plugin, en fin solo la imaginacion puede ser nuestro limite.</p>

Un saludo especial a nuestro amigo David, que sin sus dudas, este post no hubiera sido escrito, y te mando los scripts por mail, saludos.

Leer más

[Revisiones] Como posicionarte en los buscadores

Sin duda, hay algo que a veces no entiendo, y es como hacer para aparecer en los resultados de google, por ejemplo, hay muchos que deseamos salir en meneame en portada, pero sin duda los mas importante es salir en algun buscador en primer lugar!!, cosa que yo aun no he conseguido, yo he llegado ha estar con la busqueda ajax, solo en 5to lugar en busquedas en español, sin embargo creo que es un logro.

Bueno y por que les cuento esto? facil, conoci un blog en donde uestedes pueden buscar tecnicas de posicionamiento en buscadores,en este blog llamado adseok este podemos encontrar muchisma informacion sobre este tipo de temas.

El blog esmuy interesante, vale la pena visitarlo siempre por que cada dias nos sorprende con entradas muy interesantes y divertidas.

Como esta, que se trata de hacer una revision a su blog, el te devuelve un enlace, el cual es importante recordemos como influye esto en el Page Rank y tambien influye en technorati.

Cada dia hay mas formas de encontrar lo que buscamos en la web, dense una vuelta por ese blog y de seguro que encontraran muchisma informacion util.

Leer más

[Informe Antivirus] Panda Security sobre virus e intrusos

Madrid, 18 de enero de 2008 – Según los datos recogidos en la web Infected or Not (http://www.infectedornot.com), el gusano Bagle.HX ha sido el ejemplar que más ordenadores ha infectado durante la última semana. Dos ejemplares de adware, Comet y Starware, ocupan las siguientes dos posiciones en la lista del malware más activo.

Top 10 TotalScan:

  1. W32/Bagle.HX.worm
  2. Adware/Comet
  3. Adware/Starware
  4. Adware/VideoAddon
  5. W32/Bagle.QV.worm
  6. Spyware/Virtumonde
  7. Trj/Downloader.RZC
  8. Adware/Lop
  9. Trj/Rebooter.J
  10. Adware/NaviPromo

Además, según datos de esta misma web, un 27,15% de los ordenadores protegidos (con una solución de seguridad instalada y actualizada) que se analizaron esta semana estaban infectados con algún tipo de código malicioso.

"La razón es que se crea tanto malware actualmente que las soluciones de seguridad tradicionales ya no dan abasto. Por ello, su labor debe ser complementada con herramientas online capaces de detectar más malware, como NanoScan o TotalScan", explica Luis Corrons, Director Técnico de PandaLabs.

En relación con los nuevos ejemplares de malware aparecidos, el informe semanal de PandaLabs destaca los gusanos MSNworm.BU y P2PShared.C.

Leer más

Historico de entradas

febrero 2012
L M X J V S D
« ene    
 12345
6789101112
13141516171819
20212223242526
272829  

Ajaxman

Mi nombre es Javier, soy desarrollador web con especialización en PHP (avanzado), HTML, CSS y Javascript(Medio).

Me considero evangelizador de Kohana Framework, Mozilla Firefox y GNU/Linux Debian.

Estoy casado, y tengo dos hermosos hijos.

Todos los contenidos a menos que se exprese lo contrario estan bajo licencia Creative Commons.

Enlazanos!!

hit counters online counter