作者:D.泡沫
一說起.net的反編譯軟件,大家首先想到的就是Reflector,ILSpy,dotPeek等等。而dnSpy同樣是一款優秀的反編譯軟件,同時它是開源免費的。官方的描述是: dnSpy是一個調試器和.NET組件編輯器。 即使您沒有任何可用的源代碼,也可以使用它來編輯和調試程序集。
這個是官方的圖片,可以看出和VS的風格還是很像的,使用起來也有很多相似的地方,善於用VS的人,可以很快的上手這個軟件。當然除了這個深色的主題以外,還有淺色主題可以切換。
dnSpy使用ILSpy反編譯器引擎和Roslyn(C#/ Visual Basic)編譯器以及許多其他開源庫,可以編譯.Net Framework, .Net Core和Unity游戲部件,不需要源碼。今天將給大家演示一下,dnSpy強大的調試和編輯應用程序的功能。
1. Debug外部引用的Dll文件
首先准備一個簡單的程序,期待的結果是輸入人數得到促銷后的總價,界面如下:
看一下程序,其實就是簡單的取得輸入的人數,然后調用第三方類庫的方法,得到結果:
這里的Calculator.GetAmountByPromotion方法是_3rdCalculator的第三方類庫提供的,我們無法直接確定其內部實現。
輸入一下測試數據:
再輸入一下新的測試數據:
會發現很難推測出內部的邏輯。這個時候就可以進行debug了。
打開dnSpy.exe。這個時候請注意,由於這個項目用的是.net core並且是publish的,所以可以直接用dnSpy直接打開publish目錄下的要debug的dll文件。
在需要的地方打上斷點,然后使用attach的快捷鍵Ctrl+Alt+P,在彈出的列表里選擇
再點擊頁面的提交按鈕觸發事件:
這個時候可以看到結果顯示在下面Locals的窗口里面。
需要注意的是,如果是不需要publish的,而是直接把整個代碼放在IIS下,然后每次編譯就是一次發布的情況,不要直接使用代碼下面的bin目錄里的dll文件,因為IIS會把build出來的dll文件,動態生成一份出來,存到類似於\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\c8367e31\abdb5fb1\assembly\dl3下面的目錄里,這個時候要先搜索到你想debug的方法在哪個dll文件里,然后搜索到這個文件位置,再用dnSpy打開它,dnSpy會自動加載和這個dll有關聯的所有dll文件,然后啟動網站,這個再附加到w3p.exe上就可以了。
2. 調試應用程序
- 調試應用程序
還是以上一個例子為例,這次生成一個exe的文件。
代碼如下
運行,窗口如下:
打開dnSpy,找到exe文件的位置,打開要調試的dll文件:
在需要的地方打上斷點,點擊上面的Start開始調試:
彈出的窗口設置保持默認就可以,程序執行,輸入人數后,進入斷點,就可以正常調試了:
![此處輸入圖片的描述][13]
注意,一般dnSpy會把相關的dll都自動加入進來,但是如果是不在一個地方,工具檢測不到的,但是有依賴的,必須手動加入進來。
3. 修改exe文件的內容
dnSpy編輯dll文件的功能很方便,不用其他插件或者輔助,就可以進行修改。例如上面的例子,我想把計算邏輯增加超過10個人的時候,優惠更高,那么我可以直接修改dll里面的方法。
首先找到要修改的方法,然后在方法上點擊右鍵:
![此處輸入圖片的描述][14]
在彈出的新窗口上直接修改方法:
編輯結束后,點擊下面的Compile. 然后點擊保存所有。繼續點OK。
這個時候點擊exe文件,輸入人數,會發現比10個人的時候還要便宜了很多,就是代碼生效了:
以上就是比較常用的功能,當然dnSpy還有很多貼心和有用的功能,有待大家去發現。附上官方地址,請大家自己去挖掘了。謝謝大家。