2012-06-07 32 views

回答

1

直接編輯已編譯的程序集很粗略。我會用decompiler將它反編譯回源代碼並修復它。把它放回到源代碼管理中。

+0

你能定義「粗略」嗎? – frumbert

+0

[手繪](http://www.urbandictionary.com/define.php?term=sketchy)基本上意味着你要麼不應該這樣做,或者實在是太難以得到的合理時間內正確完成。我的觀點是:不要嘗試編輯二進制程序集;將它們反編譯爲源代碼,然後才能正常使用。通常十歲上下。 – bluevector

+0

我評估是否將是更容易從DOTNET的黎明採取這種古老的DLL,只是編輯需要改變,並再次將其保存在一個小東西 - 或者經過不必再次生成它的過程從頭開始(這是我看過的大多數反編譯器都要求我做 - 他們向我展示代碼,但我必須手動再次創建它)。哪個花錢。 – frumbert

0

所以,事實證明,它更容易

編輯DLL用十六進制編輯

比它要重新開始這是通常的建議。

1

步驟#1:拆卸組件。

使用下面的命令來拆卸您的.NET EXE或DLL:

ildasm /out=assembly_name.il assembly_name.dll 

(更換您的DLL或EXE名稱assembly_name.dll)。

這將輸出大量的數據文件。我們對這些感興趣:

  • * .resources - 二進制資源文件。
  • assembly_name.res - 資源清單。
  • assembly_name.il - 實際的MSIL代碼。

步驟#2:編輯資源文件。

準備修改後的/新的資源,它的名字並不重要,但格式應該與最初包含在程序集中的格式相同(例如替換位圖的位圖,圖標的圖標)。

使用資源編輯器編輯資源文件。我使用Lutz Roeder的Resourcer for DotNet(http://www.aisto.com/roeder/dotnet/),它是免費軟件。順便說一下,同一個作者也寫了Reflector.NET,這是一個非常棒的.NET開發工具。

如果您使用的Resourcer,這裏是所需的步驟:

  • 打開.resources文件要修改並重新命名原始資源項目。
  • 按Ctrl-F插入文件並從您的文件系統中選擇修改後的版本。
  • 將新項目重命名爲與上一個項目具有相同的原始名稱(您不能複製/粘貼該項目,出於某種原因,它只是複製整個項目而不是僅包含文本)。

步驟#3:重新裝配組件。

使用下面的命令來拆卸您的.NET EXE或DLL:

重要:這會覆蓋原來的DLL/EXE!

ilasm /resource=assembly_name.res /dll /output=assembly_name.dll /key=signing_key.snk assembly_name.il 

(將assembly_name.dll替換爲您的dll或exe名稱,當然如果需要的話將/ dll更改爲/ exe)。

簽名密鑰參數是可選的,如果原裝配簽署時,才需要。

當然,如果它是由別人來防止回火簽字,你將不能夠除非您提供原始簽名密鑰,我以爲你不會有使用修改後的裝配。但這就是.NET的工作原理。