開發者嘗試使用 OllyDbg 反組譯 C# 程式以查看子視窗 Label 屬性,這在本質上就是「殺雞用牛刀」且方向錯誤。本文指出正確的工具選擇與逆向策略。
核心誤區分析
| 誤區 | 正確認知 |
| 用 OllyDbg 看 C# 程式 | C# 編譯為 IL (中間語言),非原生機器碼,OllyDbg 設計用於 x86/x64 原生碼 |
| 反組譯查看控制項屬性 | 屬性屬於中繼資料,直接反編譯原始碼或用 Spy++ 即可獲得 |
| 只能看主視窗 .text 區塊 | 反編譯工具可完整還原所有類別、方法、屬性 |
推薦工具鏈
1. 查看控制項屬性 (設計階段/執行階段)
- Spy++ (Visual Studio 內建):
工具 > Spy++,可即時檢視任何視窗的 Handle、類別、樣式、屬性
- Snoop (WPF 專用):更強大的 WPF 視覺樹檢查工具
2. C# 反編譯查看原始碼 (最推薦)
| 工具 | 特點 | 適用場景 |
| dnSpy | 開源、支援除錯、可編輯 IL、中文介面 | 首選:完整專案分析、動態除錯 |
| ILSpy | 開源、輕量、支援反編譯為 C#/VB/IL | 快速瀏覽單一組件 |
| dotPeek | JetBrains 出品、整合 Visual Studio、導航優秀 | 大型專案結構分析 |
| JustDecompile | Telerik 出品、介面友善 | 入門者友善 |
3. 實戰步驟:用 dnSpy 查看 Label 屬性
- 下載 dnSpy (GitHub Releases)
- 拖入目標
.exe 或 .dll
- 展開命名空間 → 類別 → 找到目標視窗類別 (如
ChildForm)
- 查看欄位定義:
private System.Windows.Forms.Label label1;
- 查看初始化代碼:
this.label1.Text = "Hello"; this.label1.AutoSize = true;
進階:動態除錯驗證執行時屬性
dnSpy 支援附加至執行中進程:
Debug > Attach to Process 選擇目標程式
- 在關注方法設中斷點 (如
ChildForm_Load)
- 觸發功能,即時檢視
this.label1.Text 等執行時值
總結
C# 逆向工程絕不應使用 OllyDbg。善用 Spy++ 看屬性、dnSpy/ILSpy 看原始碼、dnSpy 動態除錯看執行時值,才是專業、高效、正確的路徑。
- 上一篇文章: C 語言迴圈陷阱:為什麼這段 while 迴圈不是執行 6 次?
- 下一篇文章: Android 5.0+ 完全屏蔽 Home 鍵技術方案:原理、限制與替代實作
Copyright ©
程式碼之家 All Rights Reserved