7
12
2011
3

Linux 的简单钩子

注:经过 Google,并没有发现相关的 POSIX 文档,或许这是Linux独有的。

在Windows的游戏外挂开发上,钩子(hook)是一个很常见的技术。这里我们不想讨论钩子是什么意思和在Windows上是如何实现的,只是来简单地学习一下Linux的钩子。

首先来确定一个函数,要一个没有多大危害的,那就先试试 time()。

我们写一个与time同名的函数:

#include <stdio.h>

long time (void *unused)
{
printf ("\nHOOK!!!\n");
return 1234567;
}

这里我们用不着管他到底是什么参数,只要每个参数和原来参数的长度匹配即可。

(PS:最可恶的是将read和write给hook了!!)

好吧,再来写一个测试程序(这个程序很无辜,他不知道time已经被hook了)

#include <stdio.h>
#include <time.h>

int main()
{
long timeval = time(NULL);
printf ("%d", timeval);
return 0;
}

现在就是见证奇迹的时刻

c99 -o hook.so hook.c -fPIC --shared #编译为共享库
c99 -o test test.c
####################
./test
1310443885
####################
LD_PRELOAD=~/hook.so ./time

HOOK!
1234567

无辜的time就这样被……

 

更高级的hook:使用awk或sed在$SHELL + rc文件里面寻找有没有LD_PRELOAD,没有就设置,这样所有的程序都被hook了。。。

Category: | Tags: hook 钩子 linux hook | Read Count: 5849

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Powered by Chito | Hosted at is-Programmer | Theme: Aeros 2.0 by TheBuckmaker.com