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

linuxso注入与热更新原理

简介 之前写了个hookso的工具,用来操作linux进程的动态链接库行为,本文从so注入与热更新入手,简单讲解一其中的原理,配合源码阅读效果更佳。...原理 不管是热更新so还是其他方式操作so,都要先注入才行。所以先考虑如何注入so。 其实往一个进程注入so的方法,很简单,让进程自己调用一dlopen即可。...这里要介绍一linux的ptrace函数。...函数查找 我们知道,linux的可执行文件是elf文件格式,动态链接库其实也是elf格式。关于elf,有很多资料,这里简单讲一elf结构。...所以最好能直接注入一个新的so,重新绑定一,将map中的地址替换为新的函数地址。 隐含问题 这里有几个问题: 如何拿到lua_State * L?

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

linuxso注入与热更新原理 | 直播回顾

本课程将讲述如何做到不重启进程,而将so的修改热更新生效! 原理 不管是热更新so还是其他方式操作so,都要先注入才行。所以先考虑如何注入so。...其实往一个进程注入so的方法,很简单,让进程自己调用一dlopen即可。这个就是基本原理,剩下的事情,就是如何让他调用。 那么如何操作?这里要介绍一linux的ptrace函数。...函数查找 我们知道,linux的可执行文件是elf文件格式,动态链接库其实也是elf格式。关于elf,有很多资料,这里简单讲一elf结构。...写一个so,这个so只是调用了puts函数,然后objdump观察机器码。    ...所以最好能直接注入一个新的so,重新绑定一,将map中的地址替换为新的函数地址。 隐含问题 这里有几个问题: 如何拿到 lua_State  * L?

1.4K10

Android安全-SO动态库注入

0x1 原理 所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。...Android是基于Linux内核的操作系统,而在LinuxSO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。...dlopen,dlsym函数的绝对地址; 0x04 获取并保存目标进程的堆栈,设置dlopen函数的相关参数,将要注入SO的绝对路径压栈; 0x05 调用dlopen...,解除关联,完成SO动态库注入; (注:实际上,0x06和0x07并不属于SO动态库注入的步骤,然而仅仅注入是完全没有意义的,通常我们需要执行SO中的函数) 0x3 实现 0x01...0x4 代码 贴一主要逻辑代码: pid_t pid = find_pid_of("xxx"); ptrace_attach(pid); uint32_t *inject_so_of(pid_t

2.4K20

linuxso、o、lo、a、la文件的区别

这种情况,libtool只会把“–L/usr/lib –la”当作参数传递给gcc命令行。...说“可能”,是因为如果在本地编译的情况,gcc在命令行中找不到一个库(比如上面的liba.so)依赖的其它库(比如libb.so),链接器会按照某种策略到某些路径下面去寻找需要的共享库: 1....但在交叉编译,上述八种策略,可以使用的仅仅有两个:-rpath-link,-rpath。...$ unicore32-Linux-gcc –o myprog /usr/lib/liba.so \ -Wl,–rpath-link -Wl,/home/UNITY_float/install/usr/...libtool中有一个变量“hardcode_libdir_flag_spec”,该变量本来是传递“-rpath”选项的,但我们可以修改它,添加我们需要的路径,传递给unicore32-linux-gcc

8.5K30

linux 什么是SO文件

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

5.6K20

Linuxso动态库一些不为人知的秘密

Linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 链接了冗余的库会怎样?...基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 ? 这么多so,是的。...呵呵,办法很简单省事吧,本文主要讲so依赖的一些问题,下面将介绍so的路径方面一些不为人知的小秘密。 库路径不为人知的小秘密 我们知道Linux链接so有两种途径:显示和隐式。...(0x00007f53ed30f000) 绝对路径虽然申请设置环境变量步骤,但是缺陷也是致命的,这个so必须放在绝对路径,不能放到其他地方,这样给部署带来很大麻烦。...也像LD_LIBRARY_PATH那样,每部署一台机器就需要配一吗。呵呵,不需要..,因为它已经被硬编码到可执行文件内部了。看看下面演示 1.

4K20

【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )

文章目录 一、SO 进程注入环境及 root 权限获取 二、进程注入时序分析 一、SO 进程注入环境及 root 权限获取 ---- SO 注入的前提必须有 root 权限 , 有了 root 权限后..., 才能调用 ptrace 相关函数 ; SO 注入环境有两种情况 , Android 模拟器 或 真实手机 ; 这里特别推荐使用 雷电模拟器 进行逆向操作 , 在真机上会出现各种问题 ; 使用 Android...目标进程 ; 然后调用 libbridge.so 动态库中的 load 方法加载真正的工作 so 动态库 libnative.so ; 调用 libnative.so 的 invoke 方法 , 将返回值返回给...libbridge.so , 然后通过 libbridge.so 返回给 调试程序 ; libbridge.so 的作用仅用于 调试程序 和 目标进程 之间的通信 ; 调试完毕后 , 远程调用卸载 libbridge.so...注入的流程 : 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器

1.2K00

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券