当前位置: 首页 > 科技观察

一行代码如何隐藏一个Linux进程?

时间:2023-03-12 19:09:19 科技观察

有朋友总是问如何隐藏Linux进程。我说你要隐藏到什么程度,是隐藏在内核里还是隐藏在用户里。网上的讨论无非就是hookoffprocfs或者类似的用户态解决方案,难免啰嗦。我说这些场景太大太复杂了。对于想马上看到效果的人来说,看到这么一堆复杂的东西很可能会望而却步。本文介绍一种非常规的对用户隐藏Linux进程的方法,只需一行代码:修改进程的pid。注意是小音,不值得反驳,调侃高级会议工程师,恶作剧就行了。目标->pid=0x7fffffff;完整的脚本如下:#!/usr/bin/stap-g#hide.stpglobalpid;functionhide(who:long)%{structtask_struct*target;target=pid_task(find_vpid(STAP_ARG_who),PIDTYPE_PID);target->pid=0x7fffffff;%}probebegin{pid=$1hide(pid);exit();}ff;来来来,试试:[root@localhostsystem]#./tohide&[1]403[root@localhostsystem]#./hide.stp[root@localhostsystem]#使用以下命令检测所有可以显示进程的二进制文件:forpidin$(ls/proc|awk'/^[0-9]+/{print$1}');dols-l/proc/$pid/exe;doneprocfs没有了,当然ps也检测不到。如果你觉得guru模式下的stap很奇怪,那你完全可以自己写一个独立的linux内核模块,修改后使用return的方法:target->pid=xxxx;return-1;是不是比各种hook方法简单多了,正所谓搬数据不搬代码!是不是比各种hook方法简单多了,所谓搬数据不搬代码!简单说一下原理:创建任务时,根据其pid结构注册procfs目录。在显示procfs目录结构时,遍历task列表,以其pid为key查找procfs目录结构。0x7fffffff(或任何其他合理值)根本没有注册,当然无法显示。