在 Linux 操作系统中,进程的唯一标识符(PID)是其身份证号码。PID 是操作系统为每个正在执行或“睡眠”中的进程分配的唯一数字标识符。每个进程都有一个唯一的 PID,这个 PID 非常重要,因为它允许我们在不同的程序间进行通信和管理它们的资源。在这篇文章中,我们将探究如何使用十六进制 hook PID 的方法来实现进程的跟踪和监控。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站建设、外贸营销网站建设、中方网络推广、成都微信小程序、中方网络营销、中方企业策划、中方品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供中方建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
一、初步认识 Hook
在 Linux 操作系统中,Hook 是非常重要的一个概念。它允许我们截取操作系统流程的某个点,然后对它进行修改。例如,我们可以使用 Hook 实现对 Linux 内核的监控、拦截和过滤等功能,从而加强系统的安全和稳定性。
Hook 有两种实现方法,一种是软件 Hook,另一种是硬件 Hook。软件 Hook 是通过修改系统函数的地址指针来实现的,而硬件 Hook 是通过修改一些硬件的寄存器地址来实现的。本文将着重讲解软件 Hook 的实现方法。
二、Hook PID 基本原理
Hook PID 的基本思路是:当一个进程启动,它将映射到内存中,而 PID 是内核为每个进程分配的一个数字。我们可以通过修改进程映射到内存中的 PID,使得我们能够对这个进程进行跟踪和监控。
在 Linux 操作系统中,PID 存储在进程表中。每个进程都有自己的进程表项,其中包括进程的 PID、进程的状态和进程的资源信息等。我们可以通过修改进程表中的 PID 值,来实现 Hook PID 的功能。
三、Hook PID 实现方法
下面我们来看一下如何实现 Hook PID。
1、获取进程表
要实现 Hook PID,我们首先需要获取进程表的指针。我们可以使用 proc 文件系统来获取,该文件系统是 Linux 操作系统提供的一个虚拟文件系统,可以让我们获取操作系统中的进程信息。
在 proc 文件系统中,每个进程都是一个目录,以其 PID 为目录名称。因此,我们可以通过遍历 proc 文件系统中的所有进程目录,来得到一个进程表的指针。
示例代码:
“`
struct task_struct *task;
for_each_process(task) {
printk(KERN_INFO “pid: %d, command: %s\n”, task_pid_nr(task), task->comm);
}
“`
2、Hook 函数
Hook 函数是 Hook PID 的核心。Hook 函数的作用是截取目标进程的启动函数,并将其修改为我们的 Hook 函数。这样,在目标进程启动时,我们的 Hook 函数就会被调用,从而实现了 Hook PID 的功能。
Hook 函数的实现方法比较复杂,这里我们只介绍常见的两种实现方法:修改 GOT 表和修改 ELF 表。
(1)修改 GOT 表
GOT(全局偏移表)是一张全局变量地址、函数地址等的表格,它是 ELF 格式文件中的一部分。在启动程序时,操作系统会将 GOT 表中的地址重定向为实际地址。我们可以通过修改 GOT 表中的函数地址,来实现 Hook 函数。
示例代码:
“`
int new_execve(const char *filename, char *const argv[], char *const envp[]) {
printk(KERN_INFO “pid=%d, command=%s\n”, current->pid, filename);
return old_execve(filename, argv, envp);
}
unsigned long cr0;
alinkage int hook_start(void) {
spin_lock(&calltable_lock);
old_execve = (void *) sys_table[__NR_execve];
cr0 = read_cr0();
write_cr0(cr0 & ~0x00010000);
sys_table[__NR_execve] = (unsigned long) new_execve;
write_cr0(cr0);
spin_unlock(&calltable_lock);
return 0;
}
alinkage void hook_stop(void) {
spin_lock(&calltable_lock);
write_cr0(cr0 & ~0x00010000);
sys_table[__NR_execve] = (unsigned long) old_execve;
write_cr0(cr0);
spin_unlock(&calltable_lock);
}
“`
(2)修改 ELF 表
在 ELF 格式文件中,每个函数都有自己独特的 ELF 表,它包含了函数的名称、地址等信息。我们可以通过修改 ELF 表中的地址,来实现 Hook 函数。
示例代码:
“`
int new_execve(const char *filename, char *const argv[], char *const envp[]) {
printk(KERN_INFO “pid=%d, command=%s\n”, current->pid, filename);
return old_execve(filename, argv, envp);
}
static int hook_start(void) {
ftrace_mod = find_module(“ftrace_hook”);
if (!ftrace_mod) {
printk(KERN_INFO “module not found.\n”);
return -1;
}
int res = kallsyms_lookup_name(“sys_call_table”, (unsigned long *)&sys_call_table);
if (res != 0) {
printk(KERN_INFO “lookup sys_call_table fled.\n”);
return -1;
}
res = kallsyms_lookup_name(“__x64_sys_execve”, &orig_execve);
if (res != 0) {
printk(KERN_INFO “lookup __x64_sys_execve fled.\n”);
return -1;
}
orig_ins = *(unsigned char *) orig_execve;
*(unsigned char *) orig_execve = 0xE9;
*(unsigned long *)(orig_execve + 1) = (unsigned long) new_execve – (unsigned long) orig_execve – 5;
return 0;
}
static void hook_stop(void) {
*(unsigned char *) orig_execve = orig_ins;
}
“`
四、
在本文中,我们介绍了如何使用十六进制 hook PID 的方法来实现进程的跟踪和监控。我们了解了 Hook 的基本概念和作用。然后,介绍了 Hook PID 的基本原理和实现方法。我们通过两种常见的 Hook 函数的实现方法,介绍了具体的代码实现过程。
需要注意的是,在实际开发中,我们需要深入了解 Linux 内核的结构和机制,并且不断优化 Hook 代码,以提高 Hook PID 的效率和精确度。同时,由于 Hook 技术往往会被恶意软件所利用,我们也需要注重 Hook 技术的安全性和风险评估。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220你去电脑官方网站查询,有在线电脑免费服务人员帮助你,相信我没错的,采纳我吧,求你了
你的意思是,知道某个进程的PID,然后希望找到该进程执行的程序的路径吧
可以使用这种方法:
ls -l /proc/$PID/exe
上面的$PID就是那个PID,比如慎袭明
$ ls -l /proc/2594/exe
lrwxrwxrwx 1 jason jason 0 Oct 16 17:15 /proc/2594/exe -> /home/jason/download/qterm-0.5.12/build/src/qterm
$ ls -l /proc/2023/exe
lrwxrwxrwx 1 jason jason 0 Oct 16 17:10 /proc/宽告2023/exe -> /bin/bash
后面分别指向禅告的是 home/jason/download/qterm-0.5.12/build/src/qterm 和 /bin/bash
就是该程序的完成路径
#ps aux |grep PID号
记住进程名
#find / -name “进程名”
耐心等待,
可能有几个,我也不确定樱亮,脊茄宽在研究中,呵呵
一般是/usr 或/in 或/纳衫bin 开头的吧
ps aux | grep 你想知道的进程名
top能够看到。
linux hook pid的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux hook pid,探究 Linux 十六进制 hook pid 实现方法,在linux下通过什么命令可以知道相应PID的路径的信息别忘了在本站进行查找喔。
成都创新互联科技公司主营:网站设计、网站建设、小程序制作、成都软件开发、网页设计、微信开发、成都小程序开发、网站制作、网站开发等业务,是专业的成都做小程序公司、成都网站建设公司、成都做网站的公司。创新互联公司集小程序制作创意,网站制作策划,画册、网页、VI设计,网站、软件、微信、小程序开发于一体。
新闻名称:探究Linux十六进制hookpid实现方法(linuxhookpid)
文章转载:http://www.shufengxianlan.com/qtweb/news43/46893.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联