日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用ELF解析工具patch ELF

發(fā)布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ELF解析工具patch ELF 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

pacth打補丁:我理解的意思是在不影響可執(zhí)行文件運行的基礎(chǔ)下,修復問文件出現(xiàn)的問題。

lief可以輕松將任意函數(shù)添加到ELF導出表中:
https://lief.quarkslab.com/doc/latest/tutorials/08_elf_bin2lib.html
用處:
導出加密函數(shù),直接dlopen來打開so。

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

lief主要特點: 解析:LIEF可以解析ELF,PE,MachO并提供一個用戶友好的API來訪問格式化內(nèi)部。 修改: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; }

執(zhí)行結(jié)果:

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

需求:這里puts函數(shù)patch換為system

安裝lief

python3.5 pip install --upgrade setuptools pip install lief import lief # 解析ELF文件 hashme = lief.parse("a.out") print(hashme) # 獲取get puts函數(shù)的 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函數(shù)換為system
執(zhí)行后的效果如下:

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

總結(jié)

以上是生活随笔為你收集整理的使用ELF解析工具patch ELF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。