
C2-Software für eingebettete Systeme, geschrieben in C/C#
Das Oni-Framework ist eine Plattform für die Softwareentwicklung für eingebettete Geräte. Es wird verwendet, um ein eingebettetes Gerät remote zu debuggen bzw. um Funktionen hinzuzufügen. Derzeit sind die Hauptkonzepte ein vollständig modulares Plugin-System mit lokalem und Remote-RPC. Es wurde für die Ausführung auf Privilegienstufe Ring-0 entwickelt, kann aber mit einigen Anpassungen auch auf Ring-3-Ebenen verwendet werden. Sei gewarnt: Dies ist NICHT für den Produktionseinsatz gedacht, sondern nur für Entwickler, die eine einfache Build-Plattform für Forschungszwecke suchen.
Geplante Funktionen:
Das Oni-Framework erfordert lediglich, dass du dieses Verzeichnis auscheckst und die Datei oni/utils/kdlsym/default.h mit allen erforderlichen Implementierungen ausfüllst. Danach sollte es mit gcc oder clang problemlos kompilieren und eine ausführbare Datei erzeugen. Du musst eine BYO-Ausführungsmethode mitbringen, aber bei den meisten eingebetteten Geräten kann dies über eine SSH-Shell, eine Shell über Telnet oder über jede beliebige Shell bewerkstelligt werden. Andere Geräte müssen möglicherweise in einen laufenden Speicherkontext geladen werden und dann zu main springen, das sich um alle Initialisierungsprobleme kümmern sollte.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Optional: Setze den Speicherort der FreeBSD-Header export BSD_INC="/path/to/freebsd/headers/include"make create ausführen, das die Ordnerstruktur erstelltmake
a. Wenn du die Umgebungsvariable nicht gesetzt hast, kannst du mit make BSD_INC=/path/to/freebsd/headers/include bauenDas Oni-Framework ist nicht auf ein voll funktionsfähiges libc angewiesen und ist so konzipiert, dass es vollständig eigenständig erstellt werden und laufen kann (sofern alle Voraussetzungen erfüllt sind). Stattdessen wird die benötigte Funktionalität aus dem absoluten Minimum vorhandener Funktionen zusammengesetzt – entweder im Kontext eines laufenden Prozesses oder im Kernel-Kontext (letzteres ist der einzige getestete).
include/oni/utils/kdlsym/my_platform.h erstellstinclude/oni/utils/kdlsym/default.h und füge ihn in deine neu erstellte Header-Datei eininclude/oni/utils/kdlsym.h hinzu#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 befindet// Unknown device
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM in #define ONI_PLATFORM ONI_MY_PLATFORM änderstWenn du einen Beitrag leisten möchtest, reiche einfach einen Pull-Request ein. Ansonsten gibt es derzeit keinen echten Support dafür. Das könnte sich in der Zukunft ändern
| Bit-Offset | Bitlänge | Name | Beschreibung | Verwendung |
|---|
| 0 | 3 | Magic | Dies ist eine einfache Packet-Header-Magic, um sicherzustellen, dass Nachrichten ordnungsgemäß verarbeitet werden | ERFORDERLICH: Muss auf 0101b oder 5 (dezimal) gesetzt werden |
| 3 | 4 | Message Category | Dies beschreibt, an welche Kategorie die Nachricht auf der Oni-Framework-Seite weitergeleitet wird | ERFORDERLICH: Maximal 14 Kategorien (aktuell 5 in Verwendung) |
| 7 | 32 | Error/MessageType | Dieses Feld enthält den Fehlercode oder den Nachrichtentyp | ANFRAGEN: Muss auf den Nachrichtentyp gesetzt werden, der aktuell per CRC32(MessageName) berechnet wird. ANTWORT: Wird auf den Fehlercode/Rückgabewert gesetzt |
| 39 | 16 | Payload Size | Dies ist die Länge der Daten, die auf den Nachrichtenheader folgen | OPTIONAL: Auf 0 setzen, wenn keine Nutzdaten vorhanden sind, andernfalls werden Daten erwartet |
| 55 | 1 | Request | Dieses Flag wird auf 1 gesetzt, wenn die Nachricht eine Anfrage ist, oder auf 0, wenn es eine Antwort ist | ERFORDERLICH |
| 56 | 7 | Reserved | Reserviert | IGNORIERT: Auf 0 setzen |