raminspect 是一个 crate,可用于检查和操作 Linux 系统上正在运行的进程的内存和代码。它提供了在进程内存中查找和替换搜索词的功能、为进程分配新内存的功能,以及一个允许在进程上下文中注入任意 shellcode 的接口。出于显而易见的原因,所有这些操作都需要 root 权限。
demo
如果你安装了 Firefox,应该可以运行 firefox_search 示例。为此,请先打开一个 Firefox 实例,并在搜索栏中输入 "Old search text"。如果一切顺利,当你以 root 身份使用命令 sudo cargo run --example firefox_search --release 运行该示例时,它应该会被替换为 "New search text",不过你可能需要再次点击搜索栏才能让它渲染出新文本。
查找和替换功能无论是否加载内核模块都可用,但如果你想注入 shellcode 或分配新缓冲区,则必须先构建并加载前置内核模块。你可以通过安装发行版的内核头文件包、执行 git clone,然后在仓库的 kern_module 子文件夹中运行以下命令来完成(如果构建因某种原因失败,请提交 issue):
make all
sudo insmod raminspect.ko
另请注意,shellcode 注入部分目前设计为可在任何架构上工作(尽管实际的 shellcode 本身必须针对特定平台),但任意内存分配部分目前仅限于 x86-64。欢迎提交 PR 以在更多 CPU 架构上添加任意分配支持。
该项目尚未达到稳定状态;预计会有破坏性变更和 bug。如果你发现该 crate 中存在 bug,或者任何示例在你的机器上无法运行,请在仓库中创建 issue,以便及时修复。