Linux Hook技术实践

2023-05-16

LInux Hook技术实践

什么是hook

简单的说就是别人本来是执行libA.so里面的函数的,结果现在被偷偷换成了执行你的libB.so里面的代码,是一种替换。

为什么hook

  1. 恶意代码注入
  2. 调用常用库函数时打log
  3. 改变常用库函数的行为,个性化

怎么hook

这个东西在win里面有现成的api,但是在linux里面却要主动修改ELF文件,或者修改动态库链接路径。我看网上写的好多挺麻烦的,而且还要调用各种修改ELF的API。。。。所以这里提供一种简单的方法来hook

下面直接demo吧

/*myselect.c*/
#define _GNU_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/time.h>
typedef int (*selectType)(int __nfds, fd_set *__restrict __readfds,
            fd_set *__restrict __writefds,
            fd_set *__restrict __exceptfds,
             struct timeval *__restrict __timeout);
int select(int maxfdp1,fd_set* readset,fd_set* writeset,fd_set* exceptset, struct timeval*timeout)
{
    printf("in modified select\n");
    selectType ori_select = (selectType)dlsym(RTLD_NEXT,"select");
    return ori_select(maxfdp1,readset,writeset,exceptset,timeout);
}          

这个代码的逻辑很简单,就是重写一个select,然后打包成库,让程序运行时优先加载这个库,这样程序运行时先在这个库中找到select函数后,就不会再加载原始的select函数。但是多数时候我们并不是要完全改变 原函数的行为 或许只是做一些小的修改,或许只是打一些log。这样我们若能在新函数里面执行以前的旧函数就好了,所以我们拿到原函数的入口地址,并在新函数中调用旧函数。这里可以用dlsym(RTLD_NEXT, functionName ).它返回functionName指示的原始库函数的指针。但是要想RTLD_NEXT这个宏有效,还必须在文件的开头加 #define _GNU_SOURCE。这样我们的代码就完成了

生成库

gcc myselect.c -fPIC -shared -o libmyselect.so

假设程序A调用过select这个函数,以前的启动参数是./A,,这个样子的话,系统会去找原始的链接库。若是变成这样启动LD_PRELOAD = ./libmyselect.so ./A

那A运行时就是调用我们写的select函数。。

对,你可以把一些常用的系统调用改成恶意代码,比如write这样的系统调用,然后注入到别人的程序中,然后别人的程序就被你倾入了,当然前提是你修改了别人的程序的链接路径。。
还有一些比较少用的用法,在某些情况下,一些特定线程的系统调用不应占过多的资源,我们可以通过这个方法让之变得高效,这个说法可能比较古怪。举个例子:
某些系统上select的实现可能与众不同,在没有fd就绪时,并不阻塞,而是忙等,这时便可以通过hook技术,在select中插入usleep,达到释放cpu的作用。当然这种用法是很少的,但也确实是骚操作。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Hook技术实践 的相关文章

随机推荐

  • WIN10 anaconda 安装 tensorflow-gpu不出错的最佳解决办法(不在系统安装CUDA)

    来源 xff1a https www pugetsystems com labs hpc The Best Way to Install TensorFlow with GPU Support on Windows 10 Without I
  • PostgreSQL教程

    一 PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库 底层基于C实现 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的 BDS协议 xff0c 这个协议基本和MIT开源协议一样 xff
  • you-get的安装与使用

    youget简介 you get是github上python的一个开源库 https github com soimort you get xff0c 使用you get你只需要取得视频所在网页链接地址就可以很轻松的下载下来 xff0c 目
  • VS Code搭建PYQT5环境并创建Helloworld实例

    使用Python pip安装PyQt5和PyQt5 tool pip install PyQt5 pip install PyQt5 tools 在VS code中安装插件PYQT Integration 配置PYQT Integratio
  • ubuntu Xrdp远程连接Authentication is required to create a color managed device

    问题 Gnome Bug xff1a 无法点击 永不消逝的授权对话框 解决 xff1a https blog csdn net wu weijie article details 108481456
  • Linux运维入门~21.系统磁盘管理,解决u盘连接电脑无反应,解决卸载u盘正忙问题

    本节我们来了解一下linux系统的磁盘管理 识别设备常用命令有 xff1a fdisk l 查看真实存在的设备 cat proc partition 系统识别的设备 blkid 系统可使用的设备 df 系统正在挂载的设备 du 查看磁盘容量
  • 快速幂取模:求 a^b % N(C++)

    在某些情况下 xff0c 我们需要求模 N 情况下某个数的多次幂 xff0c 例如 xff1a 求多次幂结果的最后几位数 RSA算法的加解密 如果底数或者指数很大 xff0c 直接求幂再取模很容易会出现数据溢出的情况 xff0c 产生错误的
  • 新手教程:手把手教你使用Powershell批量修改文件名

    适合完全没用过 xff0c 没了解过powershell的人 1 打开Windows Powershell ISE 在任务栏搜索框中输入ISE xff0c 然后打开 xff08 我的任务栏放在右边了 xff0c 所以是这个样子 xff09
  • Mac OS 开机密码重置

    通过 Mac OS 恢复功能启动 Apple 芯片 xff1a 将 Mac 开机并继续按住电源按钮 xff0c 直至看到启动选项窗口 选择标有 选项 字样的齿轮图标 xff0c 然后点按 继续 Intel 处理器 xff1a 将 Mac 开
  • 表达式求值:从“加减”到“带括号的加减乘除”的实践过程

    本文乃Siliphen原创 xff0c 转载请注明出处 xff1a http blog csdn net stevenkylelee 为什么想做一个表达式求值的程序 最近有一个需求 xff0c 策划想设置游戏关卡的某些数值 xff0c 这个
  • Linux中source命令,在Android build 中的应用

    source命令 xff1a source命令也称为 点命令 xff0c 也就是一个点符号 xff08 xff09 source命令通常用于重新执行刚修改的初始化文件 xff0c 使之立即生效 xff0c 而不必注销并重新登录 用法 xff
  • Edge 错误代码: STATUS_ACCESS_DENIED 解决方案

    1 到C盘Edge的文件全部删掉 2 到电脑管家的软件管理重新下载Edge 或者 去官网下载 3 再次打开Edge xff0c 功能都回来了 注 xff1a 该解决方案源自于edge吧的四川男篮大佬
  • centos7.9离线安装mysql5.7

    前言 windows server2003服务器 xff0c 安装mysql提示需要net framework xff0c 费了半天劲装好了 xff0c 发现解压版redis无法启动 xff0c 换了个低版本也是无法安装 xff0c 服务器
  • vs2019-slicer编译问题记录

    3D Slicer编译过程问题记录 官网教程 xff1a https slicer readthedocs io en latest developer guide build instructions windows html 环境 CM
  • sudo npm command not found 问题解决

    这种情况通常是使用 npm 命令可以正常使用 xff0c 但使用sudo npm 命令便会报 command not found 这是什么原因呢 xff1f 输入which npm可以得到 usr local bin npm xff0c 这
  • (POJ1201)Intervals <差分约束系统-区间约束>

    Intervals Description You are given n closed integer intervals ai bi and n integers c1 cn Write a program that reads the
  • 【sv与c】sv与c交互

    网上此类文章很多 xff0c 这里暂时不放具体实现和测试结果 xff0c 后续持续更新 下面引用一些帖子 xff0c 帖子中涉及到具体做法 vcs联合编译v sv c 43 43 代码 sxlwzl的专栏 CSDN博客 1 xff0c 假设
  • stm32f103c8t6最小系统

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言stm32f103c8t6构成二 xff1a 电源电路稳压模块注意 复位电路NRST 时钟电路程序下载电路JTAGSWD 启
  • udp中的connect()&bind()

    connect amp bind 的作用 udp udp connect span class hljs preprocessor include lt sys types h gt span span class hljs preproc
  • Linux Hook技术实践

    LInux Hook技术实践 什么是hook 简单的说就是别人本来是执行libA so里面的函数的 xff0c 结果现在被偷偷换成了执行你的libB so里面的代码 xff0c 是一种替换 为什么hook 恶意代码注入调用常用库函数时打lo