喵宅苑 MewoGarden × 技术宅社区II | Z站 Z Station 棒棒哒纯文字二次元技术社区

正文

在广义的

作者:math1as
在广义的linux环境下(这里也部分指android),要怎样进行函数的hook呢? 首先介绍一个叫做ld_preload的环境变量,使用它可以加载一个外部共享库 比如 export ld_preload=/home/xxx.so 这样当前目录下的程序就会自动加载这个共享库。 并且如果有同名函数被调用,在搜寻符号表时,优先调用的是共享库里的函数。 这样就实现了函数的hook,以下列程序为例 我们要hook strcmp函数 [mw_shl_code=c,true] #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; }[/mw_shl_code] 在我们的共享库中写如下代码 [mw_shl_code=c,true] int strcmp(char * str1,char * str2) { return 1; } [/mw_shl_code] 用来覆盖strcmp函数,令其为1 在没有加载共享库的情况下,返回0 接下来加载LD_PRELOAD 使用export LD_PRELOAD="./test.so" 并进行编译 gcc -shared -o test.so test.c 再次执行target,发现函数已经被我们hook 但是需要注意的是,这里hook的是其调用的库函数,自身的函数并没有办法通过这种办法进行hook.

回复

0%
闽ICP备2022013136号闽公网安备35092202000188号
站点地图友情链接:
喵宅苑
喵空间社区程序
喵宅苑 静态版
络合兔
Lanzainc
技术宅
小五四博客
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の日常
魂研社
Nothentai
0xffff
欲望之花
泽泽社长