Más de un mes después, DJAD vuelve a moverse un poco.
Tras más de un mes sin pasarnos por el blog y casi sin realizar novedades en cuanto al desarrollo de la aplicación, hoy volvemos para darle un empujoncito a esa versión 0.0.2 que tanto se nos está resistiendo.
Hoy solo escribimos para informaros de que ya está disponible una parte de esa versión, de momento sale a la luz el aspecto gráfico.
En cuanto a las funciones que incluye, tan solo hay una pequeña modificación y es que en el apartado de las funciones de C, se han incluido dos dimensiones más al código que creaba las tablas, disponiendo así de la opción de generar una tabla de 2, 3 y 4 dimensiones.
Otra de las novedades (sin funcionalidad por ahora) es que podréis ver que en el menú de selección de lenguaje se han introducido dos funciones, una que sincronizara el contenido de dos carpetas y otra, que comprimirá la carpeta seleccionada, siendo estas dos funciones exclusivas para Linux.
Por el momento nada más que decir, os contaremos más novedades próximamente aunque podréis ver alguna novedad más cuando entréis a la aplicación.
Como sucedió con la versión anterior, en el menú superior tenéis el enlace a la aplicación.
Incluiremos en la barra lateral un enlace a las versiones antiguas para que podáis ver la evolución del proyecto con el paso del tiempo.
Sin nada más que contaros, nos despedimos hasta la próxima.
Introducción
El objetivo de esta entrada no es otro que dar unas nociones básicas de ASM para tener una base con la que empezar a realizar reversing para los menos avezados.
¿Qué es?
Una entrada donde se condensen los principios básicos a conocer y tener en cuenta para introducirnos un poco en el mundo del reversing. Tómalo como una pequeña guía de referencia, nada más.
Para un buen aprendizaje de ASM consulta el libro “The art of assembly language”.
¿Qué no es?
No se trata de un tutorial sobre programación en ASM, ni se trata de explicar conceptos avanzados en la materia ni lenguaje.
Prerrequisitos
¿Qué es la ingeniería inversa?
Wikipedia– (El objetivo de la ingeniería inversa (reversing) es obtener información a partir de un producto accesible al público, con el fin de determinar de qué está hecho, qué lo hace funcionar y cómo fue fabricado.
El método se denomina así porque avanza en dirección opuesta a las tareas habituales de ingeniería, que consisten en utilizar datos técnicos para elaborar un producto determinado.
La ingeniería inversa es un método de resolución. Aplicar ingeniería inversa a algo supone profundizar en el estudio de su funcionamiento, hasta el punto de que podamos llegar a entender, modificar y mejorar dicho modo de funcionamiento.)
Adentrándonos en ASM
Obtener unas nociones básicas de ensamblador es fundamental para comenzar nuestra incursión en el mundo del reversing, hazte a la idea de que tendrás que manejarte al dedo con él.
Olvídate de las facilidades que podías gozar en python, C, C++, perl, etc. Esto es otra historia, aquí usaremos abreviaturas y números, y probablemente al comienzo todo te parezca bastante lioso e incluso frustrante.
Bits, Bytes, Words DWords
Registros
Similar a las variables. Un registro es una zona especial en la memoria de nuestro procesador donde podemos almacenar y consultar un valor único. Con la salvedad de que existen un número limitado de ellos y cada uno tiene un cometido específico.
En arquitecturas Intel (que será la elegida por nosotros) podemos distinguir un total de 8 registros:
Estos registros de 32 bits a su vez pueden ser divididos en registros de menor tamaño (16 bits, y 8 bits, distinguiendo la parte superior e inferior).
Por tanto tenemos:
Donde H hace referencia a Higher (Bits más significantes de la dirección) y L a Lower(Bits menos significantes de la dirección).
De esta forma ECX = 0x24101989, quedaría como CX = 0x2410, CH = 0x19 y CL = 0x89, y de paso ya sabéis cuándo hacerme un regalo (rubias por favor ;D).
Ahora mismo debemos de quedarnos con una idea ligeramente similar a esta:
Las banderas (Flags)
Se tratan de simples bits que nos indican el estado de algo. En arquitecturas de 32bits tenemos un total de 32 banderas, pero nosotros sólo vamos a utilizar tres de ellas:
Segmentos (Segments) y desplazamientos (Offsets)
El concepto de segmento podemos definirlo como la zona de memoria donde las instrucciones (CS), datos (DS) o pila (SS) son almacenadas.
A su vez cada segmento es dividido en 'offsets'. Así en aplicaciones de 32-bits estos offsets estos van numerados desde 00000000 a FFFFFFFF, o lo que es lo mismo 65536 zonas de memoria.
Por tanto podemos aceptar el concepto de offset como un valor indicativo de desplazamiento desde el punto de inicio del objeto hasta un punto dado, presumiblemente siempre dentro del mismo objeto.
Un ejemplo real de esto podemos ponerlo como un libro en el caso de un segmento, y una línea específica de una página como un offset.
La pila
Podemos ver el concepto de pila como una estructura de datos, en la que el modo de acceso a sus elementos es de tipo LIFO (Last Input First Output – Primeo en entrar, último en salir).
Distinguimos dos comandos para interactuar con ella:
Cuando llamamos a una función, todos sus parámetros son almacenados en sentido inverso en la pila antes de hacer de pasar el flujo de ejecución a la función.
NuestraFuncion(int param1, int param2, char param3, float param4)
Esto en ensamblador quedaría:
push param4
push param3
push param2
push param1
call NuestraFuncion
add esp, 10h
Como comentabamos vamos pasando los parámetros a nuestra pila para posteriormente realizar la llamada. Después de acabar la ejecución de nuestra función el puntero a pila sigue teniendo 16 bytes por delante de lo que tenía en un principio. Con la intención de restaurar el estado original de la misma, debemos añadir al puntero el valor 10h que corresponde a los 4 elementos que hemos introducido en la pila (4bytes por cada instrucción push ejecutada).
Operaciones lógicas
A lo largo de nuestro recorrido deberemos conocer cómo funcionan las operaciones lógicas a nivel de bits:
Instrucciones
Instrucción NOP – Es una abreviatura de “No operation” y su uso es de simple relleno.
Desplazando datos:
Operaciones lógicas y matemáticas
Saltos Estas instrucciones son utilizadas en caso de bucles y condiciones de comprobación. Realizando una comprobación del valor que almacena el registro, dirección o constante asociada a la instrucción.
cmp eax, ebx ; Compara EAX y EBX y establece el flag Zero si son iguales
cmp EAX, [404000] ; Compara EAX con el contenido de 404000
test eax, eax
Otras instrucciones relacionadas con los saltos
Buenas, tras la configuración debemos de añadir las lineas de código del dispositivo para que establezca la comunicación con el otro dispositivo.
Primero incluimos la libreria:
#include // para usar librerias xbee
Añadimos la configuración en setup:
//Configuramos el puerto xbee
xbee.begin(BAUDIOS);
Ahora preparamos los datos:
uint8_t datos[] = {direccionNodo, direccionRed, valorTem, valorHum, valorLum...};
Ahora realizamos la conexión:
// Preparamos el envio
Tx16Request tx16 = Tx16Request(0x1234, datos, sizeof(datos)); //modificar para cada nodo
TxStatusResponse txStatus = TxStatusResponse();
// enviamos
xbee.send(tx16);
Serial.println("");
// esperamos si hay respuesta
if (xbee.readPacket(5000)) {
// Si ha llegado el paquete
if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
xbee.getResponse().getZBTxStatusResponse(txStatus);
// comprobamos si todo es correcto
if (txStatus.getStatus() == SUCCESS) {
Serial.println("Enviado Correctamente...");
} else {
Serial.println("Error al enviar...Lo intentaremos otra vez");
}
}
} else {
Serial.println("Error no hay respuesta...Lo intentaremos otra vez");
}
Serial.println("");
La próxima será el controlador.
Para poder trabajar en una wiki sobre el engine de renderizado Ogre3D he tenido que aprender a utilizar la biblioteca en algún sitio. Estos conocimientos también son indispensables para el desarrollo de Sion Tower. Lo cierto es que debería poner un disclaimer como una casa advirtiendo mi escasa experiencia porque aún estoy aprendiendo. En cualquier
Después de terminar las Navidades retomaré el proyecto de TweetMoi, basado como comente en el último post, una aplicación basada en redes sociales, con la capacidad de poder postear en cada una de ellas, y a la vez, incluso que cada usuario pueda ver su TimeLine de redes sociales juntas.
Esta característica, se encuentra bastante avanzada y posteriormente me dispondré a crear una cuenta en Android Market, y subir una pequeña prueba de la aplicación y lanzarla para comprobar como es la acogida de la aplicación con el mundo Android.
Los siguientes puntos de implementación serán los siguientes:
Esperemos que esta nueva versión este disponible lo antes posible, y como he comentado anteriormente, pueda salir a formar parte del Android Market cuandos se encuentre terminada.
Hola a todos, mi nombre es Moisés Vázquez Sánchez, estudio en la Universidad Rey Juan Carlos de Madrid, y actualmente me encuentro desarrollando el proyecto de fin de carrera para la carrera de Ingeniería Superior Informática, este blog lo usaré como página de encuentra de la aplicación del proyecto, para ir comentando las partes desarrolladas y en lo que me encuentro desarrollando, y como una página de soporte para la aplicación que más adelante subiré al Androir Market.
Daros la bienvenida, y espero que os guste el proyecto.
These days I have spent some hours setting up the environment where I am going to develop the project. I worked with XAMPP in Ingenia, where I did my internship, but I had never set up the server nor any … Continue reading →
Buenas, primero feliz año a todos, ahora vamos a configurar los módulos xbee de los dispositivos, primero debemos de quitar el micro ATMEGA a la placa Arduino, haciendo palanca, suavemente y con paciencia. Luego, debemos de conectarlo con el ordenador y usando el software X-CTU, lo configuraremos, si usamos linux debemos de tener wine instalado, además debemos de ejecutar la siguiente linea de código: sudo ln -s /dev/ttyUSBX /home/directoriousuario/dosdevices/comY
Siendo X, número puerto USB que se ha conectado con el dispositivo, e Y un número aleatorio que debemos elegir.
Ahora usamos el dispositivo X-CTU, que lo podemos descargar con el enlace del nombre y según si es un nodo o un nexo ejecutaremos unas sentencias, que tras ejecutarlas debemos recibir un OK. Todo esto sera explicado detalladamente en un manual que confeccionaré y publicaré en los siguientes días.
Como ya casi todos sabréis en GeoRemindMe nos encanta trabajar en equipo y compartir experiencias; también muchos sabréis que Codeko patrocina este proyecto particularmente patrocinando los Hackathones.
Hasta ahora hemos estado demasiado ocupados intentando organizar otros asuntos, pero queremos empezar el año anunciando 2 eventos en los que nos reuniremos físicamente en Granada (y virtualmente todos aquellos que lo deseen) para pegarle otro achuchón al trabajo ya realizado.
Autor: andreweland (vía Flickr)
Para hacer más didáctica, divertida y productiva la experiencia utilizaremos (y explicaremos) una metodología basada en Scrum (con algunos matices de otra metodología llamada Kanban). Y dependiendo del número de personas que seamos haremos grupos de trabajo enfocados en las diferentes ramas del proyecto (Aplicación Web | Web promocional | Aplicación Móvil).
Cualquier persona de cualquier rama puede participar en el Hackaton; no solo programadores, sino también diseñadores, traductores, personas con conocimientos de marketing, … ¡¡o personas sin ningún conocimiento en particular pero que quieran aprender!!.
El primer encuentro será el próximo fin de semana (del 13 al 15 de Enero) -> Formulario de inscripción.
——————————–
Agenda:
Viernes 13: 16:00-20:00 En la ETSIIT, Aula por definir.
Sabado 14 y Domingo 15, de 11:00 a 20:00: C\Elena 3,3D
——————————–
Y el segundo encuentro será en el Hackaton de proyectos de software libre de la UGR del 4 al 7 de Marzo.
Aquellos interesados podéis inscribiros en el siguiente formulario de inscripción (se dan créditos de libre configuración a los alumnos de la UGR).
¡En vemos en breve!