在去年九月份的時候,我分享了幾款反編譯工具,里面提到了dnSpy,但是實際上,我幾乎沒怎么用過它,只是在Github上大概看了一下,知道它很強大,能夠反編譯、調試、編輯C# DLL。直到前兩天,我分享了一下用ILspy
配合reflexil
修改現有.net DLL里面的常量參數,這時有友友再次提到dnSpy
,這才使我想起了它,決定趁這次機會學習一下,領略一番神器的風采。
dnSpy
在Github的熱度還是很高的,已經達到了19k Star
,它整合了眾多強大的開源工具:
ILSpy decompiler engine (C# and Visual Basic decompilers)
Roslyn (C# and Visual Basic compilers)
dnlib (.NET metadata reader/writer which can also read obfuscated assemblies)
VS MEF (Faster MEF equals faster startup)
ClrMD (Access to lower level debugging info not provided by the CorDebug API)
Iced (x86/x64 disassembler)
有了這些開源工具,使dnSpy
變得非常強大。
目前release
為2020年12月8日更新的V6.1.8
。接下來進入主題,我們今天依然只是編輯DLL,這里我是下載的dnSpy-net-win64.zip。
解壓后雙擊dnSpy.exe
,會彈出類似VS的界面。
前面我用ILspy
和reflexil
來修改DLL里面的超時時間,這回借助dnSpy
神器來嘗試修改一下,直接將DLL拖拽到dnSpy。
,找到需要修改的位置,右鍵
->編輯IL指令
把1000
改為120000
后,點擊確定
即可在代碼界面看到我們剛才修改后的值。
此時,點擊文件
->保存模塊
,便可保存修改后的DLL。
整個過程操作起來,確實比ILspy
配合reflexil
這個組合要方便得多。據說dnSpy
還可以調試,我們來試試看,這里我創建一個簡單的窗體程序,拖拽一個按鈕,添加一個點擊事件。
我們發布編譯一下。
這里把剛才生成的DLL拖拽到dnSpy
中。
點擊啟動,會彈出一個對話框,先默認即可,點擊對話框確定
,便會啟動我們的程序。
我們在dnSpy
加上斷點來假巴意思調試一下。可以看到,當我們點擊按鈕時,會暫定到剛才打斷點的位置,點擊繼續,讓整個流程走完。
現在我們來修改一下點擊事件。
這里我們新加入一個變量,用于累加點擊次數。
可以看到,dnSpy
會提供類似VS的智能提示,完成后,點擊右下角的編譯,編譯器會自動為我們優化代碼,dnSpy
會實時更新我們修改后的代碼,我們先把修改后的代碼保存一下,然后點擊原來的exe程序。
該文章在 2023/8/8 11:38:52 編輯過