Linux 的简单钩子
2016-07-16 23:03
411 查看
、
在Windows的游戏外挂开发上,钩子(hook)是一个很常见的技术。这里我们不想讨论钩子是什么意思和在Windows上是如何实现的,只是来简单地学习一下Linux的钩子。
首先来确定一个函数,要一个没有多大危害的,那就先试试 time()。
我们写一个与time同名的函数:
注意:time()为linux的系统函数
hook.c
----------------------------
#include <stdio.h>
long time(void*unused)
{
printf("\nHOOK!!!\n");
return1234567;
}
----------------------------
这里我们用不着管他到底是什么参数,只要每个参数和原来参数的长度匹配即可。
(PS:最可恶的是将read和write给hook了!!)
好吧,再来写一个测试程序(这个程序很无辜,他不知道time已经被hook了)
test.c
----------------------------
#include <stdio.h>
#include <time.h>
int main()
{
longtimeval =time(NULL);
printf("%d", timeval);
return0;
}
----------------------------
现在就是见证奇迹的时刻
编译
c99 -o hook.so hook.c -fPIC --shared#编译为共享库
c99 -otesttest.c
编译
####################
./test
1310443885
####################
LD_PRELOAD=~/hook.so ./time
HOOK!
1234567
无辜的time就这样被……
更高级的hook:使用awk或sed在$SHELL + rc文件里面寻找有没有LD_PRELOAD,没有就设置,这样所有的程序都被hook了。。。
在Windows的游戏外挂开发上,钩子(hook)是一个很常见的技术。这里我们不想讨论钩子是什么意思和在Windows上是如何实现的,只是来简单地学习一下Linux的钩子。
首先来确定一个函数,要一个没有多大危害的,那就先试试 time()。
我们写一个与time同名的函数:
注意:time()为linux的系统函数
hook.c
----------------------------
#include <stdio.h>
long time(void*unused)
{
printf("\nHOOK!!!\n");
return1234567;
}
----------------------------
这里我们用不着管他到底是什么参数,只要每个参数和原来参数的长度匹配即可。
(PS:最可恶的是将read和write给hook了!!)
好吧,再来写一个测试程序(这个程序很无辜,他不知道time已经被hook了)
test.c
----------------------------
#include <stdio.h>
#include <time.h>
int main()
{
longtimeval =time(NULL);
printf("%d", timeval);
return0;
}
----------------------------
现在就是见证奇迹的时刻
编译
c99 -o hook.so hook.c -fPIC --shared#编译为共享库
c99 -otesttest.c
编译
####################
./test
1310443885
####################
LD_PRELOAD=~/hook.so ./time
HOOK!
1234567
无辜的time就这样被……
更高级的hook:使用awk或sed在$SHELL + rc文件里面寻找有没有LD_PRELOAD,没有就设置,这样所有的程序都被hook了。。。
相关文章推荐
- MySQL OOM 系列一 Linux内存分配
- 嵌入式学习-linux系统-lesson2-内核相关
- Centos 7编译安装 LAMP 环境
- Linux初学(CnetOS Linux7)之基础指令以及快捷键
- CentOS 7 yum 安装 MySQL5.7
- linux从小白到linux资深专家之路
- redhat7 配置163 yum源
- centos下终端分辨率
- 【Linux系统】Ubuntu之虚拟机 ping 通宿主机,宿主机 ping 不通虚拟机
- 企业级开源邮件系统搭建的全过程
- linux运维社区
- Linux下非Root用户解决ImportError: No module named bz2
- Kali linux下拓实N95外置网卡驱动安装教程
- linux 学习
- linux下虚拟机管理
- Linux下如何挂载windows下的共享目录
- linux sudo 命令
- Linux下源码编译hadoop2.6.0
- linux系统 Vim命令合集
- linux 环境变量