__free_hook 劫持原理
前言
本文学习自Ex师傅的__free_hook 劫持原理, 根据学习情况略有补充和修改
例子
先从一个简单的例子来讲, 下面代码直接队全局变量__free_hook
进行修改
|
编译运行:
➜ work gcc __free_hook.c -o __free_hook |
源码分析
- 源码来自 glibc 2.23, 后面是行号
glibc-2.23/malloc/malloc.c: 1851
void weak_variable (*__free_hook) (void *__ptr, |
这里定义为的__free_hook
定义为全局变量,所以可以直接被修改。再来看看__free_hook
的引用:
void |
上面的代码是free()
函数的一部分,可以看出程序先把全局变量__free_hook
赋给了局部变量hook
,然后对hook
是否为NULL
进行判断,如果不为空,则执行hook
,第一个参数就是chunk
的内容部分。
一般情况下__free_hook
是为NULL
, 因此上述代码是不会执行的, 但是如果恶意修改__free_hook
, 就会造成__free_hook
劫持, 如例子所示
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lantern's 小站!
评论