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

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

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

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

本文根據個人一些經驗來指導你,但願助你邁好進入這個新世界的一步。docker

方法

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

如下方法是很是基礎的。咱們開始執行靜態分析以發現須要經過動態分析深刻分析的代碼。可是咱們要使用什麼工具來操做?安全

靜態分析

我必須認可,我沒有時間評估互聯網上的不一樣工具。由於性價比我選擇了 binary ninja 工具。ide

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

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

這個軟件還能夠:ui

  • 在代碼中放置評論
  • 經過彙編或 C 修補二進制
  • 使用 API 開發本身的插件以加速分析過程
  • 使用從官方的 GitHub 可用的一堆插件
  • 其餘功能,我尚未使用

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

動態分析

動態分析能夠經過 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 公司的一些趣聞

相關文章
相關標籤/搜索