
Embedded systems C2 software written in C/C#
Oni framework is a platform for embedded device software development. It is used in order to remotely debug/add functionality to an embedded device. As of right now, the main concepts are a fully modular plugin system, with local and remote rpc. This was designed to run at ring-0 privilege level, but with some tweaks can also be used in ring-3 levels. Be warned, this is NOT for production use, only for developers who want an easy building platform for research.
Features that are planned:
Oni-Framework just requires that you check out this directory and implement the oni/utils/kdlsym/default.h file with all of the implementations that are required. After this, it should compile just fine with gcc or clang and produce an executable file. You will need to BYO-execution method, but for most embedded devices this can be accomplished via a ssh shell, or a shell over telnet, or any shell for that matter. Other devices may have to load into running memory context, then jump to main which should take care of all of the initialization issues.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Optional: Set FreeBSD headers location export BSD_INC="/path/to/freebsd/headers/include"make create which will create the folder structuremake
a. If you have not set the environment variable you can build with make BSD_INC=/path/to/freebsd/headers/includeOni-Framework does not rely on a fully functional libc, and is built to build, and run completely standalone (provided all pre-requisites are met). Instead needed functionality is pieced together from the bare minimum of existing functions either in an running process's context, or kernel context (the latter is the only one tested).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h to your newly created header fileinclude/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 to #define ONI_PLATFORM ONI_MY_PLATFORMIf you want to contribute, just submit a pull request. Otherwise, there is no real support for this at this point. This may change in the future
| Bit Offset | Bit Length | Name | Description | Usage |
|---|
| 0 | 3 | Magic | This is a simple packet header magic in order to ensure that messages are being processed properly | REQUIRED: Must be set to 0101b or 5 (dec) |
| 3 | 4 | Message Category | This describes which category to route the message to on oni-framework side | REQUIRED: Maximum of 14 categories (5 in use currently) |
| 7 | 32 | Error/MessageType | This field contains the error code, or the message type | REQUESTS: This must be set to the message type which is calculated currently by CRC32(MessageName), RESPONSE: This is set to the error code/return value |
| 39 | 16 | Payload Size | This is the length of data that comes after the message header | OPTIONAL: Set to 0 if no payload, otherwise will expect data |
| 55 | 1 | Request | This flag will be set to 1 if the message is a request, or 0 if it is a response | REQUIRED |
| 56 | 7 | Reserved | Reserved | IGNORED: Set to 0 |