gpt4 book ai didi

c - 劫持系统调用

转载 作者:可可西里 更新时间:2023-11-01 11:49:42 26 4
gpt4 key购买 nike

我正在编写一个内核模块,我需要劫持/包装一些系统调用。我正在暴力破解 sys_call_table 地址,并使用 cr0 来禁用/启用页面保护。到目前为止一切顺利(我会在完成后公开整个代码,因此如果有人需要,我可以更新这个问题)。

无论如何,我注意到如果我劫持 __NR_sys_read 我会在卸载内核模块时收到内核 oops,并且所有 konsoles (KDE) 都会崩溃。请注意,__NR_sys_open__NR_sys_write 不会发生这种情况。

我想知道为什么会这样。有什么想法吗?

PS:请不要走 KProbes 的路,我已经知道它了,我不可能使用它,因为最终产品应该可以使用而无需重新编译整个内核。

编辑:(添加信息)

我在卸载前恢复了原来的功能。另外,我创建了两个测试用例,一个只有 _write,一个有 _read。带有 _write 的卸载正常,但是带有 _read 的卸载然后使内核崩溃)。

编辑:(源代码)

我目前在家,所以我现在无法发布源代码,但如果有人需要,我可以在上类后立即发布示例代码。 (~5 小时)

最佳答案

这可能是因为内核线程当前在 read 中 - 如果调用您的 read-hook 没有锁定模块,则无法安全卸载它。

这可以解释“konsoles”(?)崩溃,因为它们当前可能正在执行 read 系统调用,等待数据。当它们从实际的系统调用返回时,它们会跳转到您的函数曾经所在的位置,从而导致问题。

卸载会很乱,但是需要先去掉钩子(Hook),然后等待所有调用者退出钩子(Hook)函数,再卸载模块。

我最近一直在玩 linux 系统调用 Hook ,但我绝不是内核大师,所以如果这有偏差,我深表歉意。

附注: This technique可能证明比暴力破解 sys_call_table 更可靠。如果 sys_close 已经被 Hook ,我见过的暴力破解技术往往会导致内核 panic 。

关于c - 劫持系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com