日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

用Reflector和FileDisassembler配合反编译.net Windows程序

發(fā)布時間:2025/5/22 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Reflector和FileDisassembler配合反编译.net Windows程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用FileDisassembler反編譯Windows Application出現(xiàn)了問題,resx資源文件和cs文件不匹配,項目編譯根本通不過,把resx文件修改放入cs文件夾后,雖然運行沒有

問題,但是不能直接在窗體設(shè)計里面"可視地"修改控件,一來麻煩,二來不直觀,那么就應(yīng)該修改下源代碼,使其符合VS2008的源文件布局.

下面總結(jié)一下修改的步驟:

1.由于FileDisassembler會給每個命名空間生成一個目錄,保存這個空間的源代碼,而對于資源resx文件就是直接加在項目目錄下,所有要把它放回源碼目錄下.例如

對于項目文件夾里面的TryAssemb.Form1.resx,首先改為Form1.resx然后移動到TryAssemb目錄里面.

2.然后對窗體打開"視圖設(shè)計器",發(fā)現(xiàn)會出現(xiàn)下面的錯誤:



修改方法就是對所有Sy
stem.Windows.Forms.命名空間里面的控件需要全命名空間
的聲明,例如里面上圖的base.AutoScaleMode = AutoScaleMode.Font;就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;這樣VS2008就能識別到這個控件是要繪制在Form上面的.
?

PS.開始是的時候還以為要像VS一樣把Form1拆開成Form1.cs和Form1.Designer.cs.每次是都辛辛苦苦拆開,最后才發(fā)現(xiàn)原來根本不需要,^_^.

?

?

?

相信大多數(shù).Net程序員都有使用Reflactor的經(jīng)歷。無論出于什么目的,當(dāng)用Reflactor反編譯托管程序后,還想對其代碼加以修改,那么本文所列舉的可能是一份有用的參考。

?

用Reflactor的FileGenerator插件反編譯代碼后可以得到包括項目文件的源代碼,但代碼中存在各種問題,一般無法一次編譯通過,以下將詳談這些問題:


枚舉問題

?

為了代碼可讀,可能需要花點時間查閱metadata把int值修改回枚舉值,尤其是想利用窗體設(shè)計器的,VS2008可能還不理解int值。


屬性問題

?

比如一個叫Names的屬性被反編譯后,可能還原為的set_Names(names),get_Names()方法,逐個替換可能很慢,可采用正則表達式整體替換。
對于set_Xxx(xxx)方法,可替換
set_{[a-z]*}\(

\1 = (
對于get_Xxx()方法,可替換
get_{[a-z]*}\(\)

\1
然后,再修復(fù)個別被誤換的方法。


委托和回調(diào)函數(shù)問題

?

一般會被還原為add_Xxx(MethodsName)方法,需要改為 += MethodsName


資源問題

?

需要使用.Net Framework SDK 下的 resgen.exe 工具,反編譯嵌入資源文件*.resources為*.resx文件,
語法為:ResGen.exe *.resources *.resx,然后將*.resx包含入項目,就會自動和同名的窗體文件*.cs關(guān)聯(lián),如果沒有關(guān)聯(lián)可采用先排除再添加大法,一一搞定。


命名空間問題

?

如果需要切換到IDE的窗體設(shè)計器,而不出錯,則還需要在*.cs中添加比如System.Windows.Forms的命名空間前綴。


窗體設(shè)計器識別問題

?

需要把以下代碼
ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
替換為
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗體設(shè)計器才能正常識別。

轉(zhuǎn)載于:https://www.cnblogs.com/zguoq2002/archive/2012/05/26/2519040.html

總結(jié)

以上是生活随笔為你收集整理的用Reflector和FileDisassembler配合反编译.net Windows程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。