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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 二进制分析

發布時間:2023/12/14 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 二进制分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容簡介

二進制分析屬于信息安全業界逆向工程中的一種技術,通過利用可執行的機器代碼(二進制)來分析應用程序的控制結構和運行方式,有助于信息安全從業人員更好地分析各種漏洞、病毒以及惡意軟件,從而找到相應的解決方案。本書將帶領讀者探索連一些專家都未曾接觸的領域,正式進入計算機黑客世界。

本書是一本剖析 Linux ELF 工作機制的圖書,共分為9章,其內容涵蓋了 Linux 環境和相關工具、ELF 二進制格式、Linux 進程追蹤、ELF 病毒技術、Linux 二進制保護、Linux 中的 ELF 二進制取證分析、進程內存取證分析、擴展核心文件快照技術、Linux/proc/kcore 分析等。

如果你是一名軟件工程師或者逆向工程師,想要學習 Linux 二進制分析相關的內容,本書實為明智之選。本書提供了在安全、取證和殺毒領域中實施二進制分析的解決方案。本書也適合安全愛好者和系統工程師閱讀。為了更好地理解本書內容,讀者需要具備一定的 C 語言編程基礎和 Linux 命令行知識

作者簡介

Ryan O'Neill(ELF 大師)是一名計算機安全研究員兼軟件工程師,具有逆向工程、軟件開發、安全防御和取證分析技術方面的背景。他是在計算機黑客亞文化的世界中成長起來的——那個由 EFnet、BBS 系統以及系統可執行棧上的遠程緩沖區溢出組成的世界。他在年輕時接觸了系統安全、開發和病毒編寫等領域。他對計算機黑客的極大熱情如今已經演變成了對軟件開發和專業安全研究的熱愛。Ryan 在 DEFCON 和 RuxCon 等很多計算機安全會議上發表過演講,還舉辦了一個為期兩天的 ELF 二進制黑客研討會。

他的職業生涯非常成功,曾任職于 Pikewerks、Leviathan 安全集團這樣的大公司,近在 Backtrace 擔任軟件工程師。

Ryan 還未出版過其他圖書,不過他在 Phrack 和 VXHeaven 這樣的在線期刊上發表的論文讓他聲名遠揚。還有許多其他的作品可以從他的網站上找到。

本書內容

譯者序

譯者棣琦(本名張萌萌),曾夢想成為一名高級口譯,卻陰差陽錯成了一個愛寫代碼的程序員。在 IT 江湖升級打怪的過程中,為了不斷提高自己的技能,看書是少不了的;而要想成為高級玩家,看英文書自然也是必須。一個很偶然的機會,我接觸到了本書的英文版。第一遍翻看時略顯吃力,畢竟書中講述的許多概念都是作者的原創,網上幾無相關資料。但是這些稀缺的內容對于深入理解二進制分析卻非常重要,譯者由此嘗到了知識的甜頭。本著“獨樂樂不如眾樂樂”和“知識分享”的目的,本書的翻譯之路就這樣順理成章地開始了。

要想成為一名真正的黑客,不僅要會編寫程序,還需要解析程序,對已有的二進制文件進行反編譯,洞悉程序的工作原理。而本書完全是作者多年來在逆向工程領域的實戰經驗總結,其內容從 Linux 二進制格式的簡單介紹到二進制逆向的細節,不一而足。書中還穿插了作者自己維護的許多項目或軟件代碼示例。相信通過本書的學習,讀者完全可以掌握 Linux 二進制分析相關的一套完整的知識體系,為成長為一名高水平的黑客打下堅實的基礎。考慮到本書并非針對零基礎的讀者編寫,因此建議讀者能夠有一定的 C 語言和 Linux 基礎,以便更好地理解領會書中精華。另外,任何 IT 技術的學習掌握,都離不開動手操作。讀者要想叩開 Linux 二進制世界的大門,需要親自動手實踐書中示例,才能將書本知識轉換為自身技能。

最后,不能免俗的是各種致謝(雖然俗,但誠意百分百)。感謝我的父母對我闖蕩江湖的支持,感謝 Linux 中國創始人王興宇的信賴,感謝語音識別領域的技術大牛姚光超提出的寶貴建議,感謝我的朋友 Ray 對我的鼓勵。當然,更要感謝各位讀者的支持。

最后的最后,由于譯者水平有限,外加本書作者在表達上多有晦澀之處,因此譯文難免有紕漏,還望廣大讀者以及業內同行批評指正。

2017年9月

北京

關于作者

Ryan O'Neill 是一名計算機安全研究員兼軟件工程師,具有逆向工程、軟件開發、安全防御和取證分析技術方面的背景。他是在計算機黑客亞文化的世界中成長起來的——那個由 EFnet、BBS 系統以及系統可執行棧上的遠程緩沖區溢出組成的世界。他在年輕時就接觸了系統安全、開發和病毒編寫等領域。他對計算機黑客的極大熱情如今已經演變成了對軟件開發和專業安全研究的熱愛。Ryan 在 DEFCON 和 RuxCon 等很多計算機安全會議上發表過演講,還舉辦了一個為期兩天的 ELF 二進制黑客研討會。

他的職業生涯非常成功,曾就職于 Pikewerks、Leviathan 安全集團這樣的大公司,最近在 Backtrace 擔任軟件工程師。

Ryan 還未出版過其他圖書,不過他在 Phrack 和 VXHeaven 這樣的在線期刊上發表的論文讓他聲名遠揚。還有許多其他的作品可以從他的網站(http://www.bitlackeys.org)上找到。

致謝

首先,要向我的母親 Michelle 致以真誠的感謝,我已經將對她的感謝表達在這本書里了。這一切都是從母親為我買的第一臺計算機開始的,隨后是大量的圖書,從 UNIX 編程,到內核內部原理,再到網絡安全。在我生命中的某一刻,我以為會永遠放棄計算機,但是大約過了5年之后,當我想要重新點燃激情時,卻發現已經把書扔掉了。隨后我發現母親偷偷地把那些書幫我保存了起來,一直到我重新需要的那一天。感謝我的母親,你是最美的,我愛你。

還要感謝我生命中最重要的一個女人,她是我的另一半,是我的孩子的母親。毫無疑問,如果沒有她,就不會有我今天生活和事業上的成就。人們常說,每一個成功男人的背后都有一個偉大的女人。這句古老的格言道出的的確是真理。感謝 Marilyn 給我帶來了極大的喜悅,并進入了我的生活。我愛你。

我的父親 Brian O'Neill 在我生活中給了我巨大的鼓舞,教會了我為人夫、為人父和為人友的許多東西。我愛我的父親,我會一直珍惜我們之間哲學和精神層面的交流。

感謝 Michael 和 Jade,感謝你們如此獨特和美好的靈魂。我愛你們。

最后,要感謝我的3個孩子:Mick、Jayden 和 Jolene。也許有一天你們會讀到這本書,知道你們的父親對計算機略知一二。我會永遠把你們放在生活的首位。你們3個是令我驚奇的存在,為我的生活帶來了更深刻的意義和愛。

Silvio Cesare 在計算機安全領域是一個傳奇的名字,因為他在許多領域都有高度創新和突破性的研究,從 ELF 病毒,到內核漏洞分析方面的突破。非常感謝 Silvio 的指導和友誼。我從你那里學到的東西要遠遠多于從我們行業其他人處所學的東西。

Baron Oldenburg 也對本書起了很大的推動作用。好多次由于時間和精力的原因我幾乎要放棄了,幸好 Baron 幫我進行了初始的編輯和排版工作。這為本書的編寫減輕了很大的負擔,并最終促使本書問世。謝謝 Baron!你是我真正的朋友。

Lorne Schell 是一位真正的文藝復興式的人物——軟件工程師、音樂家、藝術家。本書的封面就是出自他的聰慧之手。Vitruvian(維特魯威風格的)Elf 與本書的描述藝術性的重合是多么令人驚喜!非常感謝你的才華,以及為此付出的時間和精力。

Chad Thunberg 是我在 Leviathan 安全集團工作時的老板,他為我編寫本書提供了所需要的資源和支持。非常感謝!

感謝 Efnet 網站所有在#bitlackeys上的朋友的友誼和支持!

關于審稿人

Lubomir Rintel 是一名系統程序員,生活在捷克的布爾諾市。他是一位全職的軟件開發人員,目前致力于 Linux 網絡工具的開發。除此之外,他還對許多項目做出過貢獻,包括 Linux 內核和 Fedora 發行版。活躍在開源軟件社區多年之后,他懂得一本好書涵蓋的主題要比參考手冊更加廣泛。他相信本書就是這樣,希望你也能夠像他一樣喜歡這本書。另外,他還喜歡食蟻獸。

截至2015年11月,Kumar Sumeet 在 IT 安全方面已經有4年多的研究經驗了,在此期間,他開創了黑客和間諜工具的前沿。他擁有倫敦大學皇家霍洛威分校的信息安全碩士學位,最近的重點研究領域是檢測網絡異常和抵御威脅的機器學習技術。

Sumeet 目前是 Riversafe 公司的一名安全顧問。Riversafe 是倫敦的一家網絡安全和 IT 數據管理咨詢公司,專注于一些尖端的安全技術。該公司也是2015年在 EMEA 地區的 Splunk Professional Services 的合作伙伴。他們已經完成了涉及許多領域(包括電信、銀行和金融市場、能源和航空局)的大型項目。

Sumeet 也是 Penetration Testing Using Raspberry Pi(Packt Publishing 出版)一書的技術審稿人。

有關他的項目和研究的更多詳細信息,可以訪問他的網站https://krsumeet.com,或者掃描右側的二維碼。

你也可以通過電子郵件contact@krsumeet.com聯系他。

Heron Yang 一直致力于創造人們真正想要的東西。他在高中時就建立了這樣堅定的信仰。隨后他在臺灣交通大學和卡內基梅隆大學專注于計算機科學的研究。在過去幾年,他專注于在人和滿足用戶需求之間建立聯系,致力于開發初創企業創意原型、新應用或者網站、學習筆記、出書、寫博客等。


感謝 Packt 給我這個機會參與本書的創作過程,并感謝 Judie Jose 在本書的創作過程中給我的很多幫助。此外,感謝我經歷過的所有挑戰,這讓我成為一個更好的人。本書深入二進制逆向的諸多細節,對于那些關心底層機制的人來說會是很好的資料。大家可通過heron.yang.tw@gmail.com或者http://heron.me跟我打招呼或討論圖書內容。

前言

軟件工程是創建能夠在微處理器上存在、運行和發揮作用的造物行為。我們稱這種造物為程序。逆向工程是發現程序如何運行和發揮作用的行為,進一步講,就是使用反編譯器和逆向工具進行組合,并依靠我們的專業技能來控制要進行反編譯的目標程序,來理解、解析或者修改程序的行為。我們需要理解二進制格式、內存布局和給定處理器的指令集的復雜性,才能控制微處理器上某個程序的生命周期。逆向工程師是掌握了二進制領域相關知識的技術人員。本書將教會你成為一名 Linux 二進制黑客所需要的合理的課程、洞察力和相關任務。當一個人自稱逆向工程師的時候,他自己其實已經超出了工程師的水平。一個真正的黑客不僅可以編寫代碼,還可以解析代碼,反編譯二進制文件和內存段,他追求的是修改軟件程序的內部工作原理。這就是反編譯工程師的動力。

從專業或者興趣愛好的角度來看,我都會在計算機安全領域(無論是漏洞分析、惡意軟件分析、防病毒軟件、rootkit 檢測,還是病毒設計)使用自己在逆向工程方面的技能。本書的大部分內容專注于計算機安全方面。我們會分析內存轉儲、進程鏡像重建,并對二進制分析更深奧的領域進行探索,包括 Linux 病毒感染和二進制取證分析。我們將會解析被惡意軟件感染的二進制文件,還會感染運行中的進程。本書旨在解釋 Linux 逆向工程所必需的組件,因此我們會深入學習 ELF(可執行文件和鏈接格式)。ELF 是 Linux 中可執行文件、共享庫、核心轉儲文件和目標文件的二進制格式。本書最重要的一個方面是針對 ELF 二進制格式的結構復雜性給出了深入的分析。ELF 節、段、動態鏈接等這些概念都是非常重要的,也是逆向工程方面相關知識的比較有意思的分支。我們將會深入探索 ELF 二進制攻擊,并了解如何將這些技能應用到更廣泛的工作中。

本書的目標是讓讀者成為對 Linux 二進制攻防有扎實基礎的少數人之一,這將會為打開創新性研究的大門提供一個非常廣泛的主題,并將讀者帶領到 Linux 操作系統高級黑客技術的前沿。你將掌握 Linux 二進制修補、病毒工程化/分析、內核取證分析和 ELF 二進制格式這一套寶貴的知識體系。讀者也會對程序執行和動態鏈接有更深入的了解,對二進制保護和調試的內部原理有更深入的理解。

我是一名計算機安全研究員、軟件工程師,也是一名黑客。本書只是有組織地對我所做過的研究進行了文檔性描述,也是對已經做出研究結果的一些基礎知識的描述。

本書所涵蓋的很多知識都無法在互聯網上找到。本書試圖將一些相關聯的主題集中在一起,以便作為 Linux 二進制和內存攻擊這一主題的入門手冊和參考。雖然不是非常完善,不過也涵蓋了入門需要的很多核心信息。

本書涵蓋的內容

第1章,Linux 環境和相關工具,簡要介紹了 Linux 環境和相關的工具,在整本書中都會用到。

第2章,ELF 二進制格式,幫助讀者了解 ELF 二進制格式每個主要的組件,在 Linux 和大多數類 UNIX 系統上都會用到。

第3章,Linux 進程追蹤,教會讀者使用 ptrace 系統調用讀寫進程內存并注入代碼。

第4章,ELF 病毒技術——Linux/UNIX 病毒,將會介紹 Linux 病毒的過去、現在和將來,以及病毒的工程化和圍繞病毒進行的相關研究。

第5章,Linux 二進制保護,解釋 ELF 二進制保護的基本原理。

第6章,Linux 下的 ELF 二進制取證分析,通過解析 ELF 目標文件來研究病毒、后門和可疑的代碼注入。

第7章,進程內存取證分析,將會介紹如何解析進程的地址空間,以研究內存中的惡意軟件、后門和可疑的代碼注入。

第8章,ECFS——擴展核心文件快照技術,是對 ECFS 這一用于深入進程內存取證分析的新開源產品的介紹。

第9章,Linux/proc/kcore 分析,介紹了如何使用/proc/kcore 進行內存分析來檢測 Linux 內核中的惡意軟件。

閱讀本書的先決條件

閱讀本書的先決條件如下:假定讀者具有 Linux 命令行相關的操作知識,對 C 語言編程技巧有一定的理解,對 x86 匯編語言知識有基本的掌握(不是必需,但會有很大的幫助)。有句話說得好:“如果你可以讀懂匯編語言,那么一切都是開源的”。

本書讀者對象

如果你是一名軟件工程師或者逆向工程師,想學習 Linux 二進制分析相關的更多知識,本書將會為你提供在安全、取證分析和防病毒領域進行二進制分析所需要用到的一切知識。假如你是一位安全技術領域的愛好者或者是一名系統工程師,并且有 C 語言編程和 Linux 命令行相關的經驗,這本書將非常適合你。

第1章 Linux 環境和相關工具

      • 1.1 Linux 工具
        • 1.1.1 GDB
        • 1.1.2 GNU binutils 中的 objdump
        • 1.1.3 GNU binutils 中的 objcopy
        • 1.1.4 strace
        • 1.1.5 ltrace
        • 1.1.6 基本的 ltrace 命令
        • 1.1.7 ftrace
        • 1.1.8 readelf
        • 1.1.9 ERESI——ELF 反編譯系統接口
      • 1.2 有用的設備和文件
        • 1.2.1 /proc//maps
        • 1.2.2 /proc/kcore
        • 1.2.3 /boot/System.map
        • 1.2.4 /proc/kallsyms
        • 1.2.5 /proc/iomem
        • 1.2.6 ECFS
      • 1.3 鏈接器相關環境指針
        • 1.3.1 LD_PRELOAD 環境變量
        • 1.3.2 LD_SHOW_AUXV 環境變量
        • 1.3.3 鏈接器腳本
      • 1.4 總結

本章將集中介紹 Linux 環境,因為這將貫穿整本書的始終。本書的重點是對 Linux 二進制進行分析,那么利用好 Linux 自帶的一些通用的本地環境工具將會對 Linux 二進制分析非常有幫助。Linux 自帶了應用普遍的 binutils 工具,該工具也可以在網站http://www.gnu.org/software/binutils/中找到,里面包含了一些用于二進制分析和破解的工具。本書不會介紹二進制逆向工程的通用軟件 IDA Pro,但還是鼓勵讀者使用它。不過,在本書中不會使用 IDA。然而,通過本書的學習,你可以利用現有的環境對任何 Linux 系統進行二進制破解。由此,便可以欣賞到作為一個真正的黑客可以利用許多免費工具的 Linux 環境之美。在本書中,我們將會展示各種工具的使用,隨著每個章節的推進,也會不斷回顧這些工具的使用方法。現在我們將本章作為參考章節,介紹 Linux 環境下的相關工具和技巧。如果你已經非常熟悉 Linux 環境以及反編譯、調試、轉換 ELF 文件的工具,可以跳過本章。

1.1 Linux 工具

在本書中將用到許多公開發布的免費工具。本節內容將會對其中某些工具進行概要闡述。

1.1.1 GDB

GNU 調試器(GDB)不僅可以用來調試有 bug 的應用程序,也可以用來研究甚至改變一個程序的控制流,還可以用來修改代碼、寄存器和數據結構。對于一個致力于尋找軟件漏洞或者破解一個內部非常復雜的病毒的黑客來講,這些都是非常常見的工作。GDB 主要用于分析 ELF 二進制文件和 Linux 進程,是 Linux 黑客的必備工具,在本書中我們也會在各種不同的例子中使用到 GDB。

1.1.2 GNU binutils 中的 objdump

object dump(objdump)是一種對代碼進行快速反編譯的簡潔方案,在反編譯簡單的、未被篡改的二進制文件時非常有用,但是要進行任何真正有挑戰性的反編譯任務,特別是針對惡意軟件時,objdump 就顯示出了它的局限性。其最主要的一個缺陷就是需要依賴 ELF 節頭,并且不會進行控制流分析,這極大地降低了 objdump 的健壯性。如果要反編譯的文件沒有節頭,那么使用 objdump 的后果就是無法正確地反編譯二進制文件中的代碼,甚至都不能打開二進制文件。不過,對于一些比較平常的任務,如反編譯未被加固、精簡(stripped)或者以任何方式混淆的普通二進制文件,objdump 已經足夠了。objdump 可以讀取所有常用的 ELF 類型的文件。下面是關于 objdump 使用方法的一些常見例子。

  • 查看 ELF 文件中所有節的數據或代碼:
objdump –D <elf_object>
  • 只查看 ELF 文件中的程序代碼:
objdump –d <elf_object>
  • 查看所有符號:
objdump –tT <elf_object>

在第2章介紹ELF二進制格式時,我們將更加深入地介紹objdump和其他相關工具。

1.1.3 GNU binutils 中的 objcopy

object copy(objcopy)是一款非常強大的小工具,很難用一句話對其進行概述。推薦讀者參考objcopy的使用手冊,里面描述得非常詳細。雖然objcopy的某些特征只針對特定的ELF目標文件,但是,它還可以用來分析和修改任意類型的ELF目標文件,還可以修改ELF節,或將ELF節復制到ELF二進制中(或從ELF二進制中復制ELF節)。

要將.data節從一個ELF目標文件復制到另一個文件中,可以使用下面的命令:

objcopy –only-section=.data <infile> <outfile>

objcopy工具會在本書的后續內容中用到。現在只要記住有這樣一個工具,并且知道這是對 Linux 二進制黑客來說非常有用的一個工具就可以了。

1.1.4 strace

system call trace(strace,系統調用追蹤)是基于ptrace(2)系統調用的一款工具,strace通過在一個循環中使用PTRACE_SYSCALL請求來顯示運行中程序的系統調用(也稱為 syscalls)活動相關的信息以及程序執行中捕捉到的信號量。strace在調試過程中非常有用,也可以用來收集運行時系統調用相關的信息。

使用strace命令來跟蹤一個基本的程序:

strace /bin/ls –o ls.out

使用strace命令附加到一個現存的進程上:

strace –p <pid> -o daemon.out

原始輸出將會顯示每個系統調用的文件描述編號,系統調用會將文件描述符作為參數,如下所示:

SYS_read(3, buf, sizeof(buf));

如果想查看讀入到文件描述符3中的所有數據,可以運行下面的命令:

strace –e read=3 /bin/ls

也可以使用–e write=fd命令查看寫入的數據。strace是一個非常有用的小工具,會在很多地方用到。

1.1.5 ltrace

library traceltrace,庫追蹤)是另外一個簡潔的小工具,與strace非常類似。ltrace 會解析共享庫,即一個程序的鏈接信息,并打印出用到的庫函數。

1.1.6 基本的 ltrace 命令

除了可以查看庫函數調用之外,還可以使用-S標記查看系統調用。ltrace命令通過解析可執行文件的動態段,并打印出共享庫和靜態庫的實際符號和函數,來提供更細粒度的信息:

ltrace <program> -o program.out

1.1.7 ftrace

function traceftrace,函數追蹤)是我自己設計的一個工具。ftrace 的功能與ltrace類似,但還可以顯示出二進制文件本身的函數調用。我沒有找到現成的實現這個功能的 Linux 工具,于是就決定自己編碼實現。這個工具可以在網站https://github.com/elfmaster/ftrace找到。下一章會對這個工具的使用進行介紹。

1.1.8 readelf

readelf命令是一個非常有用的解析ELF二進制文件的工具。在進行反編譯之前,需要收集目標文件相關的信息,該命令能夠提供收集信息所需要的特定于ELF的所有數據。在本書中,我們將會使用readelf命令收集符號、段、節、重定向入口、數據動態鏈接等相關信息。readelf命令是分析ELF二進制文件的利器。第2章將對該命令進行更深入的介紹,下面是幾個常用的標記。

  • 查詢節頭表:
readelf –S <object>
  • 查詢程序頭表:
readelf –l <object>
  • 查詢符號表:
readelf -s <object>
  • 查詢 ELF 文件頭數據:
readelf –e <object>
  • 查詢重定位入口:
readelf –r <object>
  • 查詢動態段:
readelf –d <object>

1.1.9 ERESI——ELF 反編譯系統接口

ERESI 工程(http://www.eresi-project.org)中包含著許多 Linux 二進制黑客夢寐以求的工具。令人遺憾的是,其中有些工具沒有持續更新,有的與64位 Linux 不適配。ERESI 工程支持許多的體系結構,無疑是迄今為止最具創新性的破解 ELF 二進制文件的工具集合。由于我個人不太熟悉 ERESI 工程中工具的用法,并且其中有些不再更新,因此在本書中就不再對該工程進行更深入的探討了。不過,有兩篇 Phrack 的文章能夠說明 ERESI 工具的創新和強大的特性:

  • Cerberus ELF interface(http://www.phrack.org/archives/issues/61/8.txt)
  • Embedded ELF debugging(http://www.phrack.org/archives/issues/63/9.txt)

1.2 有用的設備和文件

Linux 有許多文件、設備,還有/proc入口,它們對狂熱的黑客還有反編譯工程師來說都非常有用。在本書中,我們將會展示其中許多有用的文件。下面介紹本書中常用的一些文件。

1.2.1 /proc/<pid>/maps

/proc/<pid>/map文件保存了一個進程鏡像的布局,通過展現每個內存映射來實現,展現的內容包括可執行文件、共享庫、棧、堆和 VDSO 等。這個文件對于快速解析一個進程的地址空間分布是至關重要的。在本書中會多次用到該文件。

1.2.2 /proc/kcore

/proc/kcore是proc文件系統的一項,是 Linux 內核的動態核心文件。也就是說,它是以 ELF 核心文件的形式所展現出來的原生內存轉儲,GDB 可以使用/proc/kcore來對內核進行調試和分析。第9章會更深入地介紹/proc/kcore。

1.2.3 /boot/System.map

這個文件在幾乎所有的 Linux 發行版中都有,對內核黑客來說是非常有用的一個文件,包含了整個內核的所有符號。

1.2.4 /proc/kallsyms

kallsyms與System.map類似,區別就是 kallsyms 是內核所屬的/proc的一個入口并且可以動態更新。如果安裝了新的 LKM(Linux Kernel Module),符號會自動添加到/proc/kallsyms中。/proc/kallsyms包含了內核中絕大部分的符號,如果在CONFIG_KALLSYMS_ALL內核配置中指明,則可以包含內核中全部的符號。

1.2.5 /proc/iomem

iomem是一個非常有用的 proc 入口,與/proc/<pid>/maps類似,不過它是跟系統內存相關的。例如,如果想知道內核的 text 段所映射的物理內存位置,可以搜索Kernel字符串,然后就可以查看 code/text段、data段和bss段的相關內容:

$ grep Kernel /proc/iomem 01000000-016d9b27 : Kernel code 016d9b28-01ceeebf : Kernel data 01df0000-01f26fff : Kernel bss

1.2.6 ECFS

extended core file snapshot(ECFS,擴展核心文件快照)是一項特殊的核心轉儲技術,專門為進程鏡像的高級取證分析所設計。這個軟件的代碼可以在https://github.com/elfmaster/ecfs看到。第8章將會單獨介紹 ECFS 及其使用方法。如果你已經進入到了高級內存取證分析階段,你會非常想關注這一部分內容。

1.3 鏈接器相關環境指針

動態加載器/鏈接器以及鏈接的概念,在程序鏈接、執行的過程中都是避不開的基本組成部分。在本書中,你還會學到更多相關的概念。在 Linux 中,有許多可以代替動態鏈接器的方法可供二進制黑客使用。隨著本書的深入,你會開始理解鏈接、重定向和動態加載(程序解釋器)的過程。下面是幾個很有用處的鏈接器相關的屬性,在本書中將會用到。

1.3.1 LD_PRELOAD 環境變量

LD_PRELOAD環境變量可以設置成一個指定庫的路徑,動態鏈接時可以比其他庫有更高的優先級。這就允許預加載庫中的函數和符號能夠覆蓋掉后續鏈接的庫中的函數和符號。這在本質上允許你通過重定向共享庫函數來進行運行時修復。在后續的章節中,這項技術可以用來繞過反調試代碼,也可以用作用戶級 rootkit。

1.3.2 LD_SHOW_AUXV 環境變量

該環境變量能夠通知程序加載器來展示程序運行時的輔助向量。輔助向量是放在程序棧(通過內核的 ELF 常規加載方式)上的信息,附帶了傳遞給動態鏈接器的程序相關的特定信息。第3章將會對此進行進一步驗證,不過這些信息對于反編譯和調試來說非常有用。例如,要想獲取進程鏡像 VDSO 頁的內存地址(也可以使用maps文件獲取,之前介紹過),就需要查詢AT_SYSINFO。

下面是一個帶有LD_SHOW_AUXV輔助向量的例子:

$ LD_SHOW_AUXV=1 whoami AT_SYSINFO: 0xb7779414 AT_SYSINFO_EHDR: 0xb7779000 AT_HWCAP: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmovpat pse36 clflush mmx fxsr sse sse2 AT_PAGESZ: 4096 AT_CLKTCK: 100 AT_PHDR: 0x8048034 AT_PHENT: 32 AT_PHNUM: 9 AT_BASE: 0xb777a000 AT_FLAGS: 0x0 AT_ENTRY: 0x8048eb8 AT_UID: 1000 AT_EUID: 1000 AT_GID: 1000 AT_EGID: 1000 AT_SECURE: 0 AT_RANDOM: 0xbfb4ca2b AT_EXECFN: /usr/bin/whoami AT_PLATFORM: i686 elfmaster

第2章將會進一步介紹輔助向量。

1.3.3 鏈接器腳本

鏈接器腳本是我們的一個興趣點,因為鏈接器腳本是由鏈接器解釋的,把程序劃分成相應的節、內存和符號。默認的鏈接器腳本可以使用ld–verbose查看。

ld鏈接器程序有其自己解釋的一套語言,當有文件(如可重定位的目標文件、共享庫和頭文件)輸入時,ld鏈接器程序會用自己的語言來決定輸出文件(如可執行程序)的組織方式。例如,如果輸出的是一個 ELF 可執行文件,鏈接器腳本能夠決定該輸出文件的布局,以及每個段里面包含哪些節。另外舉一個例子:.bss節總是放在data段的末尾,這就是鏈接器腳本決定的。你可能很好奇,這為什么就成了我們的一個興趣點呢?一方面,對編譯時鏈接過程有一定深入的了解是很重要的。gcc依賴于鏈接器和其他程序來完成編譯的任務,在某些情況下,能夠控制可執行文件的布局相當重要。ld命令語言是一門相當深入的語言,盡管它超出了本書的范圍,但是非常值得探究。另一方面,在對可執行文件進行反編譯時,普通段地址或者文件的其他部分有時候會被修改,這就表明引入了一個自定義的鏈接器腳本。gcc通過使用–T標志來指定鏈接器腳本。第5章會介紹一個使用鏈接器腳本的例子。

1.4 總結

本章僅介紹了 Linux 環境和工具相關的一些基本概念,在后續的每個章節中都會經常用到。二進制分析主要是了解一些可用的工具和資源并進行相關的整合。目前,我們只簡要介紹了這部分工具,在接下來的章節中,隨著對 Linux 二進制破解這個廣闊領域進行更進一步的探索,我們會有機會對每一個工具進行深入介紹。下一章將會對 ELF 二進制格式進行更深入的探索,也會涉及其他一些有趣的概念,如動態鏈接、重定位、符號和節(section)等。

第2章 ELF 二進制格式(上)
第2章 ELF 二進制格式(下)
第3章 Linux 進程追蹤(上)
第3章 Linux 進程追蹤(下)
第4章 ELF 病毒技術——Linux/UNIX 病毒
第5章 Linux 二進制保護
第6章 Linux 下的 ELF 二進制取證分析
第7章 進程內存取證分析
第8章 ECFS——擴展核心文件快照技術(上)
第8章 ECFS——擴展核心文件快照技術(下)
第9章 Linux/proc/kcore 分析

閱讀全文: http://gitbook.cn/gitchat/geekbook/5ba9eb5b0110e7701d264575

總結

以上是生活随笔為你收集整理的Linux 二进制分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。