使用ELF解析工具patch ELF

pacth打补丁:我理解的意思是在不影响可执行文件运行的基础下,修复问文件出现的问题。

lief可以轻松将任意函数添加到ELF导出表中:
https://lief.quarkslab.com/doc/latest/tutorials/08_elf_bin2lib.html
用处:
导出加密函数,直接dlopen来打开so。

这里使用quarklab的lief解析ELF文件并进行程序 patch:

lief主要特点:
解析:LIEF可以解析ELF,PE,MachO并提供一个用户友好的API来访问格式化内部。
修改:LIEF可以修改这些格式的某些部分
摘要:三种格式有 sections, symbols, entry point...等共同特征。
API:LIEF可以在C,C ++和Python中使用

lief程序地址

源程序:

//shell.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
  puts("/bin/sh");
  return EXIT_SUCCESS;
}

执行结果:

jay@ubuntu:~/Desktop$ ./a.out 
/bin/sh

需求:这里puts函数patch换为system

安装lief

python3.5
pip install --upgrade setuptools
pip install  lief
import lief
# 解析ELF文件
hashme = lief.parse("a.out")
print(hashme)
# 获取get puts函数的 Dynamic symbols
#python2中返回的是过滤后的列表, 而python3中返回到是一个filter类  加上.__next__() 是和原来等价的
puts_sym=filter(lambda e: e.name == "puts", hashme.imported_symbols).__next__()
print(puts_sym)
#将puts换为system
puts_sym.name = "system"
#改动写入新的文件 
hashme.write("a.out.patch")
print("done")

成功将puts函数换为system
执行后的效果如下:

jay@ubuntu:~/Desktop$ chmod 777 a.out.patch 
jay@ubuntu:~/Desktop$ ./a.out.patch 
$ id
uid=1000(jay) gid=1000(jay) groups=1000(jay),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
$ exit

demo代码:

参考:
https://github.com/lief-project/LIEF

https://mp.weixin.qq.com/s/m6BFv_xAwbM9UYjHfOfT6g

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elf解析工具 v1.7是一款用于解析ELF文件工具ELF(Executable and Linkable Format)是一种常用的可执行文件格式,广泛应用在Linux系统中。 elf解析工具 v1.7具有以下几个主要特点和功能: 1. 解析ELF文件结构:该工具可以将ELF文件的各个部分进行解析,包括文件头、程序头表、节头表等,以及各个节的内容和属性信息。 2. 打印ELF头信息:工具可以提取ELF文件的头部信息,包括文件类型、入口地址、程序头表的偏移量和大小等,方便用户了解文件的基本属性。 3. 分析节信息:工具可以解析节头表中的信息,包括节的类型、偏移量、大小、在内存中的地址等。用户可以通过该功能获取到ELF文件中各个节的详细信息。 4. 解析符号表:工具可以解析ELF文件中的符号表,这些符号表包含着函数、变量等符号的信息。用户可以通过该功能查找特定符号的地址、大小以及其他属性。 5. 解析重定位表:工具可以解析ELF文件中的重定位表,这些重定位表记录着需要进行地址重定位的位置和相关信息。用户可以通过该功能了解ELF文件中的地址重定位情况。 通过elf解析工具 v1.7,用户可以更好地了解和分析ELF文件的结构和内容,方便进行调试、逆向工程等操作。同时,该工具还具有友好的命令行界面和较高的解析效率,可以在各种场景下进行使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值