劫持系统调用
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的库函数,最后执行的是自定义函数。
然后执行我们的假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的库函数,最后执行的是自定义函数。
相关文章推荐
- 设计模式之单例模式
- C#委托
- 路由命令
- 成为Java顶尖程序员 ,看这11本书就够了
- [LeetCode] Patching Array
- Swift基础二
- C#对Oracle存储过程的调用
- 蓝桥杯 - 大小写转换(水题)
- Android动画机制全解析
- Yii判断是否是ajax请求
- 多线程——线程间的同步通信
- Mycat 月分片方法
- 多线程——线程间的同步通信
- Git的使用——基本操作命令
- 在DLL中定义宏ELPP_THREAD_SAFE会导致EasyLogging++初始化死锁的问题
- nginx 配置文件参数说明
- 谈谈自己学IT的感悟吧
- SIFT特征提取分析
- 说外语为何让我们幸运?
- Android滑动冲突