
Библиотека, позволяющая инспектировать и манипулировать памятью и кодом запущенного процесса в системе Linux.
raminspect — это крейт, который позволяет инспектировать и манипулировать памятью и кодом запущенного процесса в системе Linux. Он предоставляет функции для поиска и замены искомых строк в памяти процесса, функции для выделения новой памяти, принадлежащей процессу, а также интерфейс, позволяющий внедрять произвольный шелл-код, выполняющийся в контексте процесса. Всё это требует прав root по очевидным причинам.
demo
Вы сможете запустить пример firefox_search, если у вас установлен Firefox. Для этого начните с открытия экземпляра Firefox и введите "Old search text" в строке поиска. Если всё пойдёт хорошо, то при запуске примера от имени root с помощью команды sudo cargo run --example firefox_search --release текст должен замениться на "New search text", хотя, вероятно, вам придётся снова кликнуть по строке поиска, чтобы отобразился новый текст.
Функциональность поиска и замены доступна как с модулем ядра, так и без него, но если вы хотите внедрять шелл-код или выделять новые буферы, вы должны сначала собрать и загрузить необходимый модуль ядра. Вы можете сделать это, установив пакет заголовков ядра вашего дистрибутива, выполнив git clone, а затем запустив следующие команды в подпапке kern_module репозитория (если сборка по какой-то причине не удалась, пожалуйста, создайте issue):
make all
sudo insmod raminspect.ko
Также обратите внимание, что часть с внедрением шелл-кода в настоящее время спроектирована так, чтобы работать на любой архитектуре (хотя сам шелл-код должен быть платформенно-зависимым), но часть с произвольным выделением памяти в настоящее время ограничена x86-64. PR, добавляющие поддержку произвольного выделения памяти на других архитектурах CPU, приветствуются.
Этот проект ещё не находится в стабильном состоянии; ожидайте ломающих изменений и ошибок. Если вы найдёте ошибку в крейте или если какой-либо из примеров не работает на вашей машине, пожалуйста, создайте issue в репозитории, чтобы её можно было оперативно исправить.