
Программное обеспечение C2 для встраиваемых систем, написанное на C/C#
Oni framework — это платформа для разработки программного обеспечения встраиваемых устройств. Она используется для удаленной отладки/добавления функциональности на встраиваемое устройство. На данный момент основными концепциями являются полностью модульная система плагинов с локальным и удаленным RPC. Проект был спроектирован для работы на уровне привилегий ring-0, но с некоторыми доработками может использоваться и на уровнях ring-3. Следует помнить: это НЕ для продакшн-использования, а только для разработчиков, которым нужна простая платформа для исследовательской сборки.
Планируемые возможности:
Oni-Framework требует только, чтобы вы склонировали этот репозиторий и реализовали файл oni/utils/kdlsym/default.h со всеми необходимыми реализациями. После этого проект должен собраться с помощью gcc или clang и создать исполняемый файл. Вам потребуется свой метод выполнения (BYO-execution), но для большинства встраиваемых устройств это можно сделать через ssh-оболочку, оболочку по telnet или любую другую оболочку. На других устройствах может потребоваться загрузиться в контекст работающей памяти, а затем перейти к main, который должен позаботиться обо всех вопросах инициализации.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Опционально: укажите расположение заголовков FreeBSD export BSD_INC="/path/to/freebsd/headers/include"make create — это создаст структуру папокmake
a. Если вы не задали переменную окружения, можно собрать с помощью make BSD_INC=/path/to/freebsd/headers/includeOni-Framework не полагается на полнофункциональную libc и создан так, чтобы собираться и работать полностью автономно (при условии выполнения всех предварительных требований). Вместо этого необходимая функциональность собирается из минимального набора существующих функций — либо в контексте работающего процесса, либо в контексте ядра (последнее является единственным протестированным).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h в ваш новый заголовочный файлinclude/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 на #define ONI_PLATFORM ONI_MY_PLATFORMЕсли вы хотите внести свой вклад, просто отправьте pull request. В противном случае на данный момент реальной поддержки нет. В будущем это может измениться
| Смещение (бит) | Длина (бит) | Имя | Описание | Использование |
|---|
| 0 | 3 | Magic | Простое магическое число заголовка пакета для проверки корректности обработки сообщений | ОБЯЗАТЕЛЬНО: должно быть 0101b или 5 (дес.) |
| 3 | 4 | Категория сообщения | Определяет категорию, по которой сообщение будет направлено на стороне oni-framework | ОБЯЗАТЕЛЬНО: максимум 14 категорий (5 в настоящее время используются) |
| 7 | 32 | Ошибка/Тип сообщения | Содержит код ошибки или тип сообщения | ЗАПРОСЫ: должно быть установлено в тип сообщения, вычисляемый в настоящее время как CRC32(ИмяСообщения); ОТВЕТ: устанавливается в код ошибки/возвращаемое значение |
| 39 | 16 | Размер полезной нагрузки | Длина данных, следующих после заголовка сообщения | ОПЦИОНАЛЬНО: 0, если нет полезной нагрузки, иначе ожидаются данные |
| 55 | 1 | Запрос | Этот флаг устанавливается в 1, если сообщение является запросом, или в 0, если это ответ | ОБЯЗАТЕЛЬНО |
| 56 | 7 | Зарезервировано | Зарезервировано | ИГНОРИРУЕТСЯ: установить в 0 |