Reverse Engineering Basics By IDA
這篇文章主要說明如何針對 EXE or DDL 做程式邏輯運作上的分析,
如何可以在不瞭解組合語言、沒有原始程式碼的情況下還可以對程式邏輯做出初步的分析?
有哪些免費的工具可以運用分析,如何分析?
我們將以”小算盤”為例子來進行分析與討論。
什麼是 Reverse Engineering?
應用程式的誕生過程,不外乎是
程式碼 (C, Java , C#) ====> 經過編譯 ====> 產稱機器碼 or 中間碼 or 組合語言====> 電腦執行
Reverse Engineering 就是試著要將機器碼還原為程式碼的過程
也就是將: 機器碼 / 組合語言 =======> 程式碼
為什麼要做 Reverse Engineering?
什麼情況會需要做 Reverse Engineering ? 例如:
- 應用程式為第三方開發,遇到一些相容性問題,沒有程式碼的狀況下,希望可以對該應用程式有初步的了解
- 病毒或是可疑的程式。因為直接執行病毒時,病毒有可能會因為虛擬環境的關係,而不執行。這種情況下,我們就可以在不執行的狀況下,針對該病毒分析相關的行為。
- 或是不確定是否為病毒,想跟深入了解該程式執行時會做哪些事情?
下載 IDA Pro
- IDA demo download: evaluate a limited version of our disassembler
- IDA 5.0 Freeware: free for non-commercial use.
這個就是我們會用來分析 EXE or DDL 的主要工具,因為這個工具提供良好的使用者介面,讓 “分析” 變得容易
開啟分析檔案
開啟 IDA 之後,可以在 File > Open … 開啟所要分析的檔案
或是透過 Drag 將要分析的檔案拖曳到畫面,這邊舉例: C:\windows\system32\calc.exe
在經過一連串的 loading 之後,就會看到下列的畫面
視窗上的資訊有些多,似乎有點凌亂,接著讓我們一一說明
Graph Overview
這是最好用的功能,因為這張圖說明了這個程式整體的架構,
程式的主要邏輯有哪幾個部分,因此,通常一開始想要對程式整體架構有一定程度了解,建議先從這個圖開始
另外,IDA 還有提供其他的 View,功能選單 View > Open Subviews
View > Open Subviews > Strings
Strings 也是一個相當實用的功能,因為它可以列出所有這個程式的 ASCII 的字元,例如:程式錯誤訊息、程式寄送的 email address、往外連接的 Web Site URL等等。
舉例來說,下面我們就可以看到小算牌內部程式運作時,可能會出現的一些訊息。
儘管我們不一定執行到這些錯誤,但是至少可以對於可能會出現的錯誤能有一定的掌握。
View > Open Subviews > Imports / Exports
接著要介紹的是 Imports 與 Exports
Imports 指的是這個應用程式運用到那些 functions 並且載入那些 DLL ,
這個例子來說,載入了 SHELL32 與 gdiplus 等 library 並且運用相關的 function ,列在 name 這個欄位
Exports 指的是這個應用程式提供那些 functions 讓其他應用程式使用
從應用程式使用的 functions 也可以推敲出這個程式可能可以做到的事情
大類來說,例如有沒有存取檔案、存取記憶體、存取 registry key 、存取網路等。
Graph View
最後,針對圖形化的程式邏輯,可以在該區塊按右鍵 Text View or Graph View
Text View : 會列出相對印的組合語言 (不建議)
Graph View: 會列出該程式的邏輯區塊 (建議先從這個方式進一步分析)
If ….Else
舉例來說,會分析出下列圖形,紅色與綠色就是程式的邏輯,也就是 If A then 紅色 Else 綠色
透過這幾個步驟,就可以有效率的對一個應用程式有一定程度的掌握,而不需要完全研讀組合語言。
希望這篇文章對於艱深的 Reverse Engineering 能有一定程度的幫助。