Reverse Engineering Basics By IDA

Reverse Engineering Basics By IDA

這篇文章主要說明如何針對 EXE or DDL 做程式邏輯運作上的分析,

如何可以在不瞭解組合語言、沒有原始程式碼的情況下還可以對程式邏輯做出初步的分析?

有哪些免費的工具可以運用分析,如何分析?

我們將以”小算盤”為例子來進行分析與討論。

什麼是 Reverse Engineering?

應用程式的誕生過程,不外乎是

程式碼 (C, Java , C#) ====> 經過編譯 ====> 產稱機器碼  or 中間碼  or 組合語言====> 電腦執行

Reverse Engineering 就是試著要將機器碼還原為程式碼的過程

也就是將:  機器碼 / 組合語言 =======>  程式碼

為什麼要做 Reverse Engineering?

什麼情況會需要做 Reverse Engineering ? 例如:

  • 應用程式為第三方開發,遇到一些相容性問題,沒有程式碼的狀況下,希望可以對該應用程式有初步的了解
  • 病毒或是可疑的程式。因為直接執行病毒時,病毒有可能會因為虛擬環境的關係,而不執行。這種情況下,我們就可以在不執行的狀況下,針對該病毒分析相關的行為。
  • 或是不確定是否為病毒,想跟深入了解該程式執行時會做哪些事情?

下載 IDA Pro

這個就是我們會用來分析 EXE or DDL 的主要工具,因為這個工具提供良好的使用者介面,讓 “分析” 變得容易

開啟分析檔案

開啟 IDA 之後,可以在 File > Open … 開啟所要分析的檔案

或是透過 Drag 將要分析的檔案拖曳到畫面,這邊舉例: C:\windows\system32\calc.exe

IDA OpenFile

在經過一連串的 loading  之後,就會看到下列的畫面

視窗上的資訊有些多,似乎有點凌亂,接著讓我們一一說明

IDA_pro

 Graph Overview

這是最好用的功能,因為這張圖說明了這個程式整體的架構,

程式的主要邏輯有哪幾個部分,因此,通常一開始想要對程式整體架構有一定程度了解,建議先從這個圖開始

另外,IDA 還有提供其他的 View,功能選單 View > Open Subviews

IDA View

 

View > Open Subviews  > Strings

Strings 也是一個相當實用的功能,因為它可以列出所有這個程式的 ASCII 的字元,例如:程式錯誤訊息、程式寄送的 email  address、往外連接的 Web Site URL等等。

舉例來說,下面我們就可以看到小算牌內部程式運作時,可能會出現的一些訊息。

儘管我們不一定執行到這些錯誤,但是至少可以對於可能會出現的錯誤能有一定的掌握。

IDA String

 View > Open Subviews  > Imports / Exports

接著要介紹的是 Imports 與 Exports

Imports 指的是這個應用程式運用到那些 functions 並且載入那些 DLL ,

這個例子來說,載入了 SHELL32 與 gdiplus 等 library 並且運用相關的 function ,列在 name 這個欄位

Exports 指的是這個應用程式提供那些 functions 讓其他應用程式使用

從應用程式使用的 functions 也可以推敲出這個程式可能可以做到的事情

大類來說,例如有沒有存取檔案、存取記憶體、存取 registry key  、存取網路等。

IDA Import

  Graph View

最後,針對圖形化的程式邏輯,可以在該區塊按右鍵 Text View or Graph View

Text View : 會列出相對印的組合語言 (不建議)

Graph View: 會列出該程式的邏輯區塊 (建議先從這個方式進一步分析)

 

IDA Text Graph View

 If ….Else

舉例來說,會分析出下列圖形,紅色與綠色就是程式的邏輯,也就是  If   A  then  紅色   Else  綠色

IDA analysis

透過這幾個步驟,就可以有效率的對一個應用程式有一定程度的掌握,而不需要完全研讀組合語言。

希望這篇文章對於艱深的 Reverse Engineering 能有一定程度的幫助。

Leave a Reply

Your email address will not be published. Required fields are marked *