【发布时间】:2020-09-09 01:26:06
【问题描述】:
因此,您似乎无法修改内核代码,因为指向它的 PTE 被标记为可执行而不是可写。我想知道您是否可以使用以下方法覆盖内核代码? (这仅适用于 x86 并假设我们具有 root 访问权限,因此我们将以下步骤作为内核模块运行)
- 读入CR3寄存器的内容
- 使用 kmalloc 分配足够大的内存以复制所有 PTE 和 PDE
- 使用从 CR3 寄存器获得的值将所有分页数据复制到新分配的内存中
- 将相关页面标记为可执行和可写
- 用指向我们在步骤 2 中分配的内存的指针覆盖 CR3 寄存器
在这一点上,假设这一切正常,你不能覆盖返回地址和内核代码的其他部分吗?而在这样做之前,我们会被分页机制保护所阻止?
【问题讨论】:
-
您已经在通过加载模块来编写和执行内核代码。您打算通过这些额外步骤实现什么目标?
-
这个想法是覆盖未标记为可写的代码。重点是将代码隐藏在内核中以透明地运行某些进程
标签: linux linux-kernel