日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

elf是什么意思 elf是什么意思英語( 六 )


$ readelf -l main1... Section to Segment mapping:Segment Sections...0001.interp02.interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame03.init_array .fini_array .dynamic .got .got.plt .data .bss04.dynamic05.note.ABI-tag .note.gnu.build-id06.eh_frame_hdr0708.init_array .fini_array .dynamic .got在 Section to Segment mapping 中可以看到這些段的內(nèi)容是跟對應section的內(nèi)容重疊的,雖然一個segment可能對應多個section,但是可以根據(jù)內(nèi)存的讀寫屬性、內(nèi)存特征以及對應段的一般順序進行區(qū)分 。
如果程序中有比較詳細的日志函數(shù),我們還可以通過反編譯工具的腳本拓展去修改 .symtab/.strtab 段來批量還原ELF文件的符號 , 從而高效地輔助動態(tài)調(diào)試 。
Binary Fuzzing考慮這么一種場景,我們在分析某個IoT設備時發(fā)現(xiàn)了一個定制的ELF網(wǎng)絡程序,類似于httpd,其中有個靜態(tài)函數(shù)負責處理輸入數(shù)據(jù) ?,F(xiàn)在想要單獨對這個函數(shù)進行fuzz應該怎么做?直接從網(wǎng)絡請求中進行變異是一種方法,但是網(wǎng)絡請求的效率太低 , 而且觸達該函數(shù)的程序邏輯也可能太長 。
既然我們已經(jīng)了解了ELF , 那就可以有更好的辦法將該函數(shù)抽取出來進行獨立調(diào)用 。在介紹ELF類型的時候其實有提到,可執(zhí)行文件可以有兩種類型,即可執(zhí)行類型( ET_EXEC )和共享對象( ET_DYN ),一個動態(tài)鏈接的可執(zhí)行程序默認是共享對象類型的:
$ gcc hello.c -o hello$ readelf -h hello | grep TypeType:DYN (Shared object file)而動態(tài)庫(.so)本身也是共享對象類型,他們之間的本質(zhì)區(qū)別在于前者鏈接了libc并且定義了main函數(shù) 。對于動態(tài)庫,我們可以通過 dlopen/dlsym 獲取對應的符號進行調(diào)用,因此對于上面的場景,一個解決方式就是修改目標ELF文件 , 并且將對應的靜態(tài)函數(shù)導出添加到dynamic section中,并修復對應的ELF頭 。
這個思想其實很早就已經(jīng)有人實現(xiàn)了,比如lief的 bin2lib。通過該方法,我們就能將目標程序任意的函數(shù)抽取出來執(zhí)行 , 比如hugsy就用這個方式復現(xiàn)了Exim中的溢出漏洞(CVE-2018-6789) , 詳見 Fuzzing arbitrary functions in ELF binaries ( 中文翻譯 ) 。
總結(jié)本文主要介紹了32位環(huán)境下ELF文件的格式和布局 , 然后從內(nèi)核空間和用戶空間兩個方向分析了ELF程序的加載過程,最后列舉了幾個依賴于ELF文件特性的案例進行具體分析,包括dynamic linker的濫用、程序加固和反加固以及在二進制fuzzing中的應用 。
ELF文件本身并不復雜,只有三個關(guān)鍵部分,只不過在section和segment的類型上保留了極大的拓展性 。操作系統(tǒng)可以根據(jù)自己的需求在不同字段上實現(xiàn)和拓展自己的功能,比如Linux中通過dymamic類型實現(xiàn)動態(tài)加載 。但這不是必須的,例如在Android中就通過ELF格式封裝了特有的 .odex 、 .oat 文件來保存優(yōu)化后的dex 。另外對于64位環(huán)境,大部分字段含義都是類似的,只是字段大小稍有變化(Elf32->Elf64),并不影響文中的結(jié)論 。
【elf是什么意思 elf是什么意思英語】作者:PansLabyrinth

推薦閱讀