您的位置:首页 > 其它

劫持系统调用

2016-01-28 17:28 253 查看
HOOK(劫持) API的思路就是修改原API的入口,使其跳转到我们的假API入口,

然后执行我们的假API函数,为什么说是假API函数呢?

因为我们的假API,除了函数名称和真实API的名称不一样之外,其它都是相同的,即

它们的函数参数和返回值和调用形式都是一样的。

下面举例说明如何hook系统调用或者c语言中的库函数。

#include <stdlib.h>
#include <stdio.h>

void *malloc(size_t size)
{
printf("hooked malloc \n");
return NULL;
}

int main()
{
malloc(1);
return 0;
}以上代码hook了malloc函数,执行的实际上是我们自定义的函数。用nm命令可以看到malloc函数是自定义函数。

nm ./a.out | grep malloc

00000000004004e4 T malloc

如果是glibc的库函数,则会在函数后有glic字样。

nm a.out | grep malloc

                 U malloc@@GLIBC_2.2.5

为什么可以hook库函数呢?因为程序在运行时是动态加载库函数的,malloc在动态库中,所以在查找malloc函数,找到我们自定义的函数后,就会忽略glibc的库函数,最后执行的是自定义函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: