[Unity-28] 反編譯並修改DLL文件

大家開發過程中難免需要用一些第三方的插件,而很多插件提供商出於各種目的一般會將插件部分代碼編譯爲動態鏈接庫DLL。
有時候,我們需要對庫中的一些內容進行簡單的修改,例如我們項目中採用的一個DLL把處理文件的路徑寫死在DLL裏,但是此路徑與我們工程項目路徑規劃衝突,因此產生了修改此路徑的需求。
具體方法比較簡單,工具也都很好獲得,步驟如下。

一、準備工具

1.ILSpy:

一款免費的反編譯軟件。筆者用過多款反編譯軟件,從準確性到簡便性來看ILSpy都是首選。

2.ildasm.exe:

windows系統自帶程序。將DLL轉換成IL語言文件。
具體路徑是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe

3.ilasm.exe:

windows系統自帶程序。將IL語言文件生成DLL。
具體路徑是C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe

二、操作步驟

1.使用ILSpy打開DLL

在DLL中找到自己要修改的部分,如果找起來比較麻煩,可以在ILSpy中將DLL保存成源代碼,然後在源代碼中搜索關鍵字符進行定位。

2.使用ildasm.exe生成IL並修改

打開對應的DLL
然後如下圖操作,選擇Dump,點擊OK選擇路徑保存。
在這裏插入圖片描述
保存後會生成如下兩個文件
在這裏插入圖片描述
打開.il文件進行修改。

3.使用ilams.exe生成DLL

在Dos窗口中輸入如下命令,即可生成新的DLL
c:\windows\microsoft.net\framework\v2.0.50727\ilasm.exe /dll/resource=1.res 1.il

三、注意

相信大家都注意到了上文路徑中的加粗部分,這裏代表的是版本號。
這裏要着重說一下的是使用ilams.exe生成DLL的時候要選對版本,否則生成的版本不同可能會導致一些異常(在某些情況下)
那麼怎麼看原來DLL的版本號呢?
在上述第2步中,在ildasm軟件中點擊MANIFEST查看mscorlib的ver,即是原DLL版本號。
大家可以根據這個版本號在系統中尋找一個最接近的ilasm.exe來進行生成DLL操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章