我們平時在工作中經常會遇到一些已經被編譯後的DLL,而且更加麻煩是沒有源代碼可以進行修改,隻能針對這個DLL的檔案進行修改才能得到我們想要的結果;本文将通過一個執行個體來示範如果完成一個簡單的修改;我們将會用到以下幾種工具;
1:反編譯工具ILSpy.exe:是個很不錯的反編譯軟體,而且是免費了;
2:微軟的工具ildasm.exe:這個是把DLL生成IL檔案的一個軟體,是微軟自帶了;可以在C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin找到該軟體;
3:微機的工具ilasm.exe:這個是把IL檔案重新生成DLL的功能,可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319找到該軟體;
我們建立一個WEB項目,模拟它要插入加密狗才能運作,當然這邊的加密狗是我們的一個比喻,執行個體很簡單七個步驟就可以完在;
步驟一:使用ILSpy.exe打開Web.dll檔案;檢視其源代碼的情況:

從上面反編譯出來的源代碼不難發現重點是在GetLicense()方法,這個也是我們要修改的内容,從上面可以看出在沒有修改前這個都是會提示要插入加密狗的;
步驟二:接下來就是要使用ildasm.exe把DLL這個檔案轉化成IL檔案;
把dll檔案轉儲為*.il檔案存到某個指定檔案夾裡,得到Web.il和Web.res兩個檔案,有時也會有*.resource檔案
步驟三:我們可以打開Web.il檔案,裡面有DLL生成的IL内容,我們很容易就可以定位到想要的這個方法,隻要讓它固定傳回true就可以達到修改成功,方法内的IL代碼就是我們要修改的内容;
步驟四:修改GetLicense()方法内的IL代碼,讓它固定傳回true;下面這個IL就是讓它傳回為true;修改完接着儲存IL檔案;
步驟五:當修改完IL檔案後要把它轉化成DLL檔案,打開DOC指令輸入進入到*.il的檔案夾,然後輸入命 令:c:\windows\microsoft.net\framework\v4.0.30319\ilasm.exe /dll/resource=Web.res Web.il
*1:要進入IL檔案的檔案夾 2:其中"/dll/"這個前面要有一個空格 3:.res檔案要在.il檔案前面,中間要有個空格
步驟六:運作完上面的指令後會生成一個新DLL檔案,然後把它複制到我們的站點下面:
步驟七:運作的結果:
完成上面的七個步驟就可以成功修改DLL檔案,當然本執行個體隻是一個簡單的修改,若要進行比較複雜修改IL代碼則要對IL知識有個相當的了解;下面是一個可能會經常要用到的IL傳回true跟false的代碼;