
Software C2 per sistemi embedded scritto in C/C#
Oni framework è una piattaforma per lo sviluppo di software per dispositivi embedded. Viene utilizzato per eseguire il debug remoto/aggiungere funzionalità a un dispositivo embedded. Al momento, i concetti principali sono un sistema di plugin completamente modulare, con RPC locale e remota. È stato progettato per funzionare a livello di privilegio ring-0, ma con alcune modifiche può essere utilizzato anche a livelli ring-3. Attenzione: questo NON è per l'uso in produzione, è solo per sviluppatori che vogliono una piattaforma di facile costruzione per la ricerca.
Funzionalità pianificate:
Oni-Framework richiede solo che tu faccia il checkout di questa directory e implementi il file oni/utils/kdlsym/default.h con tutte le implementazioni necessarie. Dopo questo, dovrebbe compilare senza problemi con gcc o clang e produrre un file eseguibile. Dovrai portare il tuo metodo di esecuzione (BYO-execution), ma per la maggior parte dei dispositivi embedded questo può essere fatto tramite una shell ssh, o una shell su telnet, o qualsiasi shell. Altri dispositivi potrebbero dover caricare nel contesto di memoria in esecuzione e poi saltare a main, che dovrebbe gestire tutti i problemi di inizializzazione.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Opzionale: imposta la posizione degli header FreeBSD export BSD_INC="/path/to/freebsd/headers/include"make create che creerà la struttura delle cartellemake
a. Se non hai impostato la variabile d'ambiente puoi compilare con make BSD_INC=/path/to/freebsd/headers/includeOni-Framework non dipende da una libc completamente funzionante, ed è progettato per essere compilato ed eseguito in modo completamente autonomo (a condizione che tutti i prerequisiti siano soddisfatti). Invece, la funzionalità necessaria è assemblata dal minimo indispensabile di funzioni esistenti, sia nel contesto di un processo in esecuzione, sia nel contesto del kernel (quest'ultimo è l'unico testato).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h nel tuo nuovo file headerinclude/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 in #define ONI_PLATFORM ONI_MY_PLATFORMSe vuoi contribuire, invia semplicemente una pull request. Altrimenti, non c'è un supporto vero e proprio per questo al momento. Questo potrebbe cambiare in futuro
| Bit Offset | Bit Length | Name | Description | Usage |
|---|
| 0 | 3 | Magic | Questa è una semplice intestazione magica del pacchetto per garantire che i messaggi vengano elaborati correttamente | OBBLIGATORIO: Deve essere impostata a 0101b o 5 (dec) |
| 3 | 4 | Message Category | Descrive a quale categoria instradare il messaggio sul lato oni-framework | OBBLIGATORIO: Massimo 14 categorie (5 attualmente in uso) |
| 7 | 32 | Error/MessageType | Questo campo contiene il codice di errore, o il tipo di messaggio | RICHIESTE: Deve essere impostato al tipo di messaggio, calcolato attualmente da CRC32(MessageName), RISPOSTA: Viene impostato al codice di errore/valore di ritorno |
| 39 | 16 | Payload Size | Questa è la lunghezza dei dati che seguono l'intestazione del messaggio | OPZIONALE: Impostare a 0 se non c'è payload, altrimenti verranno attesi dati |
| 55 | 1 | Request | Questo flag sarà impostato a 1 se il messaggio è una richiesta, o a 0 se è una risposta | OBBLIGATORIO |
| 56 | 7 | Reserved | Riservato | IGNORATO: Impostare a 0 |