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

取消对库中ELF部分的开始和结束的保护,以覆盖链接程序

是指在链接过程中修改ELF(Executable and Linkable Format,可执行与可链接格式)文件的保护属性,使得链接程序可以覆盖库文件中的代码段和数据段。

ELF是一种常用的二进制文件格式,用于存储可执行文件、共享库和目标文件。ELF文件由多个段(section)组成,其中包括代码段、数据段、符号表、重定位表等。

在默认情况下,ELF文件的代码段和数据段是受保护的,不允许链接程序对其进行修改。然而,有些情况下,我们可能需要覆盖库文件中的某些部分,例如修复bug、添加新功能等。这时,可以通过取消对库中ELF部分的开始和结束的保护来实现。

取消对库中ELF部分的开始和结束的保护可以通过以下步骤实现:

  1. 使用合适的工具(如objcopy)打开库文件的ELF格式文件。
  2. 定位到代码段和数据段的起始位置和大小。
  3. 修改ELF文件头中的保护属性,将代码段和数据段的保护属性改为可写可执行。
  4. 将修改后的ELF文件保存,并用于链接程序。

这样,链接程序在链接过程中就可以覆盖库文件中的代码段和数据段,实现对库文件的修改。

取消对库中ELF部分的开始和结束的保护可能存在一定的风险,因为这样做可能会导致库文件的完整性受到破坏,进而影响程序的稳定性和安全性。因此,在进行这样的操作时,需要谨慎评估风险,并进行充分的测试和验证。

在腾讯云的产品中,推荐使用云服务器(CVM)来进行云计算相关的开发和部署。云服务器提供了高性能的计算资源和灵活的扩展能力,可以满足各种规模和需求的应用场景。您可以通过腾讯云云服务器产品页面(https://cloud.tencent.com/product/cvm)了解更多详情。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux漏洞分析入门笔记-栈溢出

虽然目标程序编译时默认没有开启ALSR,但程序使用系统动态链接会受到ALSR约束,每次重新启动程序后,libc.so地址会随机生成。...PIC通过一级间接寻址实现这一点-共享代码段不包含绝对虚拟地址来代替全局符号函数引用,而是指向数据段特定表。该表是全局符号函数绝对虚拟地址占位符。动态链接器作为重定位部分来填充此表。...动态链接两种不同方式重新定位PIC中发现全局符号函数,如下所述: 全局偏移表(GOT): 全局偏移表包含每个全局变量4字节条目,其中4字节条目包含全局变量地址。...在编译时可以通过-fno-stack-protector选项取消这项保护。 NX(Never eXecute):数据执行保护,在64位系统CPU增加一位NX位,用来标示数据如果可写就不可执行。...在overflow这个程序我们具有栈数据写权限,就没有栈数据可执行权限。

2K40

MIT 6.S081 (BOOK-RISCV-REV1)教材第三章内容 -- 页表

本课程前置知识主要涉及: C语言(建议阅读C程序语言设计—第二版) RISC-V汇编 推荐阅读: 程序自我修养-装载,链接 页表 页表是操作系统为每个进程提供私有地址空间内存机制。...然而,在这种安排,提供保护页将涉及取消映射虚拟地址,否则虚拟地址将引用物理内存,这将很难使用。 内核在权限PTE_RPTE_X下映射蹦床页面内核文本页面。内核从这些页面读取执行指令。...列表锁被封装在一个结构体明确锁在结构体中保护字段。 现在,忽略锁以及acquirerelease调用;第6章将详细查看有关锁细节。...---- 代码:exec ELF文件格式 本节内容参考: 程序自我修养,装载,链接一书 ELF文件格式: 在计算机科学,是一种用于二进制文件、可执行文件、目标代码、共享核心转储格式文件...因为ELF目标文件不需要被装载,所以它没有程序头表,而ELF可执行文件共享文件都有。

77940

MIT 6.828 操作系统工程 lab3A:用户环境异常处理

创建和运行环境 处理中断异常 受保护控制转移基础 异常中断类型 设置IDT 在本实验,您将实现运行受保护用户模式环境(即“进程”)所需基本内核功能。...您将增强JOS内核,设置数据结构来跟踪用户环境,创建单个用户环境,将程序映像加载到其中并开始运行。您还将使JOS内核能够处理用户环境发出任何系统调用并处理它引起任何其他异常。...因为我们还没有文件系统,所以我们将设置内核加载嵌入在内核本身静态二进制映像。JOS将此二进制文件作为ELF可执行映像嵌入内核。...现在,您将需要实现基本异常系统调用处理,以便内核有可能从用户模式代码恢复处理器控制。您应该做第一件事是完全熟悉x86异常机制。...设置IDT 现在,您应该具有设置IDT处理JOS异常所需基本信息。现在,您将设置IDT处理中断向量0-31(处理器异常。

64820

Linux pwn入门学习到放弃

攻击者在覆盖返回地址时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode执行。在Linux我们将cookie信息称为canary/金丝雀。...如果 CPU 不支持 DEP,Windows 会软件方式模拟出 DEP 部分功能。...而动态链接ELF二进制文件使用称为全局偏移表(GOT)查找表来动态解析共享函数,GOT就成为了黑客关注目标之一, GCC, GNU linker以及Glibc-dynamic linker一起配合实现了一种叫做...这部分区域大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段,也有可能包含一些只读常数变量,例如字符串常量等。...栈(stack):栈又称堆栈,用户存放程序临时创建局部变量。在函数被调用时,其参数也会被压入发起调用进程栈,并且待到调用结束后,函数返回值也会被存放回栈

3.5K10

ELF文件及android hook原理

、目的档、共享核心转储标准文件格式。...所以ELF将所有的字符串集中放到一个表里,每一个字符串’\0’分隔,然后使用字符串在表偏移来引用字符串。 比如下面这样: ? 那么偏移与他们字符串如下表: ?...因为ELF目标文件不需要被装载,所以它没有程序头表,而ELF可执行文件共享文件都有。 使用readelf查看程序头表。 ?...其实我们目的很简单,希望程序模块中共享指令部分在装载时不需要因为装载地址改变而改变,所以实现基本思想就是把指令那些需要被修改部分分离出来,跟数据部分放在一起,这样指令部分就可以保持不变,而数据部分可以在每个进程拥有一个副本...动态加载器解析结束,可以看到got表项正确指向了libc动态printf地址 ?

3.8K81

SCA技术进阶系列(三):浅谈二进制SCA在数字供应链安全体系应用

01 为什么需要二进制软件成分分析在工业系统、车联网系统、银行券商系统嵌入式系统,有无数二进制程序,这些源程序可能长期丢失或是私有的,这意味着无法使用常规方法这些程序进行修补或在源代码级别上评估其安全性...在检测结果上给予补充,可检测静态链接和在构建过程引入开源软件。当然二进制成分分析也存在一些技术挑战:无法准确地确定程序变量函数名。...”;ELF格式(Executable and Linkable Format):应用于Unix、Linux系统,包括可执行文件、动态链接“so”、可重定位文件“o”、内核模块“ko”;Mach-O格式...;汇编: 使用汇编器as将汇编代码汇编成二进制.o文件 (又称目标文件);链接:最后使用链接器ld将目标文件目标文件中用到一些文件进行链接生成Linux下elf格式可执行文件a.out,这个可执行文件才可以在...静态反汇编:涉及在非执行情况下提取二进制文件指令。静态反汇编目标是将二进制代码转换为汇编代码过程。一些反汇编工具可以将二进制文件转换为汇编指令序列,帮助分析程序代码结构控制流。

64630

程序编译、链接、装载与运行

ELF header是ELF文件中最重要部分,header中保存了如下内容 ELFmagic number 文件机器字节长度 ELF版本 操作系统平台 硬件平台 程序入口地址 段表位置长度...相反因为没有了动态链接依赖,不需要考虑动态链接不同版本,静态链接文件可以做到链接即可执行,减少了运维和部署上复杂度,是非常方便,在有些新发明语言(例如golang)链接过程默认已经开始使用静态链接...符号表(.symtab) 目标文件某些部分是需要在链接时候被使用到“粘合剂”,这些部分我们可以把其称之为“符号”,符号就保存在符号表。...从上面的过程我们可以看到链接器最终需要完成工作有三个 合并不同目标文件同类型段 对于目标文件符号引用,在其它目标文件中找到可以引用符号 目标文件变量地址进行重定位 静态链接...当使用到标准内容时,链接器会对用户目标文件标准进行链接,得到最终可执行文件。 链接过程控制 链接默认情况下生成是一个ELF文件,这在Linux操作系统上是符合我们要求

1.3K10

Linux共享、静态、动态详解

这就意味着如果你使得uidgid与euidegid分别相等,然后调用一个程序,那么这些变量就可以完全起效。 3.4. 创建一个共享函数 现在我们开始学习如何创建一个共享函数。...因此,ldconfig不会对您希望程序链接任何假设,因此安装程序必须特别修改符号链接更新链接器将用于。...源代码自动安装在“本地”目录(/ usr / local),一旦该代码已经成熟,软件包管理器可以轻松地覆盖默认值,将代码放置在标准发行版。...如果您只想覆盖一些函数,但保留其余部分,则可以在/etc/ld.so.preload输入覆盖(.o文件)名称。这些“预加载”将优先于标准集。...因此,在GNU加载程序程序启动时加载程序其余部分,如果程序为setuid或setgid,那么这些变量(其他类似的变量)将被忽略或受到很大限制。

8.8K10

ELF文件结构描述

正如我们开始所说链接器在处理目标文件时,须要对目标文件某些部位进行重定位,即代码段和数据段哪些绝对地址引用位置。...通常用这种方式,在ELF文件引用字符串只需给一个数字下标即可,不用考虑字符串长度问题。一般字符串标在ELF文件中国也方式保存,常见段名为“.strtab”或“.shstrtab”。...链接过程很关键部分是符号管理,每一个目标文件都会有一个相应符号表(Symbol Table),这个表里记录了目标文件所用到所有符号。..._end或end,该符号为程序结束地址。 以上地址都为程序被装载虚拟地址。 我们可以在程序中直接使用这些符号。...这样就产生了一个问题,那就是如果一个c程序要使用这些的话,C语言不可以使用这些定义函数变量名字作为符号名,否则将会跟现有的目标文件冲突。

1.5K50

含大量图文解析及例程 | Linux下ELF文件、链接、加载与

(segment),而所有段大小之和不能超过64K(65536u)) 寻找处理解释器段(动态链接部分会介绍) 装入目标程序段(elf_map) 填写目标程序入口地址 填写目标程序参数,环境变量等信息...:直接读入进程地址空间 加载完成之后,静态链接程序开始ELF entry开始执行,之后就变成我们熟悉状态机,唯一行为就是取指执行。...调试结果符合我们静态程序加载时操作系统行为预期。...因为动态是在程序运行时被链接,所以磁盘上内存只要保留一份副本,因此节约了磁盘空间。如果发现了bug或要升级也很简单,只要用新把原来替换掉就行了。...也就是说,foo函数确实是动态链接,内存只有一份foo副本。 这在操作系统内核不难实现:所有只读方式映射同一个文件部分(如代码部分)时,都指向同一个副本,这个过程中会创建引用计数。

2.6K21

动态链接步骤与实现

下面这段注释来自于 Glibc26.1源代码 elf/rtld.c ? 这段注释写在白举代码末尾,表示自举代码已经执行结束。...然后链接开始从集合里取个所需要共享对象名字,找到相应文件后打开该文件,读取相应ELF文件头“ .dynamic”段,然后将它相应代码段和数据段映射到进程空间中。...如果进程可执行文件也有“init”段,那么动态链接器不会执行它,因为可执行文件“init”段“ finit”段由程序初始化部分代码负责执行,我们将在后面的“”这部分详细介绍程序初始化部分。...这样我们就很好理解为什么动态链接器本身可以作为可执行程序运行,这也从一个侧面证明了共享可执行文件实际上没什么区别,除了文件头标志位扩展名有所不同之外,其他都是一样。...LinuxELF动态链接器是Glbc部分,它源代码位于Glibc源代码elf目录下面,它实际入口地址位于 sysdeps/i386/d1-manchine.h__start(普通程序入口地址

1.3K20

实战|记录一次坎坷打靶经历

一般来讲pwn题思路 1.没有NX保护程序源码自带系统命令函数,找到系统命令函数地址,使用ret2text,直接覆盖返回地址即可 2.没有NX保护,找不到system函数,利用输入函数,将shellcode...写入到程序,将shellcode地址覆盖返回地址即可:ret2shellcode 3.有NX保护,利用ROPGadget配合int 0x80调用execve,调用系统函数:ret2syscall 4...https://ibc.blukat.me 3、根据偏移获取shellsh位置 求libc基地址(函数动态地址-函数偏移量) 求其他函数地址(基地址+函数偏移量) 4、执行程序获取shell...目的明确,思路清晰,之后我就拉了一个pwndocker镜像,开始gdb调试,直接cyclic生成一大串字符,输入,然后程序就会报错, 然后通过cyclic就可以计算出缓冲区到返回地址距离为40...参考资料 程序保护机制 Pwn教学 ----- Ret2libc 深入理解GOT表PLT表 Pwn入门之Ret2Libc相关技巧 StackOverFlow之Ret2libc详解 ---- 原文链接

60620

ELF文件格式解析

) 简单粗暴so加解密实现   上边资料ELF文件格式分析非常详细,这边主要记录一下自己感觉比较重要和掌握不是很清楚部分,增加一些自己理解,也方便后续查阅。...链接视图只在链接起作用,而执行视图只在加载并执行时起作用。   为什么需要区分两种不同视图?(即为什么要区分段节?)内存分配权限管理页为单位,一节太小浪费空间,所以把相同权限节放到一起管理。...目前一个目标文件只能包含一个动态节区,将来可能会取消这一限制。 SHT_NOTE 7 此节区包含某种方式来标记文件信息。...SHT_DYNSYM 11 作为一个完整符号表,它可能包含很多动态链接而言不必要符号。因此,目标文件也可以包含一个 SHT_DYNSYM 节区,其中保存动态链接符号一个最小集合,节省空间。..._DYNAMIC数组结束

2.4K40

深入浅出ELF

事实上内核ELF文件结构支持是相当有限,只能读取并理解部分字段。 用户空间 内核返回用户空间后,对于静态链接程序是直接执行,没什么好说。...interpreter又称为dynamic linker,glibc2.27为例,它大致功能如下: 将实际要执行ELF程序内存段加载到当前进程空间中; 将动态内存段加载到当前进程空间中;...ELF程序动态进行重定向操作(relocation); 调用动态初始化函数(如*.preinit_array, .init, .init_array*); 将控制流传递给目标ELF程序,让其看起来自己是直接启动...Name,指定当前动态名字(logical name) … 其中有部分类型可以SectionSHT_xxx类型进行类比,完整列表可以参考ELF标准Book III: Operating...因此对于想保护应用程序开发者而言,最简单防护方法就是去除符号表,一个简单strip命令就可实现。strip删除主要是Section信息,因为这不影响程序执行。

73530

黑客级别的文章:把动态内存操作玩出了新花样!

为了便于阅读,我在原文中比较关键文字上,添加了字体颜色。 理论与实践 关于动态相关内容,市面上质量比较好书籍可能就是:《程序自我修养-链接、装载》这本书了。...爱奇艺 xHook,就是这些理论知识完美实践! 《程序自我修养-链接、装载》是一本不可多得好书,如果您对动态很感兴趣,建议您入手一本纸质书,支持一下作者!...使用google NDK源代码进行编译链接,生成动态或可执行文件都是ELF格式。 用readelf可以查看ELF文件基本信息,用objdump可以查看ELF文件反汇编输出。...而“地址相关”部分,就放在 got(变量引用) plt(函数引用) 。 PHT(program header table) ·ELF 被加载到内存时,是以 segment 为单位。...(当然,采样形式部分关闭 SFP,用以观察分析 hook 机制本身导致崩溃,也是可以考虑) 具体代码可以参考xhook实现,在源码搜索siglongjmp sigsetjmp。

1.2K20

Android Linker 与 SO 加壳技术

对于非安全方向开发者,深刻理解系统装载与链接机制也是进阶必要条件。 本文详细分析了 Linker SO 文件装载链接过程,最后 SO 加壳关键技术进行了简要介绍。...在 Android 环境,Native 层加壳主要是针对动态链接 SO,SO 加壳示意图如下: ? 加壳工具、loader、被保护SO。 SO: 即被保护目标 SO。...3.2 loader 完成 SO 加载链接 loader 开始执行后,首先需要在内存还原出 SO,SO 可以是经过加密、压缩、变换等手段,也可已单纯完全明文数据存储,这与 SO 加壳技术没有必要关系...3.2.2 分配 soinfo soinfo 保存了 SO 装载链接运行时需要所有信息,为了维护相关信息,loader 可以照搬 Linker soinfo 结构,用于存储中间信息,装载链接结束后...,loader 需要将自己维护 soinfo 部分信息导出给 Linker soinfo。

2.9K61

分析Linux系统执行过程

理解编译链接过程ELF可执行文件格式 五、编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接运行时动态链接 六、使用gdb跟踪分析一个execve系统调用内核处理函数...四、理解编译链接过程ELF可执行文件格式 ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)节头表(Section...动态链接(Dynamic Linked Library): Windows为应用程序提供了丰富函数调用,这些函数调用都包含在动态链接。...在使用静态情况下,在编译链接可执行文件时,链接器从复制这些函数和数据并把它们应用程序其它模块组合起来创建最终可执行文件(.EXE文件)。...然后,根据返回可执行文件地址,当前可执行文件进行覆盖。由于返回地址为调用可执行文件main函数入口,所以可以继续执行该文件。 七、特别关注新可执行程序是从哪里开始执行

89620

MIT 6.828 操作系统工程 lab1 2018 fall part1 & part2 笔记 and 中文注释源代码阅读

* * 磁盘布局 * * 此程序(boot.Smain.c)是引导加载程序。这应该 * 被存储在磁盘第一个扇区。 * * * 第二个扇区开始保存内核映像。...ELF二进制文件固定长度ELF标头开头,其后是可变长度程序标头, 列出了要加载每个程序段。...执行objdump -h obj/kern/kernel,查看内核可执行文件中所有部分名称,大小链接地址完整列表: .text:程序可执行指令。....data:数据部分保存程序初始化数据,例如用int x = 5等初始化程序声明全局变量; VMA 链接地址,该节期望从中执行内存地址。...ELF 程序标头来决定如何加载这些部分程序标头指定要加载到内存ELF对象哪些部分以及每个目标地址应占据位置。

2K50

PWN从入门到放弃(7)——栈溢出之ret2libc

0x00 动态链接 什么是动态链接 动态链接是指在程序装载时通过动态链接器将程序所需所有动态链接(Dynamic linking library) 装载至进程空间中( 程序按照模块拆分成各个相对独立部分...增强兼容性是表现在动态链接程序不同平台依赖差异性降低,比如对某个函数实现机制不同,如果是静态链接程序会为不同平台发布不同版本,而在动态链接情况下,只要不同平台都能提供一个动态链接包含该函数且接口相同...总而言之,动态链接程序在运行时会根据自己所依赖动态链接,通过动态链接器将他们加载至内存,并在此时将他们链接成一个完整程序。...也就是说,PLT表GOT表是一一,GOT表是函数实际地址,而PLT表是函数GOT表地址。...计算偏移量覆盖返回地址不再演示,之前一样,这里主要讲解一下payload构造。 32位ELF程序通过栈来传递参数,而64位ELF程序则是通过rdi寄存器来传递参数。

41410

Linux上程序是怎样运行

elf_check_arch(&loc->elf_ex)) goto out; 设置地址空间依赖 尝试加载描述段程序头表。...从磁盘上读取与我们可执行二进制文件链接程序解释器,并将其加载到内存elf_phdata = load_elf_phdrs(&loc->elf_ex, bprm->file); if (!...elf_phdata) goto out; 程序解释器指定在可执行文件.interp部分(在大多数情况下,对于x86_64,链接器为– /lib64/ld-linux-x86-64.so.2...它设置堆栈并将elf二进制文件映射到内存正确位置,映射了bssbrk部分,并做了许多其他不同事情来准备要执行可执行文件。...如我们所见,execve系统调用不会将控制权返回给进程,但是调用者进程代码,数据其他段只是被程序段所覆盖。应用程序退出将通过退出系统调用实现。 至此,整个程序开始运行到退出,整个流程完。

3.4K30
领券