前言

最近想写deepin编程比赛中的文件管控系统。

如何去监测目标文件, 我思考了很久仍没有头绪,翻了翻开发大赛入围名单, 发现马艺诚同学使用了hook方法来监测进程操作目标文件。于是下午试了试, 确实可行(毕竟人家已经做出来了嘛)。下面讲解一下我下午尝试的read检测功能。

正文

废话不多说, 先贴代码。

#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>typedef ssize_t (*READ)(int, void *buf, size_t count);ssize_t read(int fd, void *buf, size_t count)
{static void *handle = NULL;static READ old_read = NULL;if( !handle ){handle = dlopen("libc.so.6", RTLD_LAZY);old_read = (READ)dlsym(handle, "read");char fdaddr[256];sprintf(fdaddr, "/proc/%d/fd/%d", getpid(), fd);char realaddr[256] = {0};readlink(fdaddr, realaddr, 256);if(strcmp("/home/ciaiy/Desktop/codingspace/fc/test.c", realaddr) == 0){printf("非法侵入\n");}}return old_read(fd, buf, count);
}

代码完成了 对所有的read操作进行监控, 然后查看是否在读取敏感文件。

先介绍hook:

我们采用的Ring3级别的hook, 也就是LD_PRELOAD动态连接.so函数劫持。
Linux的用C库的都是glibc,有一个叫libc.so.6的文件,这是几乎所有Linux下命令的动态链接中, 默认情况下,linux所编译的程序中对标准C函数的链接,都是通过动态链接方式来链接libc.so.6。我们可以通过我们注入的.so来实现函数覆盖劫持之后需要从libc.so.6中取得原本的正常函数,让程序继续正常执行
来源: https://blog.csdn.net/cncnlg/article/details/45892399

大佬对此总结的非常好, 并且很容易懂。 使用了hook技术后, 我们就可以得到进程的pid号(在hook中调用getpid()) 和 fd

而/proc/进程号/fd/ 这个目录下存放的都是以文件描述符为名的链接文件, 指向的是真实文件。

我们通过readlink函数可以得到真实文件路径, 然后进行匹配敏感文件的路径, 如果相同, 则进行提示“非法侵入”(后期会改成对client通信)。

Linux监控文件读写相关推荐

  1. PHP Linux监控文件变化,文件监控与通知机制 audit inotify

    什么是auditThe Linux Audit Subsystem is a system to Collect information regarding events occurring on t ...

  2. linux下文件读写

    linux 下一切皆文件 文件读写 文件的打开open函数 涉及头文件: ubuntu 头文件所在目录:/usr/include/x86_64-linux-gnu/sys #include <s ...

  3. linux 监控文件夹

    2019独角兽企业重金招聘Python工程师标准>>> 出于安全原因,我们需要监控服务器上面的文件修改情况 这里用到一个很有用的工具就是inotifywait 安装命令 $ apt- ...

  4. Linux 监控文件变化

    当我们在界面上修改文件时,可以提示用户是否保存此次修改,并以此来发出其他信号.但是当我们的程序后台运行时,怎样自动的监控某个文件的变化呢? Inotify 以它为关键字,会搜索到大部分你想要了解的,下 ...

  5. 监控linux空间变化,Linux监控文件变化及主动上报实现

    一.说明 最近在做一些主机的自动化检查操作,每次都是定时主动去扫描.这种方式一是实时性不佳,二是扫描时会陡然给中心机很大的压力.后来想有没有一种主机上的配置如果发生变动就能主动上报的机制,如果能主动上 ...

  6. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  7. linux下使用inotify实时监控文件变更,做完整性检查

    完整性检查是HIDS的重要组成部分之一,linux下做完整性检查的思路有3个 1.哈希对比 2.签名校验 3.inotify 方法有2个: A.定期检测,例如通过cron或程序内置计时器 B.实时检测 ...

  8. Linux文件读写机制及优化方式

    本文只讨论Linux下文件的读写机制,不涉及不同读取方式如read,fread,cin等的对比,这些读取方式本质上都是调用系统api read,只是做了不同封装.以下所有测试均使用open, read ...

  9. linux inotify-tools 监控文件变化

    inotify-tools 是一个用C语言库,一个为Linux提供简单inotify接口的命令行程序.这些程序可以用于监视文件系统事件并执行相应操作.这些程序是用C语言来写的,除了需要Linux内核的 ...

最新文章

  1. Java每日一讲讲什么好_撩课-Java每天10道面试题第1天
  2. 长庆石油学校计算机97,我在浙江大学学习计算机技术 ----我在长庆油田会战的12年(十一)...
  3. java程序员可以只用windos吗_程序员要写多少代码 才能开发一个window操作系统
  4. 物联网 — 5G 边缘计算与 IoT
  5. java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
  6. PowerDesigner 企业架构模型 ( EAM ) 说明
  7. 大数据之-Hadoop3.x_MapReduce_序列化案例FlowMapper---大数据之hadoop3.x工作笔记0098
  8. Pluto-基于Caffe的GPU多机多卡深度学习算法产品
  9. System.Windows.Forms.TreeView
  10. C语言程序设计实验报告——实验五
  11. libcurl官方手册
  12. 【3】CH347应用--USB TO JTAG进行FPGA调试下载
  13. phyton 100题(更新中)
  14. mysql 表情符_java+mysql对于表情符的处理
  15. 微型计算机的什么接口主要作为打印机接口,微机接口技术及应用_习题集(含答案)...
  16. 浙江独立学院计算机专业排名2015,2018中国独立学院排行榜发布,浙江这所独立学院独占鳌头!...
  17. Educational Codeforces Round 132 (Rated for Div. 2) 题解(A~D)
  18. 分布式事务解决方案及实现
  19. 【Spark SQL:计算平均分】
  20. Android开发各种Utils收集库

热门文章

  1. 通过SqlCmd执行超大SQL文件
  2. java创建文件和文件夹时报错java.io.FileNotFoundException:XXX (Is a directory)
  3. python生成随机数
  4. 【Nginx】nginx隐藏版本号
  5. 《数字孪生虚拟电厂系统框架设计及其实践展望》——阅读笔记
  6. Tyk在Ubuntu上安装
  7. 数字化的未来,VR全景房产解决方案,引领房地产行业变革!
  8. 解决CSDN修改头像后依旧显示默认猴子头像问题
  9. (146)Verilog编程:8线-3线优先编码器
  10. mysql查球队胜场和败场sql_NBA 史上实力最弱的球队是哪个?用 Python + SQL 我们找到了答案...