使用ELF解析工具patch ELF
生活随笔
收集整理的這篇文章主要介紹了
使用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í)行后的效果如下:
demo代碼:
參考:
https://github.com/lief-project/LIEF
https://mp.weixin.qq.com/s/m6BFv_xAwbM9UYjHfOfT6g
總結(jié)
以上是生活随笔為你收集整理的使用ELF解析工具patch ELF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安全多方计算
- 下一篇: 申宝策略-行业与概念板块跌多涨少