
Software C2 para sistemas embarcados escrito em C/C#
O Oni framework é uma plataforma para desenvolvimento de software para dispositivos embarcados. É utilizado para depurar/adicionar funcionalidades remotamente a um dispositivo embarcado. Atualmente, os principais conceitos são um sistema de plugins totalmente modular, com RPC local e remoto. Foi projetado para executar no nível de privilégio ring-0, mas com alguns ajustes também pode ser usado nos níveis ring-3. Atenção: isso NÃO é para uso em produção, apenas para desenvolvedores que desejam uma plataforma de construção fácil para pesquisa.
Funcionalidades planeadas:
O Oni-Framework apenas requer que você faça checkout deste diretório e implemente o arquivo oni/utils/kdlsym/default.h com todas as implementações necessárias. Depois disso, deve compilar sem problemas com gcc ou clang e produzir um arquivo executável. Você precisará de um método de execução BYO, mas para a maioria dos dispositivos embarcados isso pode ser feito através de um shell ssh, um shell via telnet ou qualquer outro shell. Outros dispositivos podem ter que carregar no contexto de memória em execução e depois pular para main, que cuidará de todas as questões de inicialização.
git clone https://github.com/kiwidoggie/oni-framework.git
a. Opcional: Defina a localização dos cabeçalhos do FreeBSD export BSD_INC="/caminho/para/cabeçalhos/freebsd/include"make create, que criará a estrutura de pastasmake
a. Se não tiver definido a variável de ambiente, pode compilar com make BSD_INC=/caminho/para/cabeçalhos/freebsd/includeO Oni-Framework não depende de uma libc totalmente funcional e foi construído para compilar e executar de forma completamente independente (desde que todos os pré-requisitos sejam atendidos). Em vez disso, a funcionalidade necessária é montada a partir do mínimo de funções existentes, seja no contexto de um processo em execução ou no contexto do kernel (este último é o único testado).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h no seu arquivo de cabeçalho recém-criadoinclude/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// Dispositivo desconhecido
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM para #define ONI_PLATFORM ONI_MY_PLATFORMSe quiser contribuir, basta enviar um pull request. Caso contrário, não há suporte real para isso neste momento. Isso pode mudar no futuro.
| Bit Offset | Bit Length | Nome | Descrição | Uso |
|---|
| 0 | 3 | Magic | Este é um simples magic de cabeçalho de pacote para garantir que as mensagens estão sendo processadas corretamente | OBRIGATÓRIO: Deve ser definido como 0101b ou 5 (dec) |
| 3 | 4 | Categoria da Mensagem | Descreve para qual categoria a mensagem deve ser roteada no lado do oni-framework | OBRIGATÓRIO: Máximo de 14 categorias (5 em uso atualmente) |
| 7 | 32 | Erro/TipoDeMensagem | Este campo contém o código de erro ou o tipo de mensagem | REQUISIÇÕES: Deve ser definido como o tipo de mensagem calculado atualmente por CRC32(NomeDaMensagem), RESPOSTA: É definido como o código de erro/valor de retorno |
| 39 | 16 | Tamanho do Payload | Este é o comprimento dos dados que vêm após o cabeçalho da mensagem | OPCIONAL: Defina como 0 se não houver payload, caso contrário, esperará dados |
| 55 | 1 | Requisição | Esta flag será definida como 1 se a mensagem for uma requisição, ou 0 se for uma resposta | OBRIGATÓRIO |
| 56 | 7 | Reservado | Reservado | IGNORADO: Defina como 0 |