C# & dnspy 使用總結--逆向分析工具
dnspy工具: 非常優秀的C#的反編譯器
一、除錯
1.1 載入模組: 直接將exe或者dll,拖到dnspy中即可。或者 開啟exe,執行起來就會,相關的模組會自動載入進來。
1.2 快捷鍵和VS除錯的快捷鍵相同, 記不住可以手動點;
1.3 附加程序;
二、多程序除錯
2.1 當子程序起來後,另外起dnpsy使用附加的方式,可以進入除錯。
這樣做是可以除錯,但是這樣看手速... 如果你附加過慢,可能關鍵函式已經跳過了;最主要的問題是如果使用dnspy的附加功能,很多函式的區域性變數顯示不出值,提示:程序不安全,或者被優化;這時,我們應該選擇方式1.2。
2.2 dnspyA啟動除錯主程序,到起程序ProcessStart處斷下來,這時可以見到,第一個引數是子程序名,第二個引數是啟動引數; 我們再啟動一個dnspyB,按照這個啟動引數啟動,子程序即可;
注意:再windows系統中,啟動引數需要修改:去掉頭尾的字串,"""" 改為 "" , \ 改為 \\ ;
三、修改模組
1.1 如果可執行檔案沒有加殼、加混淆,dnspy基本可以完全的顯示出C#的原始碼;
1.2 修改了程式碼可以儲存模組。
1.3 修改方式: 編輯C#方法、修改IL指令等,修改完後需要編譯方法,儲存模組;
四、斷點: dnspy的斷點也是很強大
條件斷點:
五、區域性變數、監視:可以檢視記憶體值
值得注意的是,程式最好使用dnspy啟動,這樣相比附加程序的方式,可以看到更更多的記憶體值;附加程序往往顯示:記憶體
六、逆向程式碼
我們自己建立一個C#的控制檯程式,編譯好,然後使用dnspy開啟,你會驚訝發現,基本上可以完全的還原始碼;
所以,逆向程式碼的時候,我們只需要將關鍵的演算法位置摳出來即可,參考裝置使用了什麼資源,我們拷貝過來,參考裝置如何載入資源,我們也如何載入資源,參考裝置使用了什麼dll,我們也add 到工程中使用;
七、缺陷:
6.1 從dnspy 3.0 開始:搜尋功能容易使得dnspy崩潰,據說時遞迴查詢導致的;