如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用

为了解决这个问题,最终实现了两种解决方式:

1.Linux系统调用劫持

2.Kprobes内核调试技术(并非真正的修改)

下面分别说下:

Linux系统调用劫持:

其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80的软中断,然后转到了系统调用处理程序的入口system_call()。system_call()会检查系统调用号来得出到底是调用哪种服务,然后会根据内核符号表跳转到所需要调用的内核函数的入口地址,所以,如果我们这个时候修改了内核符号表,使其跳转到我们自己的函数上,就可以完成劫持。

不过2.6之后,内核符号表便不再导出了,所以需要我们在内存中找到它的位置。具体查找的方式为:查找到中断向量表中的0x80中断服务函数的位置,然后在这个中断服务函数代码中查找根据内核符号表跳转的指令,从指令中可以分析出内核符号表的位置。

下面的是一个简单的劫持mkdir系统调用的测试,通过加载hook.ko内核模块,劫持mkdir系统调用,然后使用mkdir命令创建一个目录,来测试是否截齿成功。如果成功的话会输出“PID xxx called sys mkdir ! By qiankun”。结果测试成功。下面是经过。

kprobes内核调试技术

首先声明两点:

1.这种方式其实并非修改,而是只是在运行的内核中动态的插入探测点,当内核运行到该探测点后可以执行用户预定义的回调函数。执行完毕后返回正常的执行流程。所以说他其实并非真正的修改了原有的系统调用。但是可以达到一定类似于修改了的效果,暂且算作一种“伪修改”吧。

2.我在测试的时候使用的是kprobes中的jprobe探测方式,其实其他的内核调试技术比如systemtap等应该能够实现这种功能,但是我就不一一实现了。

Kprobes是一个轻量级的内核调试工具,利用kprobes技术可以再运行的内核中动态的插入探测点,在探测点进行用户预定义的操作。

Kprobes使用主要可以分为三部分:

1.注册探测点部分。

2.调试处理部分。

3.注销探测点部分。

下面是使用kprobes中jprobe探测方式,对sys_open和sys_write进行添加探测点。这样可以一定程度上影响sys_open和sys_write的最后结果,达到类似修改的目的。下面是测试过程,可以看到,每当内核调用sys_write和sys_open的时候,都会先调用我们的探测函数。

代码如下:

来自为知笔记(Wiz)

附件列表

转载于:https://www.cnblogs.com/dchipnau/p/5043575.html

内核调试和系统调用劫持相关推荐

  1. linux swi 内核sp,应用调试(四)系统调用SWI

    title: 应用调试(四)系统调用SWI date: 2019/01/19 18:05:39 toc: true 应用调试(四)系统调用SWI 系统调用 我们App中的open,read等实际上会触 ...

  2. Linux内核调试 - 一般人儿我都不告诉他(一)【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/04/14/2396821.html 悄悄地进入Linux内核调试(一) 本文基址:http://blo ...

  3. linux内核调试技术 kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...

  4. 应用调试(四)系统调用SWI

    目录 应用调试(四)系统调用SWI 系统调用 SWI代码片段分析 分析sys_write 构造sys_hello 应用程序调用SWI 嵌入汇编语法 测试APP 参考 title: 应用调试(四)系统调 ...

  5. 跟踪分析Linux内核5.0系统调用处理过程

    跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...

  6. Linux内核调试原理和工具介绍--理解静态插装/动态插装、tracepoint、ftrace、kprobe、SystemTap、Perf、eBPF

    可以将linux跟踪系统分成Tracer(跟踪数据来自哪里),数据收集分析(如"ftrace")和跟踪前端(更方便的用户态工具). 1. 数据源(Tracers) printk 是 ...

  7. Linux内核深入理解系统调用(1):初始化-入口-处理-退出

    Linux内核深入理解系统调用(1):初始化-入口-处理-退出 rtoax 2021年3月 1. Linux 内核系统调用简介 这次提交为 linux内核解密 添加一个新的章节,从标题就可以知道, 这 ...

  8. 网页端对接linux发起cc,(cc)实现Linux系统调用劫持

    关于系统调用劫持 如果一个木马要隐藏起来,不被系统管理员发现.截获系统调用似乎是必须的.大部分情况下,通过修改系统调用表来实现系统调用的劫持.下面是一个典型的截获系统调用的模块: 模块一: #incl ...

  9. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

最新文章

  1. VC小技巧(三)视图
  2. mysql导出二进制日志_使用mysqlbinlog提取二进制日志
  3. python matplotlib画图遇到的问题——标题重叠问题
  4. MyBatis的总结(下)
  5. 阿里电商架构演变之路(二)
  6. VS 2008的JavaScript代码提示功能 (学习老赵视频的笔记)
  7. [Other] Inno Setup 使用心德-一个完整的项目 包括.NET组建捆绑 去空格等
  8. WhatsApp网页版扫码分析
  9. Impala SQL语句 COMPUTE STATS
  10. 公共关系与人际交往能力
  11. 有没有发现不会写简历,感觉什么都不会?其实写简历也是一种艺术。
  12. CVPR2019| 中科院VIPL实验室11篇CVPR解读:弱监督学习、视频分割、目标检测
  13. Springboot项目整合xxl -job
  14. php mtrand 范围,PHP mt_rand()函数
  15. web 前端判断身份证号码是否有效
  16. 如何把Kotlin代码转成Java代码、把Java代码转成Kotlin代码
  17. 打篮球与企业管理有相似之处吗?
  18. 《生物信息学:导论与方法》----变异的功能预测----听课笔记(十一)
  19. 百度ERNIE-Gram: Pre-Training with Explicitly N-Gram Masked Language Modeling
  20. 解决 ImportError: No module named 'serial' 问题

热门文章

  1. CTFshow 信息收集 web15
  2. Job_search_collection
  3. Maximum Depth of Binary Tree
  4. 证明连通简单图是哈密顿图
  5. img文件解包工具_使用tar归档命令,就不怕文件多!
  6. 第二十讲 拉普拉斯变换求解线性ODE
  7. 欧拉(线性)筛 Miller_Rabin 测试素数
  8. 常见的HTML元素及常见检查点
  9. 修改Centos7的网卡ens32 改为eth0
  10. EUI库 - EXML