Ingeniería inversa con JavaScript
He estado haciendo una gran cantidad de ingeniería inversa y muy a menudo surge algo común: realmente me gustaría tener una herramienta para esto porque necesito mirar esta API en particular, o ver qué sucedería si hago esto vs eso , etc.
¿Es realista?
- ¿Cuáles son los mejores campos en MS para la ingeniería mecánica?
- ¿A quién se refiere Steve Yegge como el ingeniero de semillas único 'responsable por sí solo de la increíble calidad de la cultura de ingeniería de Google'?
- ¿Cuáles son los temas para hacer un mini proyecto en ingeniería mecánica con un bajo presupuesto?
- ¿Cuál es la diferencia entre un ingeniero graduado de IIT y un ingeniero graduado de la universidad local? ¿No son los programas de ingeniería iguales en todas partes en la India?
- ¿Qué comprende la ingeniería aeroespacial y tiene un buen mercado en Kenia?
Es bastante trabajo construir una herramienta desde cero, y las herramientas existentes no son realmente adecuadas para el tipo de caso de uso de inversión iterativa. También me gustaría tener un ciclo de retroalimentación realmente corto al hacer esto, porque como inversión, mi comprensión del problema tiende a evolucionar a medida que avanzo, lo que significa que necesito retroceder para adaptar la herramienta. Si luego tengo un ciclo de retroalimentación largo, entonces voy a perder mucho tiempo, y al final podría ser mejor hacer las cosas a mano y pasar por el minucioso proceso utilizando herramientas convencionales.
También me gustaría tener solo un juego de herramientas, de modo que, independientemente de la plataforma en la que me encuentre, solo hay un juego de herramientas que necesito aprender una vez. Por supuesto, hay partes específicas de la plataforma involucradas, pero al menos no tengo que volver a aprender lo básico cada vez.
oSpy
En 2004 estaba haciendo una gran cantidad de ingeniería inversa de protocolos. En ese momento, me estaba centrando en Windows Live Messenger, ya que estaba usando Linux y quería una paridad de características razonable con mis amigos que usaban la versión de Windows. Más tarde, también obtuve un Windows Phone, y resultó que solo los modelos más antiguos eran compatibles con el software de sincronización disponible para usuarios de Linux. Mientras hacía la inversión de ActiveSync, terminé creando una herramienta llamada oSpy que se ve así:
Es algo así como Wireshark, pero funciona en el nivel API, lo que significa que puede ver las comunicaciones encriptadas y casi cualquier cosa que desee. Esto se escribió en C #, e inyecté código en el proceso de destino para instrumentarlo, y ese código se escribió en C. Esto fue muy poderoso ya que podía rastrear cualquier función que quisiera.
Con gran poder vino una gran complejidad
Desarrollar el código inyectado fue un proceso largo y tedioso. Para cada función rastreada, tendría que escribir un poco de repetitivo. Luego tuvo que compilarlo, reiniciar la aplicación de destino en caso de que la dejó en un estado inestable la última vez, implementar su carga útil, inyectarla y finalmente esperar a que la aplicación de destino llame a esa API. Bueno, el ciclo de retroalimentación fue bastante horrible. oSpy ayudó enormemente para los desafíos que enfrentaba en ese momento, pero fue algo muy lento para evolucionar, y no fue muy portátil.
Intentando otra vez
Más tarde, tuve nuevos proyectos de inversión y me encontré agregando hacks temporales a la base de código de oSpy. Tan poderoso como era el rastreo de funciones de bajo nivel, no podía dejar que oSpy se convirtiera en el fregadero de la cocina, y no era realmente posible seguir escribiendo esos bits en C. Esto me llevó a crear oSpy2, donde intenté saque C de la ecuación permitiéndole definir funciones para rastrear declarativamente a través de un archivo de configuración:
Artículo completo: Ingeniería inversa con JavaScript
Y las fuentes adicionales:
Resumen Tradicionalmente, se llevaron a cabo una gran cantidad de aplicaciones sin la intervención de redes globales como Internet. Pero ahora, a medida que la era de la Web 2.0 está emergiendo a un ritmo cada vez más rápido hoy y llegó para quedarse, estas aplicaciones se están volviendo cada vez más dependientes de Internet como plataforma base. A medida que el dominio de la aplicación aumenta en todo el mundo, la variedad en el tipo de contenido web también aumenta y supera el mero HTML tradicional. El tipo de mejoras generadas en las páginas HTML, tal como las ve un cliente, son introducidas por tecnologías como JavaScript, Flash y Silverlight. Dado que estas aplicaciones están creciendo ampliamente y se están volviendo cruciales, aquí la intención es arrojar luz sobre los métodos para buscar lagunas de seguridad como XSS (Cross-Site Scripting) en JavaScript, específicas para las implementaciones de la Web 2.0 que consumen información de fuentes no confiables. Los métodos descritos se refieren tanto al análisis estático como al dinámico. Las herramientas que se han empleado en este documento están aquí en un archivo PDF: http://www.net-security.org/dl/a…
Ingeniería inversa Una función de cifrado para eliminar direcciones de correo electrónico