
Eine Bibliothek, die die Inspektion und Manipulation des Speichers und Codes eines laufenden Prozesses auf einem Linux-System ermöglicht.
raminspect ist ein Crate, das die Inspektion und Manipulation des Speichers und Codes eines laufenden Prozesses auf einem Linux-System ermöglicht. Es bietet Funktionen zum Finden und Ersetzen von Suchbegriffen im Speicher eines Prozesses, Funktionen zum Zuweisen neuen Speichers, der zum Prozess gehört, sowie eine Schnittstelle, die die Injektion beliebigen Shellcodes ermöglicht, der im Kontext des Prozesses ausgeführt wird. All dies erfordert aus offensichtlichen Gründen Root-Rechte.
demo
Sie sollten das Beispiel firefox_search ausführen können, wenn Firefox installiert ist. Öffnen Sie dazu zunächst eine Firefox-Instanz und geben Sie „Old search text“ in die Suchleiste ein. Wenn alles gut geht, sollte es durch „New search text“ ersetzt werden, wenn Sie das Beispiel als Root mit dem Befehl sudo cargo run --example firefox_search --release ausführen. Allerdings müssen Sie wahrscheinlich erneut auf die Suchleiste klicken, damit der neue Text angezeigt wird.
Die Find-and-Replace-Funktionalität ist mit oder ohne das Kernelmodul verfügbar, aber wenn Sie Shellcode injizieren oder neue Puffer zuweisen möchten, müssen Sie zuerst das erforderliche Kernelmodul bauen und laden. Dazu installieren Sie das Kernel-Headers-Paket Ihrer Distribution, führen ein git clone aus und führen dann die folgenden Befehle im Unterordner kern_module des Repositorys aus (falls der Build aus irgendeinem Grund fehlschlägt, erstellen Sie bitte ein Issue):
make all
sudo insmod raminspect.ko
Beachten Sie außerdem, dass der Teil zur Shellcode-Injektion derzeit so konzipiert ist, dass er auf jeder Architektur funktioniert (auch wenn der eigentliche Shellcode selbst plattformspezifisch sein muss), aber der Teil zur beliebigen Speicherzuweisung derzeit auf x86-64 beschränkt ist. PRs zur Unterstützung beliebiger Zuweisungen auf weiteren CPU-Architekturen sind willkommen.
Dieses Projekt befindet sich noch nicht in einem stabilen Zustand; rechnen Sie mit Breaking Changes und Bugs. Wenn Sie einen Bug im Crate finden oder wenn eines der Beispiele auf Ihrem Rechner nicht funktioniert, erstellen Sie bitte ein Issue im Repository, damit es zeitnah behoben werden kann.