
Software C2 para sistemas embebidos escrito en C/C#
Oni framework es una plataforma para el desarrollo de software de dispositivos embebidos. Se utiliza para depurar/añadir funcionalidad de forma remota a un dispositivo embebido. Por ahora, los conceptos principales son un sistema de plugins totalmente modular, con RPC local y remoto. Fue diseñado para ejecutarse en el nivel de privilegio ring-0, pero con algunos ajustes también se puede usar en niveles ring-3. Ten en cuenta que esto NO es para uso en producción, solo para desarrolladores que quieran una plataforma de construcción fácil para investigación.
Funcionalidades planificadas:
Oni-Framework solo requiere que clones este directorio e implementes el archivo oni/utils/kdlsym/default.h con todas las implementaciones requeridas. Después de esto, debería compilar sin problemas con gcc o clang y producir un archivo ejecutable. Necesitarás traer tu propio método de ejecución (BYO), pero para la mayoría de los dispositivos embebidos esto se puede lograr mediante un shell SSH, un shell a través de telnet, o cualquier otro shell, de hecho. Otros dispositivos pueden tener que cargarse en el contexto de memoria en ejecución y luego saltar a main, que debería encargarse de todos los problemas de inicialización.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Opcional: Establece la ubicación de los encabezados de FreeBSD export BSD_INC="/path/to/freebsd/headers/include"make create, que creará la estructura de carpetasmake
a. Si no has establecido la variable de entorno, puedes compilar con make BSD_INC=/path/to/freebsd/headers/includeOni-Framework no depende de una libc completamente funcional, y está construido para compilarse y ejecutarse de forma totalmente independiente (siempre que se cumplan todos los requisitos previos). En su lugar, la funcionalidad necesaria se ensambla a partir del mínimo indispensable de funciones existentes, ya sea en el contexto de un proceso en ejecución o en el contexto del kernel (este último es el único probado).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h en tu archivo de encabezado recién creadoinclude/oni/utils/kdlsym.h#if ONI_PLATFORM==ONI_UNKNOWN_PLATFORM
#include "kdlsym/default.h"
#elif ...
#elif ONI_PLATFORM==ONI_MY_PLATFORM
#include "kdlsym/my_platform.h"
#endif
include/oni/config.h// Unknown device
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM por #define ONI_PLATFORM ONI_MY_PLATFORMSi quieres contribuir, simplemente envía una pull request. De lo contrario, no hay soporte real para esto en este momento. Esto puede cambiar en el futuro
| Offset de bits | Longitud de bits | Nombre | Descripción | Uso |
|---|
| 0 | 3 | Magic | Este es un número mágico simple de cabecera de paquete para asegurar que los mensajes se procesan correctamente | REQUERIDO: Debe establecerse a 0101b o 5 (dec) |
| 3 | 4 | Categoría de mensaje | Describe a qué categoría debe enrutarse el mensaje en el lado de oni-framework | REQUERIDO: Máximo de 14 categorías (5 en uso actualmente) |
| 7 | 32 | Error/MessageType | Este campo contiene el código de error o el tipo de mensaje | SOLICITUDES: Debe establecerse al tipo de mensaje, que se calcula actualmente mediante CRC32(MessageName). RESPUESTA: Se establece al código de error/valor de retorno |
| 39 | 16 | Tamaño del payload | Es la longitud de los datos que van después de la cabecera del mensaje | OPCIONAL: Establecer a 0 si no hay payload; de lo contrario, se esperarán datos |
| 55 | 1 | Solicitud | Esta marca se establecerá a 1 si el mensaje es una solicitud, o a 0 si es una respuesta | REQUERIDO |
| 56 | 7 | Reservado | Reservado | IGNORADO: Establecer a 0 |