Ir al contenido principal

Entradas

Mostrando entradas de 2013

Obteniendo la localización del teléfono (GPS) con C# en Windows Phone/ Windows 8 App

Con el fin de ahorrarme unas cuantas respuestas a correos electrónicos, voy a plasmar aquí un pedazo de código fuente en C# que sirve para obtener las coordenadas, posición o localización (como más os guste) de un dispositivo con Windows Phone 8 o aplicación de la tienda de Windows 8. Obviamente es un código a modo de prueba de concepto, vosotros deberéis adaptarlo adecuadamente según la necesidad y por supuesto realizar las comprobaciones de errores pertinentes, más allá del Try/Catch de rigor. using System; using Windows.Devices.Geolocation; namespace GPSTesting { public delegate void GeoCallback( double Latitud, double Longitud) // Definición de la clase ... blah, blah, blah ... public async void GPSCoordenadas(GeoCallback callback) {     try     {         Geolocator Localizador = new Geolocator();         Localizador.DesiredAccuracy = PositionAccuracy.Default;         Geoposition Posicion = await Localizador.GetGeopositionAsync();        callback(Po

Emulador de Windows Phone 8

Si tu intención es desarrollar aplicaciones para Windows Phone 8, una de las cosas que inevitablemente deberás conocer son los requisitos hardware/software que necesitarás.   A nivel de software, sin duda una de las soluciones más lógicas sería utilizar el SDK correspondiente, el Windows Phone SDK 8.0 y como no podía ser menos, el sistema deberá ser un Windows 8 Pro o superior.   Ahora bien, en la parte del hardware la cosa se te puede complicar un poco, debido a los requerimientos del sistema necesarios para poder ejecutar el "Emulador de Windowsl Phone 8". Cuando digo "requerimientos necesarios", en realidad lo que quiero decir es "Requerimientos OBLIGATORIOS".   A nivel de BIOS/CPU, tu equipo deberá soportar las siguientes características:   Virtualización Hardware (Hardware-assisted Virtualization) Traducción de direcciones de segundo nivel (SLAT - Second Level Address Translation) Prevención de ejecución de datos por Hardwar

Policías y Ladrones - Crónicas de la 2

Aquí os dejo el vídeo de un documental emitido en la 2, en el programa Crónicas. Trata sobre la ciberdelincuencia o ciberdelitos, desde el punto de vista del Grupo de Delitos Telemáticos de la Guardia Civil, la Brigada de Investigación Tecnológica de la Policía y Profesionales del mundo de la Seguridad Informática .   Sin duda un documental muy interesante para CONCIENCIAR a todos aquellos escépticos o "ignorantes" -con todos los respetos del mundo-, que piensan que la seguridad informática no es para ellos, porque ¿Quién va a querer algo de mi ordenador? ¡Si yo no tengo nada que esconder ni que merezca la pena! La respuesta es muy sencilla ¿Quién querría entrar en tu casa y para qué? ¿Quién querría robar tu vehículo y para qué? ¿Quién querría secuestrarte y para qué? Si total, no eres un personaje público, famoso, millonario, etc.   Tened mucho cuidado con vuestros dispositivos electrónicos. Si estáis conectados a la red, ya corréis el riesgo y aunque "so

Ingeniería Inversa de Firmware en un PIC 16Fxxx de Microchip

Como parece que no tengo mejores cosas que hacer, no se me ocurre otra forma mejor de pasar una tarde de Sábado que hacer un poco de Ingeniería Inversa a un microcontrolador PIC de la casa Microchip.   En esta ocasión se trata de un microcontrolador de la familia 16Fxxx (tipo 16F876, 16F84, etc.) cuyos opcodes tienen un tamaño de 14 bits. El mismo sistema será válido para otros microcontroladores de otras familias o incluso fabricantes, incluso aún cambiando la arquitectura del microcontrolador, la base esencial del análisis será similar en multitud de casos.   Siempre que se me plantea una situación similar, me gusta entender los entresijos de lo que tengo entre manos y, en la medida de lo posible intento empezar "a mano" o "a pelo" en el proceso de obtención de los Nemotécnicos ó, en definitiva las instrucciones en lenguaje ensamblador.   A continuación os muestro un pequeño pedacito de un firmware que he estado analizando, se trata del comienzo del m

La interrupción del minuto

Desde hace muchos años mi cabeza es una nube de pensamientos, ideas e intenciones como consecuencia de la inmensa cantidad de temas que despiertan mi interés, más claro está, las obligaciones contractuales que todos tenemos con nuestros trabajos y/o familias.   Esta situación, hace que mi tiempo libre de obligaciones, deje de ser tiempo libre. Conclusión: "Todo mi tiempo está ocupado" Para disponer de tiempo libre, es decir, ese tiempo que dedicamos a NO HACER NADA, es preciso organizarse, de lo contrario, no conseguirás ninguno de tus objetivos, o al menos te resultará más costoso hacerlo. La única manera de conseguir alcanzar con éxito todas aquellas tareas que me propongo, ha sido, es y probablemente será la organización. Sí, ya lo sé, esto que acabo de decir es obvio, pero cuidado, organizarse cuando pretendemos hacer infinidad de cosas, no es labor sencilla y, es preciso recurrir a algún método eficaz para alcanzar nuestros objetivos de forma satisfactoria y

Google Glass - Unas "gafas" futuristas que ya están aquí.

A mi personalmente la idea me parece genial. Un dispositivo práctico, cómodo y desde luego parece bastante prometedor. Se puede acoplar fácilmente a tus propias gafas, lo cual, desde un punto de vista estético, también es importante. Quisiera tener el gusto de probarlas, pero de momento no han caido en mis manos. Para los que no lo conozcáis, Google Glass permite proyectar (gracias a un micro-proyector), imágenes sobre la escena real que visualizamos. Interesante para mostrar en tiempo real, información sobre el tiempo, noticias, correo, mensajes, GPS, incluso me atrevo a añadir las constantes vitales, con los sensores adicionales pertinentes (esto ya es apreciación mía) etc. Aquí tenéis la web de Google Glass donde podéis ver más imágenes y un video: http://www.google.com/glass/start/ Pero bueno, independientemente de todo esto, a mi personalmente la parte que más me interesa, como de costumbre es responder a la pregunta ¿Cómo?, puesto que el ¿Qué? y el ¿Por qué? so

WinDbg - Setting breakpoint on Entry Point

Hay varias formas de localizar el punto de entrada (EP) de un programa, y aquí expongo un par de ellas. La primera es la más sencilla y rápida, la segunda un poco más compleja pero que abre el abanico de opciones. WinDbg como sabemos dispone de varios pseudo-registros predefinidos que nos facilitan bastante las sesiones de depuración. Uno de estos registros es $exentry. Para colocar un breakpoint en el punto de entrada del ejecutable basta con escribir este comando: 0:000> bu @$exentry El segundo método es un poco más enrevesado pero igualmente válido. Consiste en localizar manualmente el entrypoint mediante el uso de las cabeceras PE del módulo. Para ello, lo primero que hacemos es buscar la ImageBase del ejecutable. Esto lo podemos conseguir con el comando LM que nos dará el ImageBase y el ImageSize, pero también podemos localizarlo con el comando !PEB que nos muestra información sobre el proceso (PEB - Process Environment Block) Una vez tenemos la ImageBase tenemos que

Force ASLR - Trasladando forzosamente la ImageBase

Si ASLR (Address Space Layout Randomization) se introdujo como un nuevo sistema de mitigación de ataques al sistema operativo Windows Vista (sí también a Linux y otros), con la aparición de Windows 7 y Windows Server 2008 R2 Microsoft ha querido fortificar aún más esta técnica mediante una actualización que incorpora lo que han denominado como "Force ASLR" algo así como ASLR Forzoso u obligatorio. Con ASLR, el sistema operativo lo que persigue es aleatorizar o trasladar el espacio de direcciones de las librerías y aplicaciones con cada reinicio, de tal forma, que no sea predecible la ubicación de su dirección base. Como consecuencia, averiguar por ejemplo, la dirección de una determinada API del sistema o porción de código de una aplicación ya no es tan trivial (que no imposible). Esta característica está activada por defecto en la mayor parte de las librerías del sistema operativo y, en bastantes programas siempre y cuando el desarrollador active el flag /DYNAMICBASE en

WinDbg Breakpoint on key pressed

Imaginad por un momento que os surge la necesidad de detener la ejecución de un programa cuando se pulsa una determinada tecla o combinación de estas, en fin, algo normal que a cualquier persona se le puede pasar por la imaginación, ¿o no?. Bromas aparte, para conseguirlo podemos utilizar infinidad de técnicas y en esta ocasión voy a comentaros la última que he empleado yo en uno de los trabajos que estoy realizando actualmente. Esta técnica consiste en colocar un punto de ruptura en la llamada a la API TranslateAccelerator. Ahora bien, debemos tener en cuenta que si colocamos un breakpoint de ejecución sin más, el debugger estará constantemente saltando y no podremos conseguir nuestro objetivo o, cuando menos, será muy desesperante. Para evitar tal situación, lo que tenemos que hacer es utilizar un breakpoint condicional para indicarle al debugger que se detenga solamente cuando se cumple una determinada condición o condiciones y por consiguiente que continúe con la ejecución nor

WinDbg Symbols Path

Si estás leyendo esta entrada del blog supongo que ya sabes perfectamente la importancia que tienen los símbolos (Públicos y Privados) a la hora de depurar software. En esta ocasión me voy a centrar en las formas que tenemos para indicarle al depurador de Microsoft donde se encuentran los símbolos. En el caso de WinDbg lo podemos especificar de diversas maneras: Desde línea de comandos con el comando -y Utilizando la variable de entorno _ NT_SYMBOL_PATH ó _NT_ALT_SYMBOL_PATH Desde el menú File\Symbol File Path Utilizando el comando .sympath Los símbolos pueden residir en una unidad de almacenamiento local (Ej. el disco duro) o bien proceder de una fuente o servidor remoto. En el la caso de una unidad local, indicaremos la ruta completa a los mismos, ej.; .sympath d:\desarrollo\windbg\symbols Cuando tengamos que cargar los símbolos desde un servidor remoto lo indicaremos así: .sympath srv*http://msdl.microsoft.com/download/symbols También podemos indicar ambos caso

Defensa crea el Mando Conjunto de Ciberdefensa

¡ Por fín, ya era hora majos! Pero bueno, más vale tarde que nunca. El ministro de Defensa, Pedro Morenés, ha creado ya el Mando Conjunto de Ciberdefensa, con el que las Fuerzas Armadas se protegerán frente a ciberataques y contribuirán a la ciberseguridad del país, para lo que podrán desarrollar una "respuesta oportuna, legítima y proporcionada" ante "amenazas o agresiones". Pulsa aquí para leer la noticia completa

Inicializar un std::vector en C++

Lo primero que tenemos que hacer es crear la plantilla que se va a utilizar para inicializar los vectores: template < typename T > class init_vector { public : init_vector < T >& operator<< ( const T & value ) {     internal_vector.push_back( value );     return * this ; } operator std:: vector < T >() const {     return internal_vector; } private : std:: vector < T > internal_vector; }; A la hora de inicializar un vector podemos utilizar esta plantilla de manera muy sencilla y elegante: std:: vector < int > v = init_vector < int >() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9; std:: vector < string > empresas = init_vector < string >() << "Google" << "Microsoft" << "Apple" << "Nokia" ;

Bucles for basados en rango, Inferencia de tipo y Referencia

#include <vector> int main() {     std::vector < string > meses;     meses.push_back( "Enero" );     meses.push_back( "Febrero" );     meses.push_back( "Marzo" );     meses.push_back( "Abril" );     meses.push_back( "Mayo" );     meses.push_back( "Junio" );     meses.push_back( "Julio" );     meses.push_back( "Agosto" );     meses.push_back( "Septiembre" );     meses.push_back( "Octubre" );     meses.push_back( "Noviembre" );     meses.push_back( "Diciembre" );     // Mostrar en consola los meses utilizando un bucle for basado en rango.         for ( string m: meses) {        cout << m << endl;         //m = "cadena_no_se_puede_modificar";    }         // Con inferencia de tipo.    for ( const auto m: meses) {        cout << m << endl;         //m = "cadena_no_se_puede_