
Fermion, un envoltorio de electron para Frida y Monaco.
Fermion es una aplicación de electron que envuelve frida-node y monaco-editor. Ofrece un entorno totalmente integrado para prototipar, probar y refinar scripts de Frida a través de una única interfaz. Con la integración de Monaco vienen todas las funciones que esperarías de Visual Studio Code: Linting, IntelliSense, atajos de teclado, etc. Además, Fermion tiene una definición de lenguaje TypeScript para la API de Frida, por lo que es fácil escribir scripts de Frida.
Qué hay en un nombre: Un fermión puede ser una partícula elemental, como el electrón, o puede ser una partícula compuesta, como el protón. Los fermiones incluyen todos los quarks y leptones, así como todas las partículas compuestas formadas por un número impar de estos, como todos los bariones y muchos átomos y núcleos.
Descarga el repositorio y navega a la carpeta Fermion en la terminal. Una vez allí, establece las siguientes variables de entorno.
# Windows
set npm_config_runtime=electron
set npm_config_target=21.0.0
# Linux / OSX
export npm_config_runtime=electron
export npm_config_target=21.0.0
Después instala los paquetes necesarios para ejecutar Fermion con:
npm install
Una vez completado, puedes ejecutar Fermion emitiendo:
npm start
Completa los pasos anteriores y luego emite el siguiente comando desde la terminal:
# Windows
electron-packager . --icon .\src\images\fermion-ico.ico
# Linux
electron-packager . --icon ./src/images/fermion-ico.png
# OSX
electron-packager . --icon ./src/images/fermion-ico.icns
Puedes obtener la última versión precompilada de Fermion para Windows x64 y Linux desde releases.
Fermion que te indicará cuál es el problema y cómo resolverlo. Sin embargo, en general, puedes ejecutar Fermion o el Frida Server como root o, alternativamente, ejecutar el siguiente comando sudo sysctl kernel.yama.ptrace_scope=0.P: Quiero construir mi propia versión de Fermion con una versión nueva de Frida/Electron. ¿Cómo puedo saber qué prebuild's existen actualmente?
ELECTRON_TARGETS_DEFAULT y ELECTRON_TARGETS_FREEBSD respectivamente.P: Quiero revisar/cambiar/actualizar las definiciones de tipos utilizadas en el editor Monaco, ¿cómo puedo hacerlo?
node_modules/@types/frida-gum/index.d.ts.P: ¿Por qué no tienes un trace estable, hombre (╯°□°)╯︵ ┻━┻
hot pointer y/o el rastreo está generando gráficos con miles de nodos, es probable que la ventana de rastreo se retrase mientras recibe datos. Además, como con cualquier tipo de rastreo, puede causar inestabilidad / caídas / congelamientos del proceso.Puedes ver un ejemplo de Fermion en funcionamiento a continuación, en este caso instrumentando kernel32!ReadFile.

Fermion tiene autocompletado, linting y soporte de símbolos de la API de Frida.

Fermion puede conectarse a un servidor de Frida para depurar aplicaciones remotas usando el menú contextual device. En muchos casos, como con la depuración por USB o al adjuntarse a aplicaciones móviles a través de emuladores como genymotion, Fermion detectará automáticamente el servidor como disponible. Sin embargo, también es posible especificar un servidor remoto usando una combinación de IP y Puerto.

Fermion tiene soporte integrado para el rastreo de CALL de hilos.

Esto puede no hacer exactamente lo que esperas. Cuando defines una combinación de puntero o módulo/Símbolo, el rastreador se adjuntará a esa ubicación y cada vez que un hilo se ejecute en ese lugar, comenzará a rastrear todas las instrucciones CALL que ese hilo realice hasta que regrese. Esto significa que diferentes ejecuciones pueden generar gráficos distintos; también significa que puede que no veas todo lo que una función está haciendo (por ejemplo, si dentro de la función se genera un hilo diferente).

Fermion convierte estos rastreos a un formato Graphviz SVG usando dot, que luego puedes explorar. Esta es una característica que personalmente encuentro útil en ocasiones cuando realizo trabajo exploratorio (¿Qué hace una función? ¿Qué tan compleja es esa ejecución?). Dicho esto, es una característica prototipo que construí sobre Fermion y probablemente necesite más cariño para estar más lista para producción.
Fermion también tiene documentación integrada para la API de JavaScript de Frida. Como todos los demás, no siempre recuerdo cómo funciona todo, y tener la documentación en la aplicación elimina la necesidad de tener una ventana del navegador abierta.

Para más detalles sobre los cambios específicos de cada versión, consulta el changelog.
Si integras Fermion en tu flujo de trabajo y te resulta útil, te animo a hacer pull requests, enviar informes de errores y solicitar funciones para mejorar la aplicación. No soy exactamente un desarrollador de Node, así que estoy seguro de que la gente encontrará formas de optimizar y rehacer algunos de los componentes.
Frida v15.0+.¡Solo quiero dar unas gracias especiales!