sys_call_table 这个东西,其实和 Windows 下的 SSDT 表,在功能上完全相同。

前一阵子学Linux驱动,遇到了这个系统调用表,然后我就想到Windows的SSDT表,既然SSDT表都可以HOOK,系统调用表是不是也可以。

然后,就开始HOOK了。

首先,SSDT表,是微软自己导出的,我就在想,Linux是不是也导出了 sys_call_table 呢,一顿上网查。。

结果,确实,2.4以前的版本内核Linux导出了系统调用表,但是到了2.4以后,就不导出了。

然后我就想了第二种方法,Windows内核里面遇到未导出的东西的话,也是可以用的,顶多就是暴利搜索一下呗,Linux下是不是也可以,然后继续一顿上网查,

结果,我的想法是正确的,得到了一段暴力搜索的方法。。。

首先,使用 sidt ,得到idt表,由于Linux陷入内核使用的是 0x80 号中断,所以关键点在这里。

其次,从idt表里面得到 0x80 号中断的响应函数位置,得到了这个位置之后,就好办了。

然后,从0x80号中断响应函数起始位置开始搜索硬编码 \xff\x14\x85 ,搜索前100个字符就可以搜索到它们了

最后,硬编码的位置找到了,这块硬编码的后面紧接着就是系统调用表的地址了

大功告成了,剩下的就不是什么事了,系统调用表内部系统调用的函数索引保存在 include 文件夹里,asm文件夹下,unistd.h 头文件中,这个头文件又分别用宏引入了两个头文件,一个是 unistd_32.h 另一个 unistd_64.h ,其实就是32位和64位版本,64位的不太懂,但是看里面的实现,和32位的相差不大,

(这个include文件夹不是内核源码里面的文件夹,内核源码里面的include/asm里面没有unistd.h,我的内核版本是2.6.29.4,我这里是没有)

根据系统调用表,加上这里得到的信息索引,再用自己准备好的HOOK函数,就可以直接对 sys_call_table 来 HOOK 了,

Windows 下的 SSDT HOOK,我喜欢用原子操作来保存值,而且原子操作很容易,直接一个 interlocedexchange 就可以原子交换两个东西的值,安全、方便、简单、快捷,

Linux下。。。似乎比较麻烦。我知道的,也就 atomic 原子操作,还得定义个 atomic_t 变量,麻烦得要死,

所以。。。索性就直接赋值操作就好了,虽然可能编译器要把一句赋值拆成两句指令,但是方便一点。

这样就实现了 HOOK sys_call_table 。

其实 HOOK 危险性高,不安全,稳定性差,站在个人的角度上来说,我是很讨厌HOOK操作的,

但是,不HOOK还能怎么搞,Windows还可以下回掉,Linux有这功能么,可能我学得少,不知道。

sys_call_table HOOK的更多相关文章

  1. Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux

    目录 . sys_call_table:系统调用表 . 内核符号导出表:Kernel-Symbol-Table . Linux 32bit.64bit环境下系统调用入口的异同 . Linux 32bi ...

  2. Linux sys_call_table变动检测

    catalogue . 引言 . 内核ko timer定时器,检测sys_call_table adress变动 . 通过/dev/kmem获取IDT adress . 比较原始的系统调用地址和当前内 ...

  3. Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux【转】

    转自:http://www.cnblogs.com/LittleHann/p/4127096.html 目录 1. sys_call_table:系统调用表 2. 内核符号导出表:Kernel-Sym ...

  4. Hook android系统调用的实践

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/71037182 一.环境条件 Ubuntukylin 14.04.5 x64bit ...

  5. Hook android系统调用研究(一)

    本文的博客链接:http://blog.csdn.net/qq1084283172/article/details/55657300 一.Android内核源码的编译环境 系统环境:Ubuntu 14 ...

  6. hook Android系统调用的乐趣和好处

    翻译:myswsun 0x00 前言 Android的内核是逆向工程师的好伙伴.虽然常规的Android应用被限制和沙盒化,逆向工程师可以按自己希望自定义和改变操作系统和内核中行为.这给了你不可多得的 ...

  7. svnserver hook python

    在使用中可能会遇到的错误排除 :1.Error: svn: 解析"D:\www\test"出错,或svn: E020024: Error resolving case of 'D: ...

  8. Android Hook技术

    原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...

  9. Frida HOOK微信实现骰子作弊

    由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...

随机推荐

  1. delphi基础篇之数据类型之三:3.结构类型(Struct)

    3.结构类型(Struct) 结构类型在内存中存储一组相关的数据项,而不是像简单数据类型那样单一的数值.结构数据类型包括:集合类型.数组类型.记录类型.文件类型.类类型.类引用类型和接口类型等.

  2. RQNOJ PID4 数列

    题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...

  3. CTF杂项思路工具分享————2019/5/30

    分享碰到的一些奇奇怪怪的杂项解题方式: 键盘坐标密码: 题目给出一段字符串:11 21 31 18 27 33 34 对照上面的表格,就可以很清晰的看出来密文为:QAZIJCV 猪圈码: 题目为: 一 ...

  4. CUDA编程入门笔记

    1.线程块(block)是独立执行的,在执行的过程中线程块之间互不干扰,因此它们的执行顺序是随机的 2.同一线程块中的线程可以通过访问共享内存(shared memory)或者通过同步函数__sync ...

  5. 新建pc端页面的模板

    pc端页面,要做兼容.新建pc端模板时,先要初始化浏览器的样式,我命名为reset.css @charset "utf-8"; /* 取消链接高亮 */ body,div,ul,l ...

  6. string中的stringstream

    博客: 加速:ios::sync_with_stdio(false); 举个例子: 題目:输入的第一行有一个数字 N 代表接下來有 N 行资料,每一行资料里有不固定个数的整数(最多20个,每行最大20 ...

  7. 集成 Swagger2 构建强大的 RESTful API 文档

    微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoo ...

  8. 基于角色访问控制的OA系统的设计与实现

    摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...

  9. ASP.NET Core 2.0发布/部署到Ubuntu服务器并配置Nginx反向代理

    原文链接https://www.linuxidc.com/Linux/2017-12/149557.htm ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用AS ...

  10. position:relative/static/fixed/absolute定位的区别以及使用场景

    absolute是相对于自己最近的父元素来定位的,relative是相对于自己来定位的 relative 不脱离文档流,absolute 脱离文档流.也就是说:relative 的元素尽管表面上看到它 ...