首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux Hook 笔记

相信很多人对"Hook"都不会陌生,其中文翻译为"钩子”.在编程中, 钩子表示一个可以允许编程者插入自定义程序的地方,通常是打包好的程序中提供的接口....通过Hook,我们可以暂停系统调用,或者通过改变系统调用的参数来改变正常的输出结果, 甚至可以中止一个当前运行中的进程并且将控制权转移到自己手上....$hello表示字符串"Hello"的地址; 32位Linux系统通过0x80中断来进行系统调用....更多关于32位和64位汇编指令的区别可以参考stack overflow的总结, 因为我当前环境是64位Linux,所以下文的操作都以64位系统为例....这里注入的代码长度只有8个字节, 而且是用shellcode的格式注入, 但实际中我们可以在目标进程中动态加载库文件(.so), 包括标准库文件(如libc.so)和我们自己编译的库文件, 从而可以通过传递函数地址和参数来进行复杂的注入

2.7K60

Linux Hook技术实践

LInux Hook技术实践 什么是hook 简单的说就是别人本来是执行libA.so里面的函数的,结果现在被偷偷换成了执行你的libB.so里面的代码,是一种替换。...为什么hook 恶意代码注入 调用常用库函数时打log 改变常用库函数的行为,个性化 怎么hook 这个东西在win里面有现成的api,但是在linux里面却要主动修改ELF文件,或者修改动态库链接路径...这样我们的代码就完成了 生成库 gcc myselect.c -fPIC -shared -o libmyselect.so 假设程序A调用过select这个函数,以前的启动参数是..../libmyselect.so ./A 那A运行时就是调用我们写的select函数。。...举个例子: 某些系统上select的实现可能与众不同,在没有fd就绪时,并不阻塞,而是忙等,这时便可以通过hook技术,在select中插入usleep,达到释放cpu的作用。

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

linux 什么是SO文件

下面的内容大多都是连接中的,穿插我自己的笔记 牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识。 1.so文件是什么?...———————————————————————- 链接:得到输出文件libs.so gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc...这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。   ...在Linux中,应用程序通过使用soname,来指定所希望库的版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容的,这使得程序员摆脱了共享库版本冲突问题的困扰。...下面的还没细看,汗 4.库的初始化,解析: windows下的动态库加载,卸载都会有初始化函数以及卸载函数来完成库的初始化以及资源回收,linux当然也可以实现。

5.5K20

【胖虎的逆向之路】——GOTPLT Hook详解&针对自定义so库的Hook实操

层的Hook,熟悉了ELF的文件结构&GOT/PLT&In Line Hook的相关知识和实际操作,Android Native Hook 的实现方式有很多种,我们接下来要讲的是 GOT/PLT Hook...没关系,我也是,先了解大概意思,慢慢往下走~ 运行命令: arm-linux-androideabi-readelf -S xxx.so 2.2、 ELF中程序头表是什么北北呢?...-r xxx.so ---- 三、PLT与GOT Hook(Native,你们的Hook回来了~) 呼,喝杯水~ 在前面的装载->动态链接->重定位完成之后,我们目标动态库的基址已经确定了,在当我们调用某个函数...: aarch64-linux-android-objdump.exe -D xx.so 这里会看到我们自己的curl_a_website 函数通过BLX(相对寻址)指令走到curl_a_website...运行命令: arm-linux-androideabi-readelf -r xxx.so 其中,我们可以看到 curl_a_website 的偏移是 0x3070 ,那么得到了偏移值,基址怎么确定呢

68241

Linux内核跟踪:ftrace hook入门手册(下)

一、前情提要 在前一篇文章《Linux内核跟踪:ftrace hook入门手册(上)》中,我们对部分ftrace hook经典方案中的实现细节进行了优化。本文会深入说明这些优化的原理和目的。...二、内核版本的差异 目前的ftrace hook实现中,总是需要使用大量条件编译以解决Linux内核的版本差异问题。...其中较为关键的一个差异点,就是Linux内核从4.17版本开始修改了系统调用过程中的函数签名,这对ftrace hook的实现造成了较大的困扰。...[nr]: 图2:Linux内核4.17版本do_syscall_64函数实现 而如前一篇文章所述,ftrace hook是通过编译时处理,在各个内核函数实现代码的开头插桩call指令,所以ftrace...hook子程可以直接定义与系统调用函数相同的形式参数来获取系统调用参数值,而返回时也会直接返回到系统调用函数的直接调用方(参考下图[3]): 图5:经典方案中的hook执行流程 然而,由于Linux

1.7K20

linuxso注入与热更新原理

简介 之前写了个hookso的工具,用来操作linux进程的动态链接库行为,本文从so注入与热更新入手,简单讲解一下其中的原理,配合源码阅读效果更佳。...这里要介绍一下linux的ptrace函数。...函数查找 我们知道,linux的可执行文件是elf文件格式,动态链接库其实也是elf格式。关于elf,有很多资料,这里简单讲一下elf结构。...(实际上linux各种运行时库的版本也很难受) 为什么不做成机器码直接jmp就好了? 机器码里直接jmp,但是事先不知道目标地址,所以只能填空,这样又不好与正常代码区分。...通过查阅资料可知,linux amd64调用函数,用到的寄存器及含义如下: rdi:参数1 rsi:参数2 rdx:参数3 rcx:参数4 r8:参数5 r9:参数6 rax:函数地址 rbp:栈底地址

10.4K50

React Hook 和 Vue Hook

而 「Hook」模式带来的好处: 暴露给模板的属性具有明确的来源,因为它们是从 Hook 函数返回的值。 Hook 函数返回的值可以任意命名,因此不会发生名称空间冲突。...二、React Hook 和 Vue Hook 对比 其实 React Hook 的限制非常多: 不要在循环,条件或嵌套函数中调用 Hook 确保总是在你的 React 函数的最顶层调用他们。...与 React Hook 不同,setup 函数仅被调用一次,这在性能上比较占优。 对调用顺序没什么要求,每次渲染中不会反复调用 Hook 函数,产生的的 GC 压力较小。...React Hook 里的「依赖」是需要你去手动声明的。...React Hook解决过时闭包问题的方法: 解决过时闭包的一个有效方法是正确设置 React Hook 的依赖项。 对于过时的状态,使用函数方式更新状态。

2K20

Linux HIDS agent 概要和用户态 HOOK(一)

作者:u2400@知道创宇404实验室 时间:2019年12月19日 前言:最近在实现linux的HIDS agent, 搜索资料时发现虽然资料不少, 但是每一篇文章都各自有侧重点, 少有循序渐进,..., 不同的内核版本间均可能产生兼容性问题, hook出现严重的错误时可能导致kenrel panic, 相对的无法从原理上被绕过 首先从简单的应用级hook说起 HIDS应用级hook 劫持libc库...库用于打包函数, 被打包过后的函数可以直接使用, 其中linux分为静态库和动态库, 其中动态库是在加载应用程序时才被加载, 而程序对于动态库有加载顺序, 可以通过修改 /etc/ld.so.preload...文件. gcc -shared -fPIC -o libmodule.so module.c 2 修改ld.so.preload ld.so.preload是LD_PRELOAD环境变量的配置文件,.../l-dynamiclibraries/index.html 6.https://github.com/u2400/libc_hook_demo 7.http://man7.org/linux/man-pages

2K20
领券