我是内核编码的新手,目前正在使用ELF文件,出于安全性目的已对其进行了一些修改,为此我需要查看其中的一些自定义节头,并从中提取唯一的代码加密密钥以用于安全性。 CPU解密修改后的ELF的内容。
目前,上述逻辑已在内核源代码树load_elf_binary
的fs/binfmt_elf.c
文件中的函数中实现,但是我只需要大约250行代码更改即可重新编译整个内核,因此我希望通过实现来临时实现此功能它作为可加载的内核模块(LKM),以便每次加载ELF时,都会检查其是否为修改后的ELF,如果是,则从相应部分提取密钥。
编辑:总而言之,我正在寻找一个可加载的内核模块,以通读ELF的各个部分,并获取包含加密密钥和相关元数据的自定义部分的内容,并在CPU寄存器中设置这些值。
是的,有可能,但绝对不容易。甚至还有受支持的内核工具“ kprobes”,它使您可以从指定位置插入对自己的代码的调用(请参阅参考资料Documentation/kprobes.txt
)。如果插入对您自己的代码的调用不足,我认为您需要使用与kprobe相同的机制:通过用jmp
s或call
s覆盖指令到您自己的代码中来修补所需的位置。
我曾经在一家公司工作,该公司的安全产品通过运行时修补Windows内核来安装其挂钩。这几乎是同一回事,尽管至少在当时的Windows中必须支持有限数量的版本。
因此,这绝对有可能,但是我不想尝试。它将非常脆;实际上,您将试图击中一个移动的目标。每次内核安全补丁或版本升级都可能破坏您的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句