sys_call_table HOOK
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的更多相关文章
- 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 ...
- Linux sys_call_table变动检测
catalogue . 引言 . 内核ko timer定时器,检测sys_call_table adress变动 . 通过/dev/kmem获取IDT adress . 比较原始的系统调用地址和当前内 ...
- 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 ...
- Hook android系统调用的实践
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/71037182 一.环境条件 Ubuntukylin 14.04.5 x64bit ...
- Hook android系统调用研究(一)
本文的博客链接:http://blog.csdn.net/qq1084283172/article/details/55657300 一.Android内核源码的编译环境 系统环境:Ubuntu 14 ...
- hook Android系统调用的乐趣和好处
翻译:myswsun 0x00 前言 Android的内核是逆向工程师的好伙伴.虽然常规的Android应用被限制和沙盒化,逆向工程师可以按自己希望自定义和改变操作系统和内核中行为.这给了你不可多得的 ...
- svnserver hook python
在使用中可能会遇到的错误排除 :1.Error: svn: 解析"D:\www\test"出错,或svn: E020024: Error resolving case of 'D: ...
- Android Hook技术
原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...
- Frida HOOK微信实现骰子作弊
由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...
随机推荐
- Tomcat运行错误示例
tomcat运行错误示例 当出现这种错误时,如果是自己配置的tomcat,需要找/conf/server.xml文件. 如果是使用的eclipse tomcat 插件,需要在你的工作空间 找到 如下文 ...
- 2.5 webpack 进阶
配置分离 code splitting 异步加载 理解 webpack chunk webpack 调试 2.5.1 配置分离 在大型项目中,可能 webpack.config.js 会变得越来越臃肿 ...
- Linux初始化的汇编代码
1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局. 1: /* 2: * setup.ld 3: * 4: * Linker script ...
- MS Sql添加描述信息 及其他信息
--查询某个表的描述 SELECT * FROM fn_listextendedproperty (NULL, 'user', 'dbo', 'table', '(表名)',NULL, NULL) - ...
- TFS发布的时候出现 ENOENT: no such file or directory, stat 'E:\vsts-agent\_work\r57\a\KingEagle-Mysql-Dev\drop\12917.zip' 解决方案
出现 ENOENT: no such file or directory, stat 'E:\vsts-agent\_work\r57\a\KingEagle-Mysql-Dev\drop\12917 ...
- Django添加生产环境配置
在初始化阶段,Django会帮我们创建一个settings.py目录,所有Django的配置都在这个模块中,这样就会产生一些问题,比如同一份配置怎么来更好的区分开发环境和线上环境.当然可以在setti ...
- rsync+inotify同步备份文件
前言 rsync作用:man rsync可以看到解释为a fast, versatile, remote (and local) file-copying tool,主要进行文件的同步. inotif ...
- Quick BI 支持多种数据源进行多维分析
一.摘要 随着互联网的高速发展,数据量爆发式增长的同时,数据的存储形式也开始呈现出多样性,有结构化存储,如 Mysql, Oracle, SQLServer 等,半结构化甚至非结构化存储,如HBase ...
- 回文树上dfs——牛客多校第六场C
/* set里的一定是本质不同的回文串,所以先建立回文树 当a可以通过nxt指针到达b,或者b可以通过fail指针到达a时,a就是b的子串 对于回文树里的每个结点u,我们可以将和其有关的结点为两部分: ...
- Python 让输入的密码不在屏幕上显示
使用getpass模块 #!/usr/bin/env python import getpass username = raw_input("username:") passwor ...