您的位置:首页 > 运维架构 > Linux

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了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: