miércoles, 2 de febrero de 2011

Google creará aplicaciones propias para Android

Diario Ti: El proceso implica además que algunos empleados de Google están siendo trasladados internamente para trabajar en el desarrollo de aplicaciones móviles para Android.

Aunque el número de aplicaciones para iOS supera con creces las disponibles para Android, difícilmente podría decirse que hay escasez en Android Market. Con todo, el número de aplicaciones desarrolladas por la propia Google es bastante limitada. Según Wall Street Journal, el número no superaría las 20 unidades y algunas estarían incorporadas en Android, mientras que otras, como Google Sky Map y Goggles son opcionales.

Asimismo, varias de las aplicaciones ofrecidas por Google también están disponibles para plataformas distintas a Android. Según las fuentes consultadas por Wall Street Journal, algunas de las aplicaciones que ahora comenzarán a ser desarrolladas serán exclusivas para Android.

La nueva ofensiva de Google para Android será desplegada en todas las oficinas internacionales de la empresa. Entre las aplicaciones de interés para la empresa figuran los juegos y servicios basados en la posición geográfica del usuario.

Según la fuente de Wall Street Journal, el proceso de contrataciones estará dirigido por Benjamin Ling, actual director de productos de búsqueda en Google. Wall Street Journal precisa que no fue posible contactar al propio Ling.

La semana pasada, Google anunció además sus planes de aumentar su plantilla, de los actuales 24.000 empleados, a 30.000.
via diario Ti

JAVACC

JavaCC (Java Compiler Compiler) es un generador de analizadores sintácticos de código abiertopara el lenguaje de programación Java. JavaCC es similar a Yacc en que genera un parser para una gramática presentada en notación BNF, con la diferencia de que la salida es en código Java. A diferencia de Yacc, JavaCC genera analizadores descendentes (top-down), lo que lo limita a la clase de gramáticas LL(K) (en particular, la recursión desde izquierda no se puede usar). El constructor de árboles que lo acompaña, JJTree, construye árboles de abajo hacia arriba (bottom-up).
JavaCC está licenciado bajo una licencia BSD.
JavaCC (Java Compiler Compiler) es una herramienta de generación automática de analizadores gramaticales basada en Java. La herramienta es propiedad de Sun Microsystems, la compañía propietaria del lenguaje Java, por lo que se ha convertido en el metacompilador más usado por los programadores en Java.
El funcionamiento de la herramienta consiste en analizar un fichero de entrada, que contiene la descripción de una gramática, y generar un conjunto de ficheros de salida, escritos en Java, que contienen la especificación de un analizador léxico y de un analizador sintáctico para la gramática especificada.
Las características más importantes de esta herramienta son las siguientes:
• Es la herramienta más utilizada en Java. Los propietarios estiman en cientos de miles el número de descargas de la herramienta y los foros de discusión congregan a miles de usuarios interesados en JavaCC.
• Se basa en una análisis sintáctico descendente recursivo.
• Por defecto JavaCC analiza gramáticas de tipo LL(1), pero permite fijar un Lookahead mayor (para analizar gramáticas LL(k)) e incluso utilizar un Lookahead adaptativo.
• Las especificaciones léxica y sintáctica de la gramática a analizar se incluyen en un mismo fichero.
• La especificación léxica se basa en expresiones regulares y la especificación sintáctica utiliza el formato EBNF.
• Junto a la herramienta principal se incluyen dos utilidades: JJTree, para crear automáticamente un generador de árboles sintácticos, y JJDoc, para generar automáticamente la documentación de la gramática en formato HTML.
• La distribución incluye numerosos ejemplos de gramáticas y existen repositorios en internet con la especificación de muchísimas gramáticas en el formato de JavaCC.
• La gestión de errores léxicos y sintácticos está basada en excepciones y contiene información muy valiosa respecto al origen del error y su posición.
• Existe un plugin para Eclipse que facilita la edición y ejecución de la herramienta dentro del desarrollo de cualquier aplicación en Java.
construir un analizador lexico con javacc
javacc
programa de practicas
manual javacc

ANTLR

¿Qué es y cómo funciona ANTLR?
ANTLR es un programa está escrito en java, por lo que se necesita alguna máquina virtual de java para poder ejecutarlo. Es software libre, lo que quiere decir que al descargarlo de la página oficial (http://www.antlr.org) obtendremos tanto los ficheros compilados *.class como el código fuente en forma de ficheros *.java.
ANTLR es un generador de analizadores. Mucha gente llama a estas herramientas compiladores de compiladores 15 , dado que ayudar a implementar compiladores es su uso más popular. Sin embargo tienen otros usos. ANTLR, por ejemplo, podría servir para implementar el intérprete de un fichero de configuración.
ANTLR es capaz de generar un analizador léxico, sintáctico o semántico en varios lenguajes (java, C++ y C# en su versión 2.7.2) a partir de unos ficheros escritos en un lenguaje propio.
Dicho lenguaje es básicamente una serie de reglas EBNF y un conjunto de construcciones auxiliares.


ANTLR genera analizadores pred-LL(k), y él mismo utiliza un analizador pred-LL(k) para leer los ficheros en los que están escritas las reglas EBNF. ANTLR admite acciones en sus reglas, además de otras prestaciones como paso de parámetros, devolución de valores o herencia de gramáticas.
Los analizadores en ANTLR
Ya mencionamos que ANTLR genera sus analizadores a partir de unos ficheros de entrada en los que se especifica el funcionamiento de dichos analizadores mediante el uso de reglas EBNF.
Para poder comprender los analizadores necesitaremos conocer la sintaxis de dichos ficheros de entrada.
Especificación de gramáticas con ANTLR
Los ficheros con los que trabaja ANTLR tienen la terminación *.g, y en adelante los llamaremos ficheros de especificación de gramáticas o, directamente, ficheros de gramáticas.
Un fichero de gramática contiene la definición de uno o varios analizadores. Cada uno de estos analizadores se traducirá a código nativo (java, C++ o C#, dependiendo de ciertas opciones) en forma de clases. Es decir, por cada analizador descrito en el fichero de gramáticas se generará una clase.
Todo fichero de gramática tiene la siguiente estructura:
header{
/* opciones de cabecera */
}
options
{
/* opciones generales a todo el fichero */
}
// A continuación la definición de el(los) analizadore(s).
Cabecera: Esta zona es opcional (puede aparecer o no). Delimitada por las partículas “header {” y “}”, en esta zona incluimos elementos en código nativo (java, C++ o C#) que deben preceder a la definición de las diferentes clases de los analizadores. Esta sección se utiliza para incluir otros ficheros (import e #include), definir el paquete al que pertenecerá la clase del analizador (package) etc.
• Opciones generales del fichero: Esta zona es opcional. Permite controlar algunos parámetros de ANTLR mediante “opciones”. Las opciones se representan como asignaciones:
nombreOpcion=valor;. Se utilizan mucho en ANTLR. La opción más importante de esta zona es la que permite elegir el lenguaje nativo en el que se generarán los analizadores (java,C++,C#). Su valor por defecto es “java”. Dado que vamos a generar reconocedores en java, no necesitaremos esta zona. En el manual de ANTLR aparecen todas las opciones que se pueden incluir en esta zona.
Tras las opciones generales del fichero vienen las definiciones de analizadores. Es muy común que en un mismo fichero se especifiquen varios analizadores (en la mayoría de los ejemplos que acompañan a ANTLR se utiliza esta técnica). Sin embargo también es posible definir cada analizador en un fichero, sobre todo cuando se trata de analizadores extensos.
Dado que nuestro lenguaje en este capítulo será muy sencillo, definiremos los tres analizadores en el mismo fichero.
En ANTLR, cada analizador tiene la siguiente estructura:
class nombreAnalizador extends tipoAnalizador; // definición del analizador
options {
/* Zona de opciones del analizador*/
}
tokens {
/* Zona de definición de tokens */
}
{
/* Zona de código nativo */
}
/* Zona de reglas */
Definición del analizador: En la primera línea definimos el nombre del analizador (nombreAnalizador) y su tipo (tipoAnalizador). El tipo puede será Lexer para analizadores léxicos, Parser para analizadores sintácticos y TreeParser para analizadores semánticos.
Zona de opciones: Esta zona es opcional, aunque casi siempre interesa utilizarla. En esta zona se definen propiedades muy importantes del analizador: se define el lookahead (k), si se va a generar un AST o no, en el caso de Parsers y TreeParsers, la importación/exportación de vocabulario, la activación/desactivación del tratamiento automático de errores etc
La zona de código nativo
No hay que olvidar que para ANTLR cualquier analizador es una instancia de una clase. En ocasiones es muy útil declarar métodos y atributos para dicha clase.
Para añadir métodos y variables a una clase de un analizador basta con escribirlos, entre la zona de opciones y la zona de reglas, entre llaves.
Flujo de caracteres
Para ANTLR el flujo caracteres es, simplemente “cualquier subclase de java.io.InputStream”.
Lo más normal es utilizar un flujo de caracteres provinentes de un fichero (con un FileInputStream) pero pueden utilizarse otras fuentes, como una cadena (StringBufferStream) o una página web (URL.openStream).
El InputStream que proporciona los caracteres al analizador léxico se le pasa como parámetro en su constructor.



Uno de los inconvenientes de utilizar las implementaciones de ASTs proporcionadas por ANTLR es que la visión que se tiene del árbol es muy reducida; cada nodo solamente tiene constancia de su primer hijo y de su “hermano”. Es decir, se trabaja con un árbol como el de la izquierda en la siguiente figura:

lunes, 31 de enero de 2011

DEFINICION DIRIGIDA POR LA SINTAXIS

Para traducir una construcción de un lenguaje de programación, un compilador puede necesitar tener en cuenta muchas características, además del código generado para la construcción. Una definición dirigida por sintaxis es un formalismo para especificar las traducciones para las construcciones en función de atributos asociados con sus componentes sintácticos.
Utiliza una gramática independiente de contexto para especificar la estructura sintáctica de la entrada, la idea es asociar con cada símbolo de la gramática un conjunto de atributos (que luego veremos que pueden ser sintetizados o heredados) y además a cada producción un conjunto de reglas semánticas para calcular los valores de los atributos asociados con los símbolos que aparecen en esa producción. La definición dirigida por sintaxis consiste en sí entonces de la gramática y el conjunto de reglas semánticas.
Para traducir una construcción de un lenguaje de programación un compilador necesita el código generado para la construcción, y además:
• Tipo de la construcción
• Posición de la primera instrucción del código objeto
• Número de instrucciones generadas ...
Los atributos se mencionan de forma abstracta. Un atributo puede representar cualquier cantidad un tipo, una cadena, una posición de memoria o cualquier otra cosa)
• Una definición dirigida por la sintaxis es una generalización de una gramática independiente de contexto en la que cada símbolo gramatical tiene asociado un conjunto de atributos
– Especifica la traducción de una construcción en función de los atributos asociados con sus componentes sintácticos
• Un esquema de traducción es una gramática independiente de contexto en la que se asocian atributos con los símbolos gramaticales y se insertan acciones semánticas encerradas entre llaves dentro de los lados derechos de las reglas de producción
– Es una notación orientada a procedimientos que se utiliza para especificar traducciones
• Utilizan una gramática independiente de contexto para especificar la estructura sintáctica de la entrada
• A cada símbolo de la gramática se le asocia un conjunto de atributos
• A cada regla de la gramática se le asocia un conjunto de reglas semánticas para calcular los valores de los atributos asociados con los símbolos de esa regla
• La gramática y el conjunto de reglas semánticas constituyen la definición dirigida por la sintaxis
Una traducción es una transformación de una entrada en una salida. La salida para cada entrada W se especifica como sigue:
• Se construye un árbol sintáctico para W
• Suponiendo que un nodo n del árbol está etiquetado con el símbolo X de la gramática se escribe X.a para indicar el valor del atributo a de X en ese nodo

• El valor de X.a en n se calcula por la regla semántica para el atributo a asociado a la regla X utilizada en el nodo n
El árbol de análisis sintáctico que muestra los valores de los atributos en cada nodo se denomina árbol de análisis sintáctico con anotaciones
ATRIBUTOS
• El conjunto de atributos asociado a cada símbolo gramatical se divide en dos subconjuntos
– Atributos sintetizados. Se pueden calcular durante un solo recorrido ascendente del árbol de análisis sintáctico
– Atributos heredados. Sirven para expresar la dependencia de una construcción en de un lenguaje en el contexto en el que aparece
• Si se considera un nodo de un símbolo gramatical de un árbol sintáctico como un registro para guardar información entonces un atributo se corresponde con el nombre de un campo
• Un atributo puede representar cualquier cosa (una cadena, un número, un tipo, una posición de memoria.)
• El proceso de calcular los valores de los atributos en los nodos se denomina anotar o decorar el árbol de análisis sintáctico
• El valor de un atributo se define mediante la regla semántica asociada a la regla de producción utilizada en ese nodo
– El valor de un atributo sintetizado se calcula a partir de los valores de los atributos de los hijos de ese nodo en el árbol de análisis sintáctico
– El valor de un atributo heredado se calcula a partir de los valores de los atributos de los hermanos y el padre de ese nodo
• En una definición dirigida por la sintaxis, se asume que los terminales sólo tienen atributos sintetizados (la definición no proporciona ninguna regla semántica para los terminales)
Los valores para los atributos de los terminales son proporcionados generalmente por el analizador léxico
REGLAS SEMÁNTICAS
• Las reglas semánticas establecen las dependencias entre los atributos que serán representadas mediante un grafo
• El grafo de dependencias proporciona el orden de evaluación de las reglas semánticas
• La evaluación de las reglas semánticas define los valores de los atributos de los nodos del árbol
• Una regla semántica puede tener también efectos colaterales (imprimir un valor, actualizar una variable global.)
Una gramática con atributos es una definición dirigida por la sintaxis en la que las funciones de las reglas semánticas no pueden tener efectos colaterales
fuentes:
http://www.di-mare.com/adolfo/cursos/2008-1/pp-TradSintax.pdf
definicion dirigina por la sintacsis

domingo, 30 de enero de 2011

MAPA MENTAL HETHICAL HACKING

Hethical hacking

Ethical Hacking
Contexto actual
Los atacantes externos protagonizan el mayor número de incidentes (70%), pero son los que menos impacto tiene, 30.000 registros comprometidos.
Los atacantes internos protagonizan solo el 48% pero por el contrario son los que más impacto han tenido.
Causas de los ataques.
El 48% de los incidentes son atribuidos a errores de gestión en la seguridad
El 38% de los incidentes tuvieron éxito como consecuencia de actividades de hacking
El 28% de los incidentes incorporan código malicioso
Otros datos significativos
Tres de cada cuatro incidentes no fueron descubiertos por las víctimas, la mayoría de los ataques no eran sofisticados
El 85% de los objetivos son oportunísimos y no dirigidos.
Principales riesgos
• Riesgos asociados a la infraestructura de frontera
• Ataques de negación de servicios.(tratar de hacer que un servicio no responda a los servicios requeridos)
• Riesgos asociados a la red interna
• Riesgos asociados a las aplicaciones
Exploits
Modelo de seguridad.
• Riesgos tecnológicos
• Soluciones tecnológicas
• Marco normativo
• Continuidad del negocio
• Control de calidad
• Administración de riesgos permanentes
Hacker.
Persona con especial habilidad con los ordenadores que puede resolver por si mismo los problemas que su funcionamiento le plantee.
El mundo de los sombreros
• White hat: Chicos buenos
• Grey hat: mercenarios
• Black hat: los chicos malos
Hacking ético
Objetivos
• Realizar un intento de intrusión controlada a los sistemas de información de una compañía, con el objetivo de detectar vulnerabilidades.
Ambientes de penetración.
• Caja blanca (con información del objetivo)
• Caja negra (sin información del objetivo)
• Caja Gris (Intermedio)
Tipos de pruebas
• Externas
• Internas
• Wireless
• Basados en tiempo y costo
Enfoque metodológico
1. Descovery.- identificación y adquisición de host
2. Enumeración.- Port scanning de campos torgets
3. Identificación de vulnerabilidades
4. Explotación.- de vulnerabilidades.
Ataques de seguridad
• Exploits
Programa o técnica que aprovecha una vulnerabilidad, método concreto de usar un error de algún programa
• Denial of service
• Análisis de trafico de Red(sniffing)
Estos ataques consisten en espiar los paquetes de datos que son destinados a otros dispositivos de red
• Robo de Servicios (Hijacking), estos ataques permiten tomar el control de coneccion entre dos computadoras.