<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      跟羽夏學 Ghidra ——窗口

      寫在前面

      ??此系列是本人一個字一個字碼出來的,包括示例和實驗截圖。本人非計算機專業,可能對本教程涉及的事物沒有了解的足夠深入,如有錯誤,歡迎批評指正。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閑錢,可以打賞支持我的創作。如想轉載,請把我的轉載信息附在文章后面,并聲明我的個人信息和本人博客地址即可,但必須事先通知我。

      你如果是從中間插過來看的,請仔細閱讀 跟羽夏學 Ghidra ——簡述 ,方便學習本教程。請認準 博客園寂靜的羽夏 ,目前僅在該平臺發布。

      前言

      ??如果通過Ghidra圖形界面來進行逆向分析工作,那么打交道最多的是各種形形色色的窗口,每個窗口各司其職,各有各的功能,這也是本教程的第一個重頭戲。下面開始介紹。

      CodeBrowser

      ??CodeBrowser應該是與我們打交道最多的窗口了,它也包含了各種小窗口:

      ??我們先說一下菜單的主要職能:

      • File :提供大多數文件操作的基本功能,包括打開/關閉、導入/導出、保存和打印選項。此外,一些選項是Ghidra特有的,例如工具選項,它允許您保存和操作CodeBrowser工具,并解析C源代碼,它可以通過從C頭文件中提取數據類型信息來幫助反編譯過程。
      • Edit :提供與編輯相關的操作。其中Tool Options命令會打開一個新窗口,允許你控制與CodeBrowser中可用的許多工具關聯的參數和選項?;謴湍J設置按鈕(恢復為默認設置)始終位于右下角。

      • Analysis :允許你重新分析二進制或選擇性地執行單個分析任務。
      • Navigation :這有助于文件內的導航。該菜單提供了許多應用程序支持的基本導航的功能,并為二進制文件添加了特殊的選項。雖然菜單提供了一種在文件中移動的方法,但在獲得導航可用選項的經驗后,您可能會使用工具欄選項或快捷方式。
      • Search :提供內存、程序文本、字符串、地址表、直接引用、指令模式等搜索功能。
      • Select :提供識別文件的一部分以用于特定任務的功能。選擇可以基于子例程、函數、控制流,或者只需突出顯示文件的所需部分。
      • Tools :包括一些有趣的功能,允許您在桌面上放置額外的SRE資源。其中一個最有用的是處理器手冊選項,它將顯示與當前文件關聯的處理器手冊。如果您試圖打開丟失的處理器手冊,系統將為你提供包含該手冊的方法(這個需要自己下載放置):

      • Window :允許您為工作流配置Ghidra工作環境。這個菜單十分重要,本篇會重點關注。
      • Help :提供豐富、組織良好和非常詳細的選項。幫助窗口支持搜索、不同視圖、收藏夾、放大/縮小以及打印和頁面設置選項。

      ??Ghidra有一個十分好的地方就是,任何菜單功能和工具欄功能,都是可以修改熱鍵的,沒有的可以自行添加:

      ??下面我們開始逐個輸入它的子窗體。

      Listing

      ??Listing窗口左側的邊距提供了有關文件的重要信息以及在文件中的位置。在列表窗口的右側(垂直滾動條的右側)還有一個額外的標記區域,它還提供了重要的信息和導航功能。滾動條指示您在文件中的位置,可用于導航。在滾動條的右側是一些信息顯示,包括書簽,提供了對文件的更多信息。

      ??這個窗口是打交道最多的窗口,這毋庸置疑。這個窗口的標題欄右側從左到關閉按鈕各有各的功能,下面從左到右依次介紹:

      • 復制:復制選中內容,如果不可復制,則會顯示錯誤信息。
      • 粘貼:從剪貼板拷貝到當前位置,如果不可粘貼,則會顯示錯誤信息。
      • 鼠標懸浮工具提示:如果選中,如果鼠標光標懸浮到一個位置,如果有信息,則會顯示內容。
      • 瀏覽區域調整:這個應該算是能用到的功能,點中它之后,就可以彈出一個調整條,調整顯示數據的寬度:

      • 比較差異:用于比較兩個文件之間的差異。
      • 快照:創建一個斷開的Listing窗體拷貝,也就是無論在新的窗體進行任何瀏覽操作,都不會影響到其他窗體。這對于同時看兩個函數會十分有用。
      • 概覽區域顯示:它會設置熵和概覽是否顯示。

      ??下面介紹窗口內的內容:

      • ① 邊距標記:用于指示當前光標的所在行。
      • ② 跳轉流指示線:跳轉指令如果滿足跳轉到指示。如果是虛線,則為條件跳轉;如果為實線,則為絕對跳轉。
      • ③ 聲明:顯示對函數堆??蚣懿季值淖罴淹扑?。Ghidra通過對堆棧指針和函數中使用的任何堆棧幀指針的行為進行詳細分析,計算函數堆棧幀(局部變量)的結構。
      • ④ 交叉引用:如果某個函數或者數據引用了該地址,就會顯示該條目。如果將光標懸浮在上面,就會顯示引用的函數匯編內容。

      Function Graph

      ??雖然匯編列表信息豐富,但通過查看基于圖形的顯示,程序流程可能更容易理解。這個功能在IDA中使用空格鍵就可以在匯編和圖標之間切換,而在Ghidra,在Window菜單中的Function Graph項目中。

      ??你會看到如下類似窗體:

      ??在圖形模式下,Ghidra一次顯示一個函數。Ghidra通過使用傳統的圖像交互技術(如平移和縮放)來進行圖形的導航。大型或復雜的函數可能會導致圖形變得非常雜亂,使圖形難以導航,右下角的衛星視圖就是解決這個問題的。
      ??Ghidra使用不同顏色的箭頭來區分函數塊之間的各種類型的流。此外,當將鼠標移到流上以指示方向時,流將變成動畫(見下圖)。以條件跳轉終止的基本塊生成兩種可能的流:默認情況下,滿足跳轉條件的箭頭是綠色,不滿足跳轉條件的為紅色。僅以一個潛在后續塊終止的基本塊使用藍色的線指向要執行的下一個塊。可以單擊任意箭頭以查看從一個塊到另一個塊的關聯轉換。由于默認情況下圖形和列表工具是同步的,因此在列表視圖和圖形視圖之間切換和導航時,文件位置通常保持一致。

      ??當我們鼠標點擊某個代碼塊,它的背景會顯示一個高亮的光圈,與此同時衛星圖也是:

      ??如果我們想導航,鼠標拖住移動可以改變位置:

      ??鼠標滾輪可以以鼠標指針為中心縮放:

      ??按住Ctrl鍵,可以鼠標框選多個代碼塊:

      ??每個代碼塊的位置都是可以拖動的:

      ??我們也可以將代碼塊組合/解散:

      ??當然,這些都是一個個功能小小的縮影,具體細節就不扒了,比如右鍵菜單的項目,下面我們先介紹幾個特殊的,先從代碼塊窗口開始:

      ??標題欄右上角的按鈕從左到右,依次介紹:

      • 背景色設置:該按鈕可以設置該代碼塊的背景色。
      • 交叉引用:點擊該按鈕就會顯示該代碼塊的交叉引用。

      • 全屏:將代碼塊部分全屏顯示。全屏之后該按鈕圖標改變,再次點擊恢復。
      • 組合:將代碼塊進行組合。
      • 恢復組合:將原來的代碼塊重新組合。

      ??下面介紹Function Graph右上角的幾個按鈕,去掉開頭的復制粘貼倆按鈕,去除最后一個關閉按鈕,開始從左往右依次介紹:

      • 跳轉到函數頭:該按鈕可以跳轉到所在函數的首地址。
      • 刷新:重新加載代碼塊圖形。
      • 重新布局:該按鈕可以更改代碼塊各種布局,自己可以自行挑選。
      • 代碼塊區域修改:和Listing的瀏覽區域調整的功能是一樣的。
      • 代碼塊焦點流線:設置當某個代碼塊獲得焦點時,代碼流指示線的樣式。
      • 快照:創建一個斷開的Function Graph窗體拷貝,也就是無論在新的窗體進行任何瀏覽操作,都不會影響到其他窗體。這對于同時看兩個函數會十分有用。

      Program Trees

      ??此窗口顯示了組織為文件夾和片段的程序,并為您提供了在自動分析期間優化組織的能力。片段是地址連續范圍的Ghidra術語。

      ??它是一個連接的窗口,因此單擊窗口中的片段可以將您導航到列表窗口中的該位置。

      Symbol Tree

      ??將文件導入到Ghidra項目中時,將選擇Ghidra加載程序模塊加載文件內容。當以二進制形式存在時,加載器能夠提取符號表信息。Symbol Tree窗口包括與程序相關的導入、導出、函數、標簽、類和名稱空間。

      ??這個窗口是十分重要的,提供了類似于命令行工具的功能,如objdump、readelfdumpbin。下面詳細介紹每個文件夾的職責。

      Import

      ??該文件夾列出了被分析的二進制文件導入的所有函數。只有當二進制文件使用共享庫時,它才有用。靜態鏈接的二進制文件沒有外部依賴,因此沒有導入。它列出導入的庫,其中包含從該庫導入的每個項(函數或數據)的條目。單擊符號樹視圖中的任何符號將所有連接的顯示跳轉到選定符號。

      Exports

      ??該文件夾列出了文件中的入口點。這些包括程序的執行入口點,如在其頭部分中指定的,以及文件導出供其他文件使用的任何函數和變量。導出的函數通常在共享庫中找到。導出的條目按名稱列出,當選擇導出時,相應的虛擬地址將在列表窗口中突出顯示。對于可執行文件,該文件夾始終至少包含一個條目——程序入口。Ghidra根據二進制文件的類型將該符號命名為entry或者_start。

      Functions

      ??該文件夾包含Ghidra在二進制文件中識別的每個函數的列表。如下圖所示,將鼠標懸停在符號樹窗口中的函數名上會生成一個彈出窗口,其中包含函數的詳細信息。作為加載過程的一部分,加載程序使用各種算法,包括文件結構分析和字節序列匹配,以推斷用于創建文件的編譯器。在分析階段,函數ID分析器利用編譯器標識信息來執行基于散列的函數體匹配,以便標識可能已鏈接到二進制的庫函數體的存在。當進行散列匹配時,Ghidra從散列數據庫(包含在Ghidra.fidbf文件中)檢索匹配的函數名稱,并將該名稱添加為函數符號。哈希匹配在解構二進制文件上特別有用,因為它提供了一種獨立于符號表存在的符號恢復方法。

      Labels

      ??該文件夾是與Functions文件夾等效的數據。二進制符號表中包含的任何數據符號都將列在該文件夾中。此外,無論何時向數據地址添加新標簽名稱,該標簽都將添加到Labels文件夾中。

      Classes

      ??文件夾包含Ghidra在分析階段識別的每個類的條目。在每一項下,Ghidra列出了識別的數據和方法,這些數據和方法可以幫助理解類的行為。

      Namespaces

      ??在該文件夾中,Ghidra可以創建新的名稱空間以提供組織方式,并確保分配的名稱在二進制文件中不沖突。例如,可以為每個已標識的外部庫或使用跳轉表的每個switch語句創建命名空間。

      Data Type Manager

      ??該窗口允許您使用數據類型存檔系統定位、組織數據類型并將其應用于文件。檔案代表了Ghidra對預定義數據類型的累積知識,這些數據類型是從最流行的編譯器包含的頭文件中收集的。通過處理頭文件,Ghidra可以理解公共庫函數所期望的數據類型,并可以相應地注釋反匯編和反編譯器列表。類似地,從這些頭文件中,Ghidra了解復雜數據結構的大小和布局。所有這些信息都收集到存檔文件中,并在分析二進制文件時應用。
      ??即使沒有加載程序,內置類型樹的根也會顯示在數據類型管理器窗口(CodeBrowser窗口的左下角)中,其中包含無法在數據類型存檔中更改、重命名或移動的基本類型,如int。除了內置類型之外,Ghidra還支持創建用戶定義的數據類型,包括結構、聯合、枚舉和類型定義。它還支持數組和指針作為派生數據類型。

      ??更多詳情使用介紹,將會在之后使用中涉及。

      Console

      ??CodeBrowser窗口底部的Console窗口用作Ghidra的插件和腳本輸出區域,包括自己開發的插件和腳本,并且是在處理文件時查找Ghidra正在執行的任務信息的地方。

      Decompiler

      ??Decompiler反編譯器窗口允許通過連接的窗口同時查看和操作二進制文件的匯編和C表示。Ghidra反編譯器生成的C表示并不總是完美的(所以不要過度依賴),但它在幫助您理解二進制文件方面非常有用。反編譯器提供的基本功能包括恢復表達式、變量、函數參數和結構字段。反編譯器通常還能夠恢復函數的塊結構,這種塊結構在匯編語言中往往變得模糊。
      ??反編譯器窗口顯示Listing窗口中所選函數的C表示。根據您使用匯編語言的經驗,反編譯代碼可能比Listing窗口中的代碼更容易理解。即使是初學者也應該能夠識別反編譯函數中的無限循環。

      ??如果要比較多個函數的反編譯版本,或者在列表窗口中移動到其他位置時繼續查看特定函數,可以使用快照按鈕打開其他(斷開連接的)反編譯器窗口。導出按鈕允許您將反編譯函數保存到C文件中。
      ??反編譯是一個非常復雜的過程,反編譯理論仍然是一個活躍的研究領域。與反匯編不同,反匯編的準確性可以根據制造商的參考手冊進行驗證。事實上,雖然Ghidra的反編譯器總是生成C源代碼,但反編譯器正在分析的二進制文件可能最初是用C以外的語言編寫的,反編譯器的許多面向C的假設可能根本不成立。
      ??與大多數復雜的插件一樣,反編譯器也有一些特性,其輸出的質量在很大程度上取決于輸入的質量。反編譯器窗口中的許多問題和不規則性可以追溯到底層反匯編的問題,因此如果反編譯代碼沒有意義,您可能需要花費時間改進反匯編的質量。在大多數情況下,這涉及使用更精確的數據類型信息注釋反匯編,這將在之后的博文中討論。
      ??這個窗口十分重要,之后會在實驗中繼續介紹如何配合使用。

      Bytes

      ??該窗口提供了文件字節級內容的原始視圖。默認情況下,字節窗口在CodeBrowser的右上角打開,并提供程序內容的標準十六進制轉儲顯示,每行16字節。該窗口兼作十六進制編輯器,可以使用窗口工具欄中的設置工具配置為顯示各種格式(扳手圖標)。在許多情況下,將ASCII顯示添加到字節窗口可能會有幫助。

      Defined Data

      ??該數據窗口顯示當前程序、視圖或選擇中定義的數據的字符串表示,以及相關的地址、類型和大小。與大多數列窗口一樣,您可以通過單擊列標題按升序或降序對任何列進行排序。雙擊窗口中的任何行會導致列表窗口跳轉到選定項的地址。
      ??當與交叉引用一起使用時,定義的數據窗口提供了一種方法,可以快速發現一個感興趣的項目,并只需點擊幾次即可跟蹤到程序中引用該項目的任何位置。

      ??當然,該列表可以設置過濾器,只需點擊該窗口標題欄上的齒輪按鈕:

      ??每次設置數據類型過濾器時,Ghidra將根據新設置重新生成定義的數據窗口內容。

      Defined Strings

      ??該窗口顯示已在二進制文件中定義的字符串,可以通過右鍵單擊列標題行來添加列。可能最有用列之一是Has Encoding Error標志,它可能表示字符集問題或字符串識別錯誤。除此窗口外,Ghidra中還提供了大量字符串搜索功能。

      Symbol Table

      ??該窗口提供二進制文件中所有全局名稱的摘要列表。默認情況下顯示八列,如下圖所示。該窗口具有高度可配置性,可以在顯示中添加和刪除列,以及在任何列上按升序或降序排序。前兩個默認列是名稱和位置。名稱只不過是在某個位置定義的符號的符號描述。

      ??符號表連接到Listing窗口,但提供控制其與列表窗口交互的能力。雙擊任何符號表位置條目將立即跳轉到列表視圖以顯示所選條目。這為快速導航到程序列表中的已知位置提供了一個有用的工具。
      ??同樣,它也可以設置過濾器(齒輪圖標),用于過濾自己需要的信息。

      Symbol References

      ??和Symbol Table差不多。此外,該窗口的內容由右上角的三個圖標(S、ID)控制。這些選項相互排斥,意味著一次只能選擇一個選項:

      • S :選擇此圖標時,窗口將顯示在符號表中選擇的符號的所有引用。
      • I :選擇此圖標后,窗口將顯示您在符號表中選擇的函數的所有指令引用。
      • D :選擇此圖標后,窗口將顯示您在符號表中選擇的函數的所有數據引用。如果未選擇函數入口點或函數未引用任何數據符號,則此列表將為空。

      Memory Map

      ??該窗口顯示程序中存在的內存塊的摘要列表。請注意,當討論二進制文件的結構時,Ghidra術語內存塊通常被稱為節。窗口中顯示的信息包括內存塊(段)名稱、開始和結束地址、長度、權限標志、塊類型、初始化標志,以及源文件名和用戶注釋的空間。起始地址和結束地址表示程序段在運行時映射到的虛擬地址范圍。

      ??雙擊窗口中的任何開始或結束地址,將列表窗口(以及所有其他連接的窗口)跳轉到指定地址。窗口工具欄提供了添加/刪除塊、移動塊、拆分/合并塊、編輯地址和設置基址的選項。當使用非標準格式反向工程文件時,這些功能特別有用,因為Ghidra加載程序可能沒有檢測到二進制文件的段結構。

      Function Call Graph

      ??在任何程序中,一個函數既可以調用,也可以被其他函數調用。函數調用圖窗口顯示給定函數的近鄰。出于我們的目的,如果Y直接調用XX直接調用Y,我們將Y稱為X的近鄰。當您打開函數調用圖窗口時,Ghidra確定光標所在函數的鄰居,并生成相關顯示。此顯示在程序文件中使用的上下文中顯示函數,但它只是全局的一部分。

      總結

      ??在本篇當中,我們介紹了基本常用的窗口,并做了詳細的了解。當然學會這些不是特別夠,這些并不完整,算是個拋磚引玉,剩余的功能還請自行探索。
      ??下一篇,我們就開始接觸逆向的部分,正式走入Ghidra的世界。

      下一篇

      ??跟羽夏學 Ghidra ——數據

      posted @ 2022-09-13 14:11  寂靜的羽夏  閱讀(6840)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧洲中文字幕一区二区| 国产短视频精品一区二区| 午夜福利片1000无码免费| 欧美性大战久久久久久| 国产一区二区三区内射高清| av天堂久久精品影音先锋| 99久久久国产精品消防器材| 永宁县| 伦理片午夜视频在线观看| 亚洲欧美日韩在线码| 国产在线乱子伦一区二区| 亚洲一区二区三区在线| 久久日韩精品一区二区五区| 精品熟女亚洲av在线观看| 在线日韩日本国产亚洲| 被灌满精子的少妇视频| 偷窥国产亚洲免费视频| 大庆市| 精品素人AV无码不卡在线观看| 精品中文字幕人妻一二| 国产成人精品日本亚洲直播| 亚洲一区二区无码影院| 亚洲成人av在线系列| 欧美牲交a欧美在线| 内射无套内射国产精品视频| 亚洲人成网站18禁止无码| 国产精品久久久久久av| av日韩在线一区二区三区| 午夜毛片不卡免费观看视频| 狠狠色噜噜狠狠狠狠色综合网| 日韩av天堂综合网久久| 日韩国产精品中文字幕| 可以直接看的无码av| 成人亚洲狠狠一二三四区| 亚洲高潮喷水无码AV电影| 亚洲中文字幕国产综合| 国产系列高清精品第一页| 日本喷奶水中文字幕视频| 东至县| 亚洲中文字幕在线观看| 强开少妇嫩苞又嫩又紧九色|