miércoles, 2 de febrero de 2011

JavaCC

JavaCC (Java Compiler Compiler - Metacompilador en Java) es el principal metacompilador en JavaCC, tanto por sus posibilidades, como por su ámbito de difusión. Se trata de una herramienta que facilita la construcción de analizadores léxicos y sintácticos por el método de las funciones recursivas, aunque permite una notación relajada muy parecida a la BNF. De esta manera, los analizadores generados utilizan la técnica descendente a la hora de obtener el árbol sintáctico.
 Características
  • Genera analizadores descendentes, permitiendo el uso de gramáticas de propósito general y la la utilización de atributos tanto sintetizados como  heredados durante la construcción del árbol sintáctico.
  • Las especificaciones léxicas y sintácticas se ubican en un solo archivo. De esta  manera la gramática puede ser leída y mantenida más fácilmente. No obstante, cuando se introducen acciones semánticas, recomendamos el uso de ciertos  comentarios para mejorar la legibilidad.
  • Admite el uso de estados léxicos y la capacidad de agregar acciones léxicas incluyendo un bloque de código Java tras el identificador de un token.
  • Los tokens especiales son ignorados por el analizador generado, pero están
    disponibles para poder ser procesados por el desarrollador.
  • La especificación léxica puede definir tokens de manera tal que no se  diferencien las mayúsculas de las minúsculas bien a nivel global, bien en un patrón concreto.
Estructura de un programa en JavaCC 
options {
Área de opciones
}
PARSER_BEGIN(NombreClase)
Unidad de compilación Java con la clase de nombre Nombreclase
PARSER_END(NombreClase)
Área de tokens
Área de funciones BNF

El área de opciones permite especificar algunas directrices que ayuden a JavaCC a generar analizadores léxico-sintácticos bien más eficientes, bien más adaptados a las necesidades concretas del desarrollador. En el ejemplo se ha indicado que, por defecto, la gramática indicada es de tipo LL(1), excepto si, en algún punto, se
indica otra cosa.
Las cláusulas PARSER_BEGIN y PARSER_END sirven para indicarle a JavaCC el nombre de nuestra clase principal, así como para englobar tanto a ésta como a cualesquiera otras que se quieran incluir de apoyo, como pueda ser p.ej. un gestor de tablas de símbolos. En el ejemplo puede observarse que la clase principal constituye el analizador sintáctico en sí ya que la función main() crea un objeto de tipo Ejemplo a la vez que le pasa como parámetro en el constructor la fuente de la que se desea consumir la entrada: el teclado (System.in).
La clase creada por JavaCC incorporará una función por cada no terminal del área de reglas. Cada función se encargará de consumir la parte de la entrada que subyace debajo de su no terminal asociado en el árbol sintáctico de reconocimiento. Por tanto, asumiendo que el axioma inicial es listaExpr, una llamada de la forma miParser.listaExpr() consumirá toda la entrada, si ésta es aceptable.
Las siguientes dos áreas pueden mezclarse, aunque lo más usual suele ser indicar primero los tok ens y finalmente las reglas en BNF, especialmente por motivos de claridad en el código.
En el ejemplo se han indicado tokens de dos tipos. Los tokens agrupados bajo la cláusula SKIP son aquellos que serán consumidos sin ser pasados al analizador sintáctico; en nuestro caso son: el espacio, el tabulador, el retorno de carro  (CR-Carry Return) y la alimentación de línea (LF-Line Feed).
Los tokens bajo la cláusula TOKEN constituyen los tokens normales, aunque el desarrollador también puede indicar este tipo de tokens en las propias reglas BNF, como ocurre con los patrones "(", ")", ";", etc. La declaración de cada token se agrupa entre paréntesis angulares y está formada por el nombre del token seguido por el patrón asociado y separado de éste por dos puntos. Los patrones lexicográficos se describen de forma parecida a PCLex. El ejemplo ilustra el reconocimiento de un identificador formado sólo por letras (ya sean mayúsculas o minúsculas merced al modificador [IGNORE_CASE] de la cláusula TOKEN) y de un número entero.
Opciones:
Las opciones más importantes son:
LOOKAHEAD
CHOICE_AMBIGUITY_CHECK
FORCE_LA_CHECK
STATIC
DEBUG_PARSER
BUILD_PARSER
IGNORE_CASE
COMMON_TOKEN_ACTION
UNICODE_INPUT
 

Tokens:
JavaCC diferencia cuatro tipos de tokens o terminales, en función de lo que debe hacer con cada lexema asociado a ellos:
  • SKIP: ignora el lexema.
  • MORE: busca el siguiente el siguiente lexema pero concatenándolo al ya     recuperado.
  • TOKEN: obtiene un lexema y crea un objeto de tipo Token que devuelve al  analizador sintáctico (o a quien lo haya invocado). Esta devolución se produce automáticamente sin que el desarrollador deba especificar ninguna sentencia return en ninguna acción léxica.
  • SPECIAL_TOKEN: igual que SKIP pero almacena los lexemas de tal manera que puedan ser recuperados en caso necesario. Puede ser útil cuando se    construyen traductores fuente-fuente de manera que se quieren conservar los   comentarios a pesar de que no influyen en el proceso de traducción.
Anexos:
Fig1.Proceso de metacompilación con JavaCC. Partiendo de un solo fichero.
Fig2. Archivos Generados por JavaCC
Enlaces:
Para descargar un tutorial completo de jFlex, Cup, JavaCC

Noticia 2 de Febrero del 2011

Twitter y Facebook: otra vez usados para propagar códigos maliciosos

Una noticia no muy buena para todos nosotros los que siempre estamos conectados al facebook o twiitter, pues en este ultimo mes y en los últimos días se estos sitios han sido utilizados para el envio de malware. Esto se realizaba mediante el envío de mensajes masivos por medio de Twitter, con textos breves y atractivos y un enlace con un acortador de URL, se invita al usuario a hacer clic.
Cuando esto ocurre, el usuario es direccionado a diversos sitios web donde se lo alerta sobre una supuesta infección en sus equipos y se ofrece la descarga de la aplicación llamada Security Shield, que no es otra cosa que un rogue.
Así que chicos a tener cuidado...


Fuente:
Fuente Noticias, Noticias (Mie, 2 de Febrero de 2011)
Enlace:


ANTL



ANTLR es una herramienta que proporciona un marco de trabajo para la construcción de reconocedores, intérpretes, compiladores y traductores de lenguajes a partir de gramáticas enriquecidas con acciones. En resumen proporciona todo lo necesario para el desarrollo de este tipo de sistemas, entre los más importantes: 
  • Construcción de analizadores léxicos.
  • Construcción de analizadores sintácticos.
  • Mecanismos de construcción y recorrido de árboles de sintaxis abstracta (AST).
  • Mecanismos de tratamiento de plantillas.
  • Mecanismos de detección y recuperación de errores. 

Ventajas:

Como ventajas que diferencian a ANTLR de otras herramientas similares podemos citar la posibilidad de generar el código de salida en diferentes lenguajes como Java, C, C++, C# o Python, y el hecho de disponer de un entorno de desarrollo propio llamado ANTLRWorks que nos permitirá construir de una forma bastante amigable las gramáticas de entrada a la herramienta, proporcionando representaciones gráficas de las expresiones y árboles generados, e incluyendo un intérprete y depurador propio.

Ejemplos: 

Numero 1

Definamos una gramática para el lenguaje de los paréntesis.
 

grammar prueba;
principal
: ’(’ principal ’)’|;


grammar prueba;
principal
: SI principal1 (CONTRA principal)?|ALGO;
principal1
: SI principal1|ALGO;
SI : ’sib’;
CONTRA : ’en_otro_caso’;
ALGO : ’algo’;
WS : (’\n’|’\t’|’\r’|’ ’)+{skip();}; 

Numero2

grammar suma;
start : expresion;
expresion
: NUMERO OPERADOR expresion| NUMERO;
NUMERO : ’0’..’9’+;
OPERADOR: ’+’;
ESPACIOS: (’\n’|’\r’|’\t’){skip();};

Ejercicios:

  • Comprobar con varios inputs que la gramática acepta lo que se piensa.
  • Añadir a la gramática las expresiones con el signo menos.
  • Cuando se añade la multiplicación, ¿se debe de hacer como con la suma o la resta?
  • Encontrar una gramatica para el palíndromo con tres letras a,b,c.
  • Encontrar una gramática que genere todas las palabras formadas por letras a y b cuyos prefijos tengan al menos más aes que bes.
  • Encontrar una gramática que acepte solo los numeros binarios con el mismo número de ceros que unos. 

Anexo:

La imagen nos da una visión global de un sistema. Describe brevemente el proceso general que se seguirá durante la compilación, ensamblado y ejecución del script, y cada uno de los módulos que van a intervenir en el proceso.
Si deseamos agregar antlr indevidualmente a un proyecto de Eclipse o de Netbeans podemos seguir ir al siguiente link Ir en el que se nos explica paso a paso el procedimiento para realizar esto. El sitio esta en Ingles pero es básico, creo lo comprenderán, sino pueden hacer uso de un traductor de la web o sino escribirme cualquier inquietud que dichosa los guiare.
Enlaces:
Web principal de ANTLR
Web principal de ANTLRWorks
Wiki de documentación (Docs, Tutoriales, Ejemplos...)

lunes, 31 de enero de 2011

Definiciones Dirigidas por Sintaxis


Definiciones Dirigidas por Sintaxis

Definición
Es una generalización de una gramática independiente de contexto en la cual cada símbolo tiene asociado un conjunto de atributos.
Atributos
En general los atributos de un nodo reciben valor mediante la evaluación de las reglas semánticas asociadas a la producción usada en ese nodo propietario del atributo.
Hay dos clases de atributos posibles:
  • Atributos Sintetizados: Los valores de los atributos sintetizados se calculan a partir de los valores de atributos de sus nodos hijos en el árbol de análisis sintáctico.
  • Atributos Heredados: Los valores de los atributos heredados se calculan a partir de los valores de atributos de su nodo padre o sus nodos hermanos.
Reglas semánticas
Las reglas semánticas establecen dependencias entre los atributos de los diferentes símbolos.
Esas dependencias se reflejan en un grafo con el fin de establecer un orden de evaluación de las reglas.
La evaluación de las reglas asigna valor a los atributos.
Un árbol de análisis sintáctico que contiene también los atributos y su valores se llama un árbol anotado o decorado.
Ejemplos:


Atributos Sintetizados
  • Los atributos sintetizados se utilizan ampliamente.
  • Si una definición dirigida por sintaxis tiene ´únicamente atributos sintetizados se dice que es S-atribuida.
  • El árbol de análisis sintáctico de una gramática S-atribuida puede decorarse mediante un recorrido en postorden.
Atributos Heredados
  • Sirven para expresar la dependencia que hay entre una construcción del lenguaje de programación y su contexto.
  • Siempre es posible reescribir una definición dirigida por sintaxis para que sea S-atribuida.
  • En ocasiones es más natural utilizar atributos heredados.
Fuente:
Traducción dirigida por la sintaxis. Javier Vélez Reyes. 
Disponible en URL: 
Consulta realizada: 31 de Enero, 2011.

jueves, 27 de enero de 2011

Noticia 26 de Enero del 2011

Primera Provincia Wi-Fi
del Ecuador

Galápagos será la primera provincia del Ecuador que cuente con el servicio de internet en todo su territorio. El proyecto ya esta en sus etapas finales y el objetivo del mismo es mejorar la comunicación entre los diferentes centros de apoyo que se encuentran en diferentes Islas. Además su interés tiene que ver en materia educativa pues incluye el impulso al uso de herramientas de Software libre, y desarrollo para que las escuelas y colegios se comuniquen.
Esperemos que este proyecto tenga los resultados esperados para que en un futuro no muy lejano todo el Ecuador será Zona Wi-Fi. Esto sería grandioso tanto para la investigación así como también para mejorar la comunicación entre los diferentes organismos. 

Fuente:
 
 

martes, 25 de enero de 2011

SISTEMA DE GESTIÓN DOCUMENTAL QUIPUX


¿QUE ES QUIPUX? Es una organización.
• Organización del archivo digital
• Organización del archivo fisco
• Codificación documental
• Administración interna de usuarios
• Entrega de comprobantes a ciudadanos
• Uso de código
SEGURIDAD
• Usuarios reales
• Administración institucional
• Firma electrónica
• Accesibilidad
• Envió y recepción de archivos digitales
ARQUITECTURA FIRMA DIGITAL
• La firma se realiza a través de la utilización de applet
• Applet revisa revocación, si el certificado fue emitido por el banco central, y el timestamping
• Se obtiene el documento firmado y se lo envía al Quipus
Conferencista:
Fernando Hidalgo

Análisis Digital Forense


CRIMEN DIGITAL
· Redes y computadoras ubicuos
· Medio o fin de crímenes contra personas o sociedad
· Crímenes de alta tecnología:
  • Fraudes informáticos
  • Daños informáticos
  • Falsificación informática
  • Intrusión a sistemas informáticos
  • Violación a la integridad
  •  Atentado contra la seguridad (C.I.A.)

INTERNET
· Tecnología desestabilizadora
  •   Medios de comunicación
  •   Universidades
  •   Políticos
  •   Comercio
· Nuevos patrones de comportamiento social, económico, cultural
· Nuevos paradigmas de conductas criminales: e-mail, web, redes sociales, e-comercio
· Nuevos mecanismos de regulación: N etiqueta, Legislación
BRECHA DIGITAL
· Infraestructura
  • Telecomunicaciones
  • PKI

· Conocimiento
  • Técnicos
  • Ejecutivo
  • Políticos
  • Judiciales

· Normativa
MARCO JURIDICO
· Constitución (art. 66, 19,21)
· Ley de comercio electrónico, firmas digitales y mensajes de datos
· Ley de transparencia y acceso a la información publica
· Ley de protección de la propiedad intelectual
PRIVACIDAD
· Registros personales
  • Obtenidos limpiamente, legalmente
  • Uso para propósito y por tiempo razonable
· LOTAIP
REGULACION EN INTERNET
· Nido del cucu (1986)
· Gusano de Internet (Nov. 1988)
· Kevin Mitnick Shimomura
· Malware
· Spam
· Fraudes
· Pedofilia
· Wikeleaks
COMPUTACION FORENSE
· Aplicación de técnicas de ciencia forense a material basado en computador
  • Identificación
  • Preservación
  • Extracción
  • Documentación
  • Interpretación
  • Presentación de evidencias digitales de manera que sea aceptable en procedimientos legales.

PROCEDIMIENTOS
· Investigación en la escena del crimen
· Examen de evidencias digitales
· Uso de tecnología en investigación
· Investigación de crímenes digitales
· Creación de unidades de evidencias digitales forenses
· Presentación de evidencias digitales
FASES
· Evaluar la situación
· Adquirir los datos
· Analizar los datos
EVIDENCIAS
· Relevante
· Confiable
· Permisible legalmente
CADENAS DE CUSTODIA
· Quien: testigo de esta acción
· Que: descripción completa
· Como: descubierta, capturado
· Dónde: descubierta, analizada
· Cuando: fecha
INFRACCIONES EN ECUADOR
· Protección de datos
· Inviolabilidad de correspondencia
· Fraudes:
  • Banca
  • IESS
  • Factura electrónica
  • Comercio exterior
  • Migración
  • Energía

EXTORSION DIGITAL
· Llamadas electrónicas
· Computación forense criolla
  • Rastreo de dirección IP
  • Incautación
  • Preservación
  • Examen
  • Conclusiones
PARTIDAS DIGITALES
· Crimen: Marzo 2002
· Investigación: Agosto 2008
  • Servidor en escritorio de opositor
  • CSI: Servidor reformateado
  • Evidencias

 Fechas
   Creación y aprobación 2001
   Últimas modificaciones 2002 
Cuentas de usuario
PROPIEDAD INTELECTUAL
· Robo de diseño 2005
· Documentación digital
  • Pesimamente gestionados
  • Editados
  • Copiados a otros dispositivos
  • Fechas inconsistentes

E-VOTE
· Transparencia y acceso a información
· Análisis de vulnerabilidad
· Crónica de un fracaso anunciado: 22:00 “NUAY” Sistema
· Análisis forense
  • Servidores a cargo de “sospechosos”
  • Sistemas en producción

· Transparencia y acceso a información
· Sistema de información CNE
TELECOM
· Foro Internacional de Telecomunicaciones
  • Cybercrimen
  • Área Andina
· Fraudes a las empresas telecom
  • Carrera armamentista
  • Carácter regional, global
PERITOS INFORMATICOS
· Definición formal
· Reglamento, funciones
  • Acreditación
  • Formación
  • De parte
Experto en TIC
De oficio
Criminalística, psicología
Procedimientos legales 
Conferencista
Dr. Enrique Mafla