
Una libreria che consente l'ispezione e la manipolazione della memoria e del codice di un processo in esecuzione su un sistema Linux.
raminspect è un crate che consente l'ispezione e la manipolazione della memoria e del codice di un processo in esecuzione su un sistema Linux. Fornisce funzioni per trovare e sostituire termini di ricerca nella memoria di un processo, funzioni per allocare nuova memoria appartenente al processo e un'interfaccia che consente l'iniezione di shellcode arbitrario in esecuzione nel contesto del processo. Tutto ciò richiede privilegi di root, per ovvie ragioni.
demo
Dovresti essere in grado di eseguire l'esempio firefox_search se hai Firefox installato. Per farlo, inizia aprendo un'istanza di Firefox e digitando "Old search text" nella barra di ricerca. Se tutto va bene, quando esegui l'esempio come root usando il comando sudo cargo run --example firefox_search --release, dovrebbe essere sostituito con "New search text", anche se probabilmente dovrai fare nuovamente clic sulla barra di ricerca affinché venga visualizzato il nuovo testo.
La funzionalità di ricerca e sostituzione è disponibile con o senza il modulo del kernel, ma se vuoi iniettare shellcode o allocare nuovi buffer devi prima compilare e caricare il modulo del kernel prerequisito. Puoi farlo installando il pacchetto degli header del kernel della tua distribuzione, eseguendo un git clone e poi eseguendo i seguenti comandi nella sottocartella kern_module del repository (se la compilazione fallisce per qualche motivo, apri una issue):
make all
sudo insmod raminspect.ko
Nota inoltre che la parte relativa all'iniezione di shellcode è attualmente progettata per funzionare su qualsiasi architettura (anche se lo shellcode vero e proprio deve essere specifico per la piattaforma), ma la parte relativa all'allocazione arbitraria di memoria è attualmente limitata a x86-64. Le PR per aggiungere il supporto all'allocazione arbitraria su più architetture CPU sono benvenute.
Questo progetto non è ancora in uno stato stabile; aspettati modifiche che rompono la compatibilità e bug. Se trovi un bug nel crate o se qualcuno degli esempi non funziona sulla tua macchina, crea una issue nel repository in modo che possa essere risolto prontamente.