Linux 3.13.0-63-generic
当我运行时,我的 ubuntu 服务器返回uname -rs
。从我在互联网上发现的情况来看,uname
这也是一个系统调用,例如,当第三方程序从 C++ 运行此系统调用时,它不能轻易被覆盖。
有谁知道是否有办法欺骗返回值,例如通过操纵/proc/sys/kernel/ostype
文件?如果我可以对每个流程实例进行欺骗,那就更好了。
答案1
据我所知,只有有限的方法可以使用以下方法对每个进程进行自定义release
( uname -r
) 和machine
( )uname -m
personality()
系统调用,全部暴露在setarch
命令、sysname
( uname -r
) 根本无法定制。
$ uname -rsm; setarch i386 --uname-2.6 --32bit uname -rsm
Linux 3.16.0-4-amd64 x86_64
Linux 2.6.56-4-amd64 i686
如果你想以不同的方式欺骗uname并且程序是动态链接的,你可以使用LD_PRELOAD
重写该uname
函数;看执行前重定向文件描述符有关通过 进行函数重载的示例LD_PRELOAD
。如果程序是静态链接的,您可以用来ptrace
欺骗它的系统调用,但这需要更高级的编程。