免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1149 | 回复: 6
打印 上一主题 下一主题

[其他] openat函数系统劫持 [复制链接]

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-13 14:58 |只看该作者 |倒序浏览
openat函数系统劫持,通过cat /boot/System-map-3.8.13 | grep 查看sys_call_table 和sys_openat地址。劫持后函数做些操作,再调用原来函数。结果发现系统的sys_openat函数定义是四个。我调用需要传入7个!!!

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
2 [报告]
发表于 2016-04-13 14:59 |只看该作者
本帖最后由 我爱你我的菜 于 2016-04-13 15:02 编辑

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>        // current, struct task_struct
#include <linux/slab.h>         // kmalloc, kfree
#include <linux/fs.h>           // SEEK_CUR, SEEK_SET, SEEK_END
#include <linux/stat.h>
#include <linux/fdtable.h>      // struct fdtable, struct files_fdtable
#include <linux/fs_struct.h>    // struct fs_struct, current->fs
#include <linux/file.h>         // struct file, fget,fput
#include <linux/dirent.h>       // struct linux_dirent64
#include <linux/syscalls.h>
#include <linux/kallsyms.h>     // kallsyms_lookup_name
#include <asm/uaccess.h>        // copy_*_user, VERIFY_WRITE, VERIFY_READ
#include <linux/socket.h>

MODULE_LICENSE("GPL");

static unsigned orig_cr0 = 0;

static void clear_cr0(void)
{
    unsigned int cr0 = 0;

    asm volatile("movl %%cr0, %%eax"
        :"=a"(cr0));
   
    orig_cr0 = cr0;
    cr0 &= 0xfffeffff;

    asm volatile ("movl %%eax, %%cr0"
        :
        :"a"(cr0));
}

static void reset_cr0(void)
{
    asm volatile ("movl %%eax, %%cr0"
        :
        :"a"(orig_cr0));
}

static unsigned long**orig_sys_call_table = (unsigned long**)0xc1623060;



static int zf_hook_sys_openat(int index, int allmode, char *allptr, //
    int dfd, const char __user *filename, int flags, umode_t mode)
{
    printk("%s,%d => %d:%d:%p = %d,%s,%08x,%04o\n",
        __FUNCTION__, __LINE__, index, allmode, allptr, dfd, filename, flags, mode);

    return orig_sys_openat(/*index, allmode, allptr,*/ dfd, filename, flags, mode); //这里需要传入4个参数(系统调用头文件里是4个,传入四个劫持不成功),所以zf_hook_sys_openat也为7个参数
}

static int __init zf_kernel_hook_open_init(void)
{
    int fd = 0;
    char name[128];
    mm_segment_t old_fs;
   
    /////////////////////////////////////////////////////////////////
    // 钩子操作
   
    clear_cr0();
   
    orig_sys_openat = (unsigned long*)(orig_sys_call_table[295]);
    orig_sys_call_table[295] = (unsigned long*)zf_hook_sys_openat;
   
    printk("%s,%d => %p 2 %p\n", __FUNCTION__, __LINE__, orig_sys_openat, zf_hook_sys_openat);


    reset_cr0();
   
    return 0;
}

static void __exit zf_kernel_hook_open_cleanup(void)
{
    clear_cr0();
   
    orig_sys_call_table[295] = (void *)orig_sys_openat;
    orig_sys_call_table[5] = (void *)orig_sys_open;
    orig_sys_call_table[39] = (void *)orig_sys_mkdir;
   
    reset_cr0();

    printk("%s,%d => removed\n", __FUNCTION__, __LINE__);
}

module_init(zf_kernel_hook_open_init);
module_exit(zf_kernel_hook_open_cleanup);

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
3 [报告]
发表于 2016-04-13 15:04 |只看该作者
这个是include/linux/syscalls.h里函数声明:asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
                           umode_t mode);

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
4 [报告]
发表于 2016-04-13 15:04 |只看该作者

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
5 [报告]
发表于 2016-04-13 16:53 |只看该作者
各位解决了,谢谢

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2016-04-13 22:43 |只看该作者
回复 5# 我爱你我的菜


欢迎分享原因。

   

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
7 [报告]
发表于 2016-04-14 10:22 |只看该作者
回复 6# Godbach

内核中声明的函数加了asmlinkage,而用户自己通过地址定义的函数那没加,所以有冲突,具体原因没深究


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP