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. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

  2. Gradle任务

    Gradle构建脚本描述一个或多个项目.每个项目都由不同的任务组成.任务是构建执行的一项工作.任务可以是编译一些类,将类文件存储到单独的目标文件夹中,创建JAR,生成Javadoc或将一些归档发布到存 ...

  3. C# String类常用操作

    1.string.Compare(s1,s2) 比较  按字母顺序后边的大于前边的 s1<s2 retrun -1 ;s1=s2 return 0; s1>s2 return1. Cons ...

  4. 移动端新建html页面

    这是一些头部设置 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  5. springboot + zipkin(brave-okhttp实现)

    一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipkin server: 2.1.在官网下载服务jar,http://zipkin.io/pages/quickstart.html ...

  6. Android SDK中无法安装HAXM installer

    一.原因: 刚搭建好环境,当我想打开Android Studio 自带的模拟器时,出现如下:       /dev/kvm is not found 二.解决步骤: 1.点击File -- Setti ...

  7. 【颓废篇】Py:从零开始的poj自动提交

    之前学习了一些python的爬虫技术... 已经可以通过python来水blog的阅读量了 你知道的太多了, 然而你看我这个blog惨不忍睹的访问量, 有人吗? 有人吗? 今天突然又双叒叕心血来潮想写 ...

  8. XOR linked list--- 异或链表

    异或链表的结构 这是一个数据结构.利用计算机的的位异或操作(⊕),来降低双向链表的存储需求. ... A B C D E ... –> next –> next –> next –& ...

  9. thymeleaf种处理select,radio和文字回显的问题

    select根据后台集合显示下列列表 <select class="form-control" name="parentId" > <opti ...

  10. on windows in superset sql lab error "module object has no attribute sigalrm"

    改下  utils.py   文件 It works after doing the following change (sorry for the massed up alignment, prob ...