簡介
反編譯的方式有很多種,其實最靠譜的還是IL反編譯。
如果不懂IL可以嘗試我這邊文章入門:http://www.wxzzz.com/278.html
不過我下面要說的不是IL這種底層的代碼反編譯,而是Reflector中的Reflexil插件進行反編
也許有人會說Reflector不就是反編譯了么,為什么還要用Reflexil這個插件? Reflector 僅僅是反編譯出源碼給你看,並不能在修改后編譯回去。所以我們需要使用Reflexil這個插件進行反編譯回去。
.NET 三種反編譯方式
這里順便介紹下我所知道的三種反編譯回去的方式:
- 直接修改IL代碼(當然,這比較難,需要熟悉IL匯編,但是也是最實用的。也許我會在以后的文章詳細闡述)
- 使用Reflector進行整個代碼項目的導出,然后用VS進行修改后編譯(在大型項目中,如果有很多其他的dll引用,也許會讓你寸步難行,無法使用VS編譯通過,所以大型項目直接用IL匯編反編譯關鍵代碼即可)
- 使用Reflexil插件進行直接反編譯(似乎這種要比第二種方法要好的多,至少很省事。其實實際使用起來也不是特別的方便,本文會進行一個稍微詳細的使用介紹)
Reflexil 安裝
在此之前你需要先去下載Reflector和Reflexil插件,這些你可以去百度或谷歌上面下載到。(如果你不會…那下面的文章不用看了)
下載好之后首先安裝Reflector程序,安裝完畢后在把Reflexil插件放到Reflector程序目錄下面(其實是個dll文件而已),如下圖所示
然后打開Reflector,在工具欄依次點擊 Tools -> Add-Ins... ,如下圖所示
然后在彈出的界面中點擊+號選擇剛剛拷貝到Reflector中的Reflexil插件的dll文件,如下圖所示
然后點擊Close ,此時程序的 Tools 欄目下已經有了 Reflexil 插件選項。
要反編譯的示例項目
本文反編譯一個Winform程序(當然,你也可以反編譯.NET 的其他 dll 文件),程序如下所示:
圖
代碼
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void btnTest_Click(object sender, EventArgs e)
- {
- MessageBox.Show("你好");
- }
- }
我們把這個exe程序進行反編譯吧
開始反編譯工作
首先在Reflector工具欄中依次點擊 Tools -> Reflexil 打開 Reflexil 的窗口,如下圖所示
然后打開你要反編譯的程序集,我們編譯自己寫的Winform的exe程序作為測試吧,如下圖所示。
然后我們選中我們要反編譯的方法,在Reflexil插件中進行反編譯,如下圖所示。
可以直接在“你好”的那一欄進行點擊右鍵選擇 “Edit” 進行直接的編輯
也可以在圖中的這個選項卡( Instructions ) 中的表的任意一欄點擊右鍵選擇,如下圖所示
你可以直接Edit編輯單個文本,也可以Replace all with code... 編輯整個class的內容。
如果你選擇的是Replace all with code... 來編輯整個內容的話,你需要在編輯完成后,在界面的左下角點擊Complile 做編譯操作。
但是似乎這個插件的編輯整個class的功能有缺陷,有些代碼識別不出來。所以還是看情況使用吧,如果Replace all with code..不行,就直接選 Edit 編輯我們所選的內容即可。 我這里將“你好” 修改為 “你好,歡迎訪問我的博客,www.wxzzz.com”。如下所示
最后一步操作,依次在Reflector項目中點擊右鍵 -> 選擇 Reflexil -> 選擇 Save as..
保存即可,這樣就完成了修改代碼,編譯成功。如圖
哈哈,反正看圖不看文字應該也可以直接結束這篇文章。
以下是我反編譯之后的程序下載地址,你可以作為練習再次反編譯:TestWinform.Patched






