天天看點

ELF檔案-逆向工具

1、ELF檔案内容解析

readelf: 可解析ELF檔案的所有内容;

strings: 檢視ELF檔案中的字元串;

file   : 檢視ELF檔案的資訊;

nm     : 檢視ELF檔案中的符号資訊;

ldd    : 檢視ELF檔案所依賴的庫檔案;

2、objdump

用于對ELF檔案進行反彙編;

objdump -d  ;反彙編部分可執行的二進制代碼;

objdump -D  ;反彙編全部的可執行的二進制代碼;

objdump -S  ;盡量把可執行的二進制代碼反彙編成源碼;

3、hexdump

以十六進制格式檢視ELF格式的二進制可執行檔案的内容;

hexdump -C elf_file_name

4、od

以指定的進制格式檢視ELF格式的二進制可執行檔案的内容;預設是八進制;

od -t x4 ;-t指定格式化的位元組單元機關;

         ;x4-每4個位元組為一個單元格式化成十六進制,

         ;x2-每2個位元組為一個單元格式化成十六進制,

         ;x1-以1個位元組為一個單元格式化成十六進制;

-t x2 等價于 -x

-A選項指定進制格式:x-十六進制, d-十進制,o-八進制;

如果使用-t指定了十六進制格式,則-A選項就不是必須的了;

5、xxd

以十六進制格式檢視ELF格式的二進制可執行檔案的内容;

xxd         ;以小寫的十六進制格式顯示;

xxd -u      ;以大寫的十六進制格式顯示;

xxd -s +10  ;以ELF檔案頭處的第1個位元組為參照,從第10個位元組處開始顯示;

xxd -s -10  ;以ELF檔案尾處的第1個位元組為參照,從第10個位元組處開始顯示;

6、編輯ELF檔案

使用vi/vim與指令xxd配合完成;

STEP1:使用vi/vim以二進制模式打開ELF檔案;

      vi -b binary_file

      vim -b binary_file

STEP2:在vi/vim的指令模式下輸入如下内容,把二進制内容轉換成16進制格式顯示:

       :%!xxd -u

STEP3:按照vi/vim正常的編輯方法來修改以十六進制格式顯示的二進制内容;

STEP4:編輯完成之後,在vi/vim的指令模式下輸入以下内容,把十六進制格式顯示的内容轉換回原始的二進制格式:

       :%!xxd -r

STEP5:在vi/vim的指令模式下輸入以下内容,儲存二進制格式的ELF檔案:

       :wq

---備注---

%   :表示目前檔案中顯示的所有行;

!xxd:表示執行外部指令xxd;

格式"%!xxd"表示把目前檔案中的所有行傳遞給外部指令xxd;

7、

動态調試工具

ltrace: 跟蹤ELF檔案或程序對庫函數的調用(library_function_call);

strace: 跟蹤ELF檔案或程序對系統調用的調用(system_call);

gdb   : 對一個程式進行調試;使用gcc編譯該程式時需加上選項-g,讓編譯器增加一些調試資訊;

strip : 删除程式中的調試資訊;這些調試資訊是編譯該程式時,gcc編譯器的-g選項添加的;

splint: 檢視一個程式中對未指派變量的引用、未使用的函數參數,等情況;(

靜态檢測)

lsof  : 檢視一個程序打開的檔案;

fuser : 檢視正在通路指定的file、filesystem或socket的所有程序的資訊;即:檢視都有哪些程序正在通路指定的file、filesystem或socket;

        如果沒有找到任何程序,fuser傳回非零值;如果找到至少一個程序,則fuser傳回0;

        -k:該選項會向所有這些程序發送SIGKILL信号,以kill掉所有正在通路指定file、filesystem或socket的所有程序;

        -i:在kill掉fuser指令找到的這些程序之前進行必要的提示資訊;

        fuser指令顯示的是pid,并且在每個pid後面附加一個字母,用以表示通路方式:

        c: 以目錄方式通路;

        e: 以可執行檔案方式通路;

        f: 以打開檔案方式通路,預設不顯示;

        F: 以寫的方式打開檔案進行通路;

        r: 以root目錄的方式通路;

        m: 以mmap檔案或共享庫的方式通路;

/proc : proc檔案系統中包含程序的所有資訊;