沒有Source Code 如何修改程式??

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用 Reflexil 搭配 ILSpy 或其他支援的反組譯軟體

Reflexil 是一個組譯編輯器插件目前支援 Reflector, ILSpy 和 Telerik’s JustDecompile.

下載連結

Reflexil Release 2.2 搭配 ILSpy version 3.2

前置動作,安裝

Reflexil 下載

下載 reflexil.for.ILSpy.2.2.bin.zip,不用下載AIO

作者有說

ILSpy version 3.2 (ILSpy 4 is not currently compatible with Reflexil, given the use of System.Reflection.Metadata, deprecating Mono.Cecil usage)
ILSpy 4 當前版本 ILSpy.2.2 並不支援

ILSpy 3.2 下載

下載完後就把全部的DLL放在同一個資料夾下,並開啟 ILSpy.exe

按下上方的齒輪UI 就可獲得下方藍色的Reflexil 修改框框.


組件修改

需求

目前組件 有個ClassA 類別,裡面有一個prop1屬性 型態是string, 我們希望在這新增另一個屬性

使用滑鼠右鍵點擊類別ClassA,我們可以看到很多方式可以注入新的程式碼

在這我們選擇inject property.

我們需要修改的是

  • Item Name (使用屬性的名稱)
  • Property Type(使用屬性類別)

選擇完後按下OK,我們就會發現prop2新屬性會出現在ClassA中.

新增完後不代表已經將修改儲存!!

我們需要點選組件,之後再按下Save AS 把本次修改儲存

日後我們就可以使用新的屬性在我們程式中了!!

小結

此插件還可以新增,插入許多東西時屬非常強大,有興趣的玩家可再自行深入琢磨.

此文作者:Daniel Shih(石頭)
此文地址https://isdaniel.github.io/modify-sourcecode/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^