.Net反編譯軟體
.Net反編譯軟體
https://www.cnblogs.com/xiandnc/p/10132491.html
一說起.net的反編譯軟體,大家首先想到的就是Reflector,ILSpy,dotPeek等等。而dnSpy同樣是一款優秀的反編譯軟體,同時它是開源免費的。官方的描述是: dnSpy是一個偵錯程式和.NET元件編輯器。 即使您沒有任何可用的原始碼,也可以使用它來編輯和除錯程式集。
此處輸入圖片的描述
這個是官方的圖片,可以看出和VS的風格還是很像的,使用起來也有很多相似的地方,善於用VS的人,可以很快的上手這個軟體。當然除了這個深色的主題以外,還有淺色主題可以切換。
dnSpy使用ILSpy反編譯器引擎和Roslyn(C#/ Visual Basic)編譯器以及許多其他開源庫,可以編譯.Net Framework, .Net Core和Unity遊戲部件,不需要原始碼。今天將給大家演示一下,dnSpy強大的除錯和編輯應用程式的功能。
- 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上就可以了。
除錯應用程式
除錯應用程式
還是以上一個例子為例,這次生成一個exe的檔案。
程式碼如下
此處輸入圖片的描述
執行,視窗如下:
此處輸入圖片的描述
開啟dnSpy,找到exe檔案的位置,開啟要除錯的dll檔案:
此處輸入圖片的描述
在需要的地方打上斷點,點選上面的Start開始除錯:
此處輸入圖片的描述
彈出的視窗設定保持預設就可以,程式執行,輸入人數後,進入斷點,就可以正常除錯了:
[此處輸入圖片的描述][13]
注意,一般dnSpy會把相關的dll都自動加入進來,但是如果是不在一個地方,工具檢測不到的,但是有依賴的,必須手動加入進來。修改exe檔案的內容
dnSpy編輯dll檔案的功能很方便,不用其他外掛或者輔助,就可以進行修改。例如上面的例子,我想把計算邏輯增加超過10個人的時候,優惠更高,那麼我可以直接修改dll裡面的方法。
首先找到要修改的方法,然後在方法上點選右鍵:
[此處輸入圖片的描述][14]
在彈出的新視窗上直接修改方法:
此處輸入圖片的描述
編輯結束後,點選下面的Compile. 然後點選儲存所有。繼續點OK。
此處輸入圖片的描述
這個時候點選exe檔案,輸入人數,會發現比10個人的時候還要便宜了很多,就是程式碼生效了:
此處輸入圖片的描述
以上就是比較常用的功能,當然dnSpy還有很多貼心和有用的功能,有待大家去發現。附上官方地址,請大家自己去挖掘了。謝謝大家。