Visual Studio 2022 | 偵錯工具中檢視反組解碼程式
前言
在學習逆向工程的過程中,會需要知道程式對應到編譯器所建立之指令的組譯程式碼,進而分析、修改…等等。
然而使用Visual Studio
來觀看程式的反組解碼程式是件非常簡單方便的事。
直接看看在Visual Studio
觀看反組解碼程式的結果畫面。
註:此處使用
Visual Studio 2022
為例,動態圖僅逐步執行幾個步驟,並非完整。
準備專案與偵錯程式
首先,我們使用Visual Studio 2022
來開個專案或是沿用HelloWorld
專案。
宣告個整數變數a = 1
,然後使用printf
印出這個變數的位址。
1 |
|
開啟反組譯碼視窗
注意事項:
- 首先該視窗與其他偵錯工具視窗一樣, 反組譯碼視窗只能在偵錯會話期間使用。
- 若要啟用反組譯碼視窗,必須在【工具(T)】→【選項(O)】開啟選項視窗,開啟「偵錯」→「一般」 中勾選[啟用位址層級偵錯]。
開始偵錯與開啟反組解碼視窗:
- 由於此處示範的是
x86
的偵錯模式,所以方案平台的選項是選擇x86
。 - 首先在程式的
int a = 1;
這行產生一個紅色圓圈的中斷點。 - 接著我們按【本機 Windows 偵錯工具】來進行偵錯。
- 此時進入了偵錯模式,並且程式運行到剛剛設定的中斷點;也開啟了一個主控台視窗。
- 此時可見
Visual Studio
偵錯模式下一些預設的視窗被開啟,像是下方的自動變數
、右方的診斷工具
…等等。註:這些視窗是預設開啟的視窗,可以透過設定或關閉進行調整,這邊就不詳細說明。
- 在偵錯模式下,點選【偵錯(D)】→【視窗(W)】→【反組譯碼(D)】。
注意:必須在偵錯模式中,視窗才會有反組譯碼的選項。
- 「反組譯碼視窗」預設放在中央與程式撰寫區塊在一起。
- 接著可以使用「逐步執行(F11)」來進行偵錯。
註:動態圖僅做簡單的示範。
偵錯工具無法顯示原始程式碼或反組譯碼
以下內容擷取於:Microsoft - Visual Studio 2022 偵錯工具無法顯示原始程式碼或反組譯碼
這個錯誤為:偵錯工具無法顯示目前位置的原始程式碼或反組譯碼。
此錯誤訊息的發生原因可能有幾種:
- 所叫用的中斷點位置可能沒有原始程式碼,可能是正在偵錯不支援反組譯碼的語言。
- 開啟「中斷點視窗」,找出中斷點並加以刪除。
- 若正在偵錯指令碼,可能會叫用中斷點,但是程式中卻沒有任何執行緒。
- 從【偵錯】功能表選擇「逐步執行」或「繼續」,以繼續偵錯。
- 安全性考量可能會禁止偵錯工具從正在偵錯的程式中讀取堆疊、執行緒、暫存器和其他的內容資訊。
- 正在偵錯
Web
應用程式,但沒有正確的使用權限來存取虛擬目錄時,最常發生這種情形。請將虛擬目錄的安全性設成「匿名」,然後再試一次。
- 正在偵錯
結語
使用「反組譯碼視窗」,在逆向工程學習中是了解組合語言的是相當重要的,所以透過反組譯碼來看見組合語言,就可以清楚看到程式是如何在電腦內運作。
註:以上參考了
Microsoft - 在 Visual Studio 偵錯工具中檢視反組解碼程式
Microsoft - Visual Studio 2022 偵錯工具無法顯示原始程式碼或反組譯碼
iT邦幫忙 - 記憶體地址空間和第一次反組譯(小碼農米爾)
iT邦幫忙 - 惡意程式x靜態分析x修改內容(唬唬)
Heresy’s Space - 一些比較少人知道的 VisualStudio 偵錯功能
Family with 220 icons by inipagi