linux function hook笔记(一) - LD_PRELOAD - Blog of Mathias
Blog of Mathias Web Securtiy&Deep Learning
linux function hook笔记(一) - LD_PRELOAD
发表于: | 分类: reverse | 评论:1 | 阅读:745

在广义的linux环境下(这里也部分指android),要怎样进行函数的hook呢?
首先介绍一个叫做ld_preload的环境变量,使用它可以加载一个外部共享库
比如 export ld_preload=/home/xxx.so
这样当前目录下的程序就会自动加载这个共享库。
并且如果有同名函数被调用,在搜寻符号表时,优先调用的是共享库里的函数。
这样就实现了函数的hook,以下列程序为例
我们要hook strcmp函数

#include<stdio.h>
#include<string.h>
int test(void)
{
    char str1[20];
    char str2[20];
    sprintf(str1,"test");
    sprintf(str2,"test");
    if(strcmp(str1,str2)==0)
    {
        printf("equal!");
    }
    else
    {
        printf("hacked!");
    }
    return 0;
}
int main(void)
{
    test();
    return 0;
}

在我们的共享库中写如下代码
int strcmp(char * str1,char * str2)
{
    return 1;
}

用来覆盖strcmp函数,令其为1
在没有加载共享库的情况下,返回0

3.png

接下来加载LD_PRELOAD
使用export LD_PRELOAD="./test.so"
并进行编译
gcc -shared -o test.so test.c

1.png

再次执行target,发现函数已经被我们hook

4.png

但是需要注意的是,这里hook的是其调用的库函数,自身的函数并没有办法通过这种办法进行hook.

只有地板了

  1. [...]http://math1as.com/index.php/archives/345/[...]

添加新评论