Linux Hook技术实践

Linux Hook技术实践LInuxHook技术实践什么是hook简单的说就是别人本来是执行libA.so里面的函数的,结果现在被偷偷换成了执行你的libB.so里面的代码,是一种替换。为什么hook恶意代码注入调用常用库函数时打log改变常用库函数的行为,个性化怎么hook这个东西在win里面有现成的api,但是在linux里面却要主动修改ELF文件,或者修改动态库链接路径。我看网上写的好多挺麻烦的,而且还要调用

大家好,又见面了,我是你们的朋友全栈君。

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的作用。当然这种用法是很少的,但也确实是骚操作。。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141655.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月25日 下午12:20
下一篇 2022年5月25日 下午12:20


相关推荐

  • 哈佛幸福课笔记[通俗易懂]

    哈佛幸福课笔记[通俗易懂]第一课什么是积极心理学1、快乐由精神状态决定,而不是社会地位和银行存款2、成功的两个因素:相信自己、保持好奇不断学习第二课为什么要学习积极心理学1、你所问的问题决定了你的感受,当一个人总是问自己:我的弱点是什么?我如何做的更好?他会忽略自己的优点,认为优点是不存在的2、从专注缺点到专注优点3、做一个行动者,行动可以增加自信,而不是一个被动者抱怨者第三课幸福是一…

    2022年7月25日
    15
  • RNAseq数据作图_做RNAseq结果不稳定

    RNAseq数据作图_做RNAseq结果不稳定在RNA-seq项目中,常见的结果包括:火山图、韦恩图、聚类热图、log2(ratios)折线图、有向无环图、散点图、代谢通路图、蛋白互作图等。今天我们先来一起学习火山图、韦恩图、聚类热图和折线图的解读。1、火山图RNA-seq中,火山图(VolcanoPlot)显示了两个重要的指标:foldchange和校正后的pvalue,利用T检验分析出两样本间显著差异表达的基因后,以log2(f…

    2022年10月20日
    4
  • 树莓派操作系统

    树莓派操作系统树莓派操作系统,适用于树莓派的各种操作系统,树莓派4的操作系统列表,这些系统应该也能用于树莓派3、3B+和其他变种,但是请参照项目的官方网站了解详细信息。

    2022年5月22日
    47
  • 腾讯宣布其自研大模型“混元”将发力全模态领域

    腾讯宣布其自研大模型“混元”将发力全模态领域

    2026年3月13日
    2
  • (一)JMeter性能测试,完整入门篇:性能测试操作步骤

    (一)JMeter性能测试,完整入门篇:性能测试操作步骤原文转自 https blog csdn net lovesoo article details Jmeter 简介 ApacheJMeter 是一款纯 java 编写负载功能测试和性能测试开源工具软件 相比 Loadrunner 而言 JMeter 小巧轻便且免费 逐渐成为了主流的性能测试工具 是每个测试人员都必须要掌握的工具之一 本文为 JMeter 性能测试完整入门篇 从 Jmeter 下载安装到编写一个完整性能测试脚本 最终执行性能测试并分析性能测试结果 运行环境为 Windows

    2026年3月17日
    3
  • Error: org.apache.axis2.AxisFault at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at 的原因

    Error: org.apache.axis2.AxisFault at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at 的原因Error:org.apache.axis2.AxisFaultatorg.apache.axis2.AxisFault.makeFault(AxisFault.java:430)atorg.apache.axis2.description.AxisService.createService(AxisService.java:2504)atorg.apache.axis2.des

    2025年9月5日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号