.NET Reflector + ILSpy 反编译过程
目錄
前言
一、源碼怎么導出?
?二、資源文件處理
1.使用Resgen做文件轉換
2.使用ILSPy導出的資源文件?
三、引用的處理
1. 外部引用
2.框架引用
四、錯誤處理
五、遍歷問題
六、app.config
七、創建窗體Designer文件
1.創建designer文件
2.刪除代碼
3.控件加上命名控件
4.報錯處理:
System.ComponentModel.ComponentResourceManager?manager未聲明或從未賦值。
?總結
前言
最近開始一個窗體項目的反編譯任務。使用了.NET Reflector 10 和ILSPy 兩個軟件進行反編譯。而后合并兩個軟件的導出的源碼。
下面整理兩個軟件的源碼導出 以及導出后代碼問題的處理。
???
一、源碼怎么導出?
Reflector
項目右鍵,Export Source Code(導出源碼)
?導出的源碼結構如下,導出的項目按命名空間一層建一個文件夾
?ILSpy:
對比兩個軟件導出的源碼,我這里使用的是.NET Reflector 導出的源碼。
選擇源碼目錄下的.csproj文件,使用VS 2019 打開 。接下來針對源碼問題進行處理。
?二、資源文件處理
?Reflector :資源文件是.resources(二進制)的格式。
1.使用Resgen做文件轉換
可以使用微軟的Resgen.exe(通用資源轉換實用工具)將.resources(二進制)文件轉成.resx文件(XML)
具體方法見:
Resgen.exe(資源文件生成器) - .NET Framework | Microsoft Docs
資源文件在最外層,轉成.resx文件后,需要移動到對應的窗體目錄下。
2.使用ILSPy導出的資源文件?
ILSPy: 代碼保存后,無需轉換資源文件。直接將文件移動到對應目錄下。
處理完后,使用記事本的方式打開.csproj文件,將EmbeddedResource節點下的.resources內嵌資源刪除。
或者打開項目,把這些資源文件從項目中移除,然后將.res文件分別包括到項目中。
三、引用的處理
1. 外部引用
Reflector導出的源碼,引用是失效的。 需要重新引用
?
2.框架引用
System. 這種引用失效,可能是框架版本太低,不支持。修改下就好了。
我這邊的項目是net 2.0 。修改成net 4.0 就可以了
?
四、錯誤處理
“global::System.Runtime.Versioning.TargetFrameworkAttribute”特性重復
把報錯這一句刪除
五、遍歷問題
錯誤信息1:無法在此范圍中聲明名為“item”的局部變量或參數,因為該名稱在封閉局部范圍中用于定義局部變量或參數
將item這個別名修改成其他的就可以了
錯誤信息2:“IEnumerator”: using 語句中使用的類型必須可隱式轉換為“System.IDisposable”
一個類中可能會有多個遍歷。從ILSPy導出的源碼中找到對應的類,直接拷貝過來替換報錯的類就OK了。
六、app.config
Reflector導出的源碼 ,app.config是空的。
ILSpy 里有完整的配置信息。
因此這里也是從ILSPy導出的源碼拷貝過來替換
?
七、創建窗體Designer文件
1.創建designer文件
在項目目錄下,復制一個.cs 窗體文件 ,名字修改為 窗體名.Designer.cs
2.刪除代碼
打開項目,將Deigner文件包含在項目中。 保留控件聲明 還有 Dispose?、 InitializeComponent() 方法。刪除 : Form 窗體繼承 、窗體加載事件、控件事件?以及其他業務處理方法。刪除using 、
將類的修飾符修改為partial
在.cs文件里 和上面做相反的操作,在public 之后加上partial
3.控件加上命名控件
將 鼠標移動到 報錯的地方,點擊顯示可能的修補程序。就可以看到該控件在哪個命名空間之下。
?
修改后為
?
4.報錯處理:
System.ComponentModel.ComponentResourceManager?manager未聲明或從未賦值。
查看窗體設計器時,System.ComponentModel.ComponentResourceManager?manager未聲明或從未賦值。
處理方法:將?類名manager 修改為 resources ??
?總結
?1.反編譯后的源碼調整 可以參照有源碼的窗體項目進行對比,然后進行修改。
?2.目前項目可以調試起來正常登錄,代碼和源代碼還是會有一些出入的,但在沒源碼的情況下,只能根據這個項目來了 ,后續有其他問題再繼續記錄~?
總結
以上是生活随笔為你收集整理的.NET Reflector + ILSpy 反编译过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea 项目jar反编译java_带你
- 下一篇: python语言1002python语言