RE 逆向工程初學者指南:方法和工具

簡評: RE 兩種分析,靜態、動態。好好分析靜態因爲能夠解決 70 % 的問題。介紹了一些工具和方法。Enjoy yourself.

最近幾天,我決定試水逆向工程,即使在計算機和編程相關領域有一定的基礎,我也被很多信息和操作的代碼所困擾,這讓我很蒙圈。

逆向工程乍看起來似乎很複雜,但是通過一些好方法和工具包,一切都變得清晰而唾手可及。

本文根據我的一些經驗來指導你,希望助你邁好進入這個新世界的一步。

方法

開始操作,你下載了你的第一個二進制文件,然後...該做什麼?逆向工程需要兩種類型的分析,靜態和動態。靜態分析將幫助你更好地瞭解二進制的內容,而動態分析則可讓你逐步跟蹤每個註冊表中發生的變化,使用哪些系統調用等。

以下方法是非常基礎的。我們開始執行靜態分析以發現需要通過動態分析深入分析的代碼。但是我們要使用什麼工具來操作?

靜態分析

我必須承認,我沒有時間評估互聯網上的不同工具。因爲性價比我選擇了 binary ninja 工具。

binary ninja 專門用於靜態分析,提供了一個帥炸天的 GUI,當你處理大量信息時,它簡直是無價之寶!

如上圖所示,binary ninja 顯示可執行文件的整個調用圖,可以簡化了解每個塊如何交互在一起的方式。此外,可以通過右下角的選擇菜單輕鬆切換視圖。最後,左側列舉每個調用的函數,只需點擊鼠標即可直接訪問。

這個軟件還可以:

  • 在代碼中放置評論
  • 通過彙編或 C 修補二進制
  • 使用 API 開發自己的插件以加速分析過程
  • 使用從官方的 GitHub 可用的一堆插件
  • 其他功能,我還沒有使用

注:這有個 demo version 是免費的,對新手足夠了。

動態分析

動態分析可以通過 gdb,radare2 等各種工具完成。從我個人的經驗來看,radare2 就算了。因爲,沒有 stylesheet,我完全無法記住快捷鍵,這讓我浪費了很多時間!而 gdb 似乎做的還不錯,而且,gdb 可以使用 peda(Python Exploit Development Assistance for GDB)來提升體驗,通過調試和顯示反彙編代碼,寄存器,調試時的內存信息來增強 gdb 的顯示。

以下是增強型CLI:

範例

爲了向你展示如何應用和使用這種方法,我選擇展示如何成功地逆向卡內基梅隆大學開發的第三階段的二進制炸彈。

這是第三階段的入口點:

假設: 解決方案似乎有 3 個組件,兩個整數和一個字符

讓我們突破 0x08048bbf 地址看看寄存器的狀態。

輸入嘗試: 1 2 3

Ok,累加器此時狀態,意味着參數數量傳遞給了 sscanf。這證實了我們之前的假設。實際上,至少需要三個值才能傳遞給下個 block。

下面的 blocks:

解釋

  1. 檢查第一個整數是否高於 0x7。如果是,炸彈會爆炸(圖片中未顯示)
  • 我們跳到與我們第一個參數對應的情況

  • 將 BL 寄存器設置爲 0x6b,並將第三個參數比較爲 0x7b。如果值相等,我們跳到下一個塊,否則炸彈爆炸。

  • 檢查第二個參數是否等於先前設置的 BL。如果沒有,炸彈爆炸。

因此,我們可以假設密碼應該是:

  • 3:代表第三種情況
  • k:對應於 ascii 值 0x6b
  • 251:對應於十進制值 0x7b

讓我們試試吧!

挑戰完成了!正如你所看到的,這個挑戰並不需要太多的動態分析,但是這是非常少見的。

我選擇了這個範例,是爲了告訴你進行靜態分析的重要性,做好靜態分析,幾乎可以完成 70% 的工作。所以,仔細分析每行代碼以達到你的目的!

結論

正如上面已經證明的那樣,每個人都可以使用逆向工程。然而,在內存管理以及編程等方面擁有更全面的知識體系,還是有必要的。事實上,它肯定會幫助你快速確定必須集中精力進行調查以修補或繞過安全措施。此外,耐心和奉獻精神能夠幫助你在 RE 道路上越走越好。

爲了幫助 RE Linux 32/64 位版本,我創建了一個包含 docker 映像的 git 倉庫。這裏有所需的一些工具。

最後祝您武運隆昌。


原文鏈接: RE guide for beginners: Methodology and tools
推薦閱讀: 關於 Google 公司的一些趣聞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章