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

点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

n prosperity, our friends know us;In adversity, we know our friends. 

在顺境中,朋友结识了我们;在逆境中,我们了解了朋友。

每日掏心

生活应该向前看的,只有把自己从过去中解放出来,你前面的脚下才有路。大舍大得,小舍小得,不舍不得。

来自:dog250 | 责编:乐乐

链接:blog.csdn.net/dog250/article/details/108032383

程序员小乐(ID:study_tech) 第 988 次推文 图源:百度

往日回顾:为什么 Java 中“1000==1000”为false,而”100==100“为true?

     

   正文   

总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户。

网上通篇论述的无外乎 hook 掉 procfs 或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大了,太复杂了。对于希望马上看到效果的而言,看到这么一堆复杂的东西,大概率望而却步。

本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码:

修改掉进程的pid即可。

注意是小隐,所以,不值得反制,逗一下高级会议工程师搞个恶作剧玩玩得了。

target->pid = 0x7fffffff;

完整的脚本如下:

#!/usr/bin/stap -g
# hide.stp

global pid;

function hide(who:long)
%{
    struct task_struct *target;

    target = pid_task(find_vpid(STAP_ARG_who), PIDTYPE_PID);
    target->pid = 0x7fffffff;
%}

probe begin
{
    pid = $1
    hide(pid);
    exit();
}
ff;

来来来,试一下:

[root@localhost system]# ./tohide &
[1] 403
[root@localhost system]# ./hide.stp
[root@localhost system]# 

用下面的命令可以检测所有可显示进程的二进制文件:

for pid in $(ls /proc|awk '/^[0-9]+/{print $1}'); do 
    ls -l /proc/$pid/exe; 
done

procfs里没了,ps当然就检测不到了。

搜索公众号程序员小乐回复关键字“Java”获取Java面试题和答案。

如果你觉得 guru 模式的 stap 怪怪的,那么你完全可以编写自己独立的 Linux kernel module,采用修改完即退的方法:

target->pid = xxxx;
return -1;是不是比各种hook法简单多了,所谓的动数据而不要动代码!

是不是比各种 hook 法简单多了,所谓的动数据而不要动代码!

简单的说一下原理:

  • task被创建的时候,根据其pid注册procfs目录结构。

  • 展示procfs目录结构的时候,遍历task list以其pid作为key来查找procfs目录结构。

  • 0x7fffffff(或者任何其它合理的值)根本没有注册过,当然无法显示。

不多说。

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。欢迎加入程序员小乐技术交流群,在后台回复“加群”或者“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

大公司为什么都有API网关?聊聊API网关的作用

一看读懂反向代理,看了都说好!

假如有人把支付宝所有存储服务器炸了,我们在里边的钱是不是都丢了?

关注订阅号「程序员小乐」,收看更多精彩内容

嘿,你在看吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值