
Uma biblioteca que permite a inspeção e manipulação da memória e do código de um processo em execução em um sistema Linux.
raminspect é um crate que permite a inspeção e manipulação da memória e do código de um processo em execução em um sistema Linux. Ele fornece funções para localizar e substituir termos de busca na memória de um processo, funções para alocar nova memória pertencente ao processo e uma interface que permite a injeção de shellcode arbitrário em execução no contexto do processo. Tudo isso requer privilégios de root, por razões óbvias.
demo
Você deve conseguir executar o exemplo firefox_search se tiver o Firefox instalado. Para isso, comece abrindo uma instância do Firefox e digitando "Old search text" na barra de pesquisa. Se tudo correr bem, ao executar o exemplo como root usando o comando sudo cargo run --example firefox_search --release, ele deverá ser substituído por "New search text", embora você provavelmente precise clicar novamente na barra de pesquisa para que o novo texto seja renderizado.
A funcionalidade de localizar e substituir está disponível com ou sem o módulo do kernel, mas se você quiser injetar shellcode ou alocar novos buffers, primeiro você deve compilar e carregar o módulo do kernel pré-requisito. Você pode fazer isso instalando o pacote de headers do kernel da sua distribuição, executando um git clone e então rodando os seguintes comandos na subpasta kern_module do repositório (se a compilação falhar por algum motivo, por favor abra uma issue):
make all
sudo insmod raminspect.ko
Observe também que a parte de injeção de shellcode atualmente foi projetada para funcionar em qualquer arquitetura (embora o próprio shellcode precise ser específico da plataforma), mas a parte de alocação arbitrária de memória está atualmente limitada a x86-64. PRs para adicionar suporte à alocação arbitrária em mais arquiteturas de CPU são bem-vindos.
Este projeto ainda não está em um estado estável; espere mudanças que quebram compatibilidade e bugs. Se você encontrar um bug no crate ou se algum dos exemplos não funcionar na sua máquina, por favor crie uma issue no repositório para que possa ser corrigido prontamente.