使用Reflector.FileDisassembler反编译DLL
Reflector for .NET 下載地址:http://www.aisto.com/roeder/dotnet/
Reflector.FileDisassembler.dll cs文件的工具下載地址 : http://www.denisbauer.com/Downloads/Reflector.FileDisassembler.zip
1.下載Reflector.FileDisassembler.zip,解壓后得到一些文件,其中Reflector.FileDisassembler.dll是已經(jīng)編譯好的,其它是它源碼;
2.打開Reflector,在view菜單下的Add-Ins,將Reflector.FileDisassembler.dll添加到里面;
3.open一個dll,exe,或mcl為后綴的文件,當然要支持.net的
4.選擇要反編譯的dll(會在列表中顯示),選擇Tools->File Disassembler,在右窗口會出現(xiàn)設置存放源碼位置的路徑,點擊產(chǎn)生就可以了!
但是使用FileDisassembler編譯成CS文件會有一個Bug, 就是變量、類和名稱空間有時會重命名。
幸好FileDisassembler發(fā)布的時候帶有源代碼,也就省得去Reflect一把了,畢竟機器生成的臨時變量名看起來還是很不爽的。修復這個bug很簡單,修改了一下CreateFile方法,同時添加了一個GetUniqueFileName方法,源代碼如下:
private?StreamWriter?CreateFile(string?directory,?string?fileName)?
{?
????directory?=?directory.Replace("<",?"_");?
????directory?=?directory.Replace(">",?"_");?
????directory?=?directory.Replace(":",?"_");?
????directory?=?directory.Replace("|",?"_");?
????directory?=?directory.Replace("?",?"_");?
????directory?=?directory.Replace("*",?"_");?
????directory?=?Path.Combine(this.outputDirectory,?directory);?
?
????ILanguage?language?=?this.LanguageManager.ActiveLanguage;?
????string?fileExtension?=?language.FileExtension;?
?
????fileName?=?fileName.Replace("<",?"_");?
????fileName?=?fileName.Replace(">",?"_");?
????fileName?=?fileName.Replace(":",?"_");?
????fileName?=?fileName.Replace("|",?"_");?
????fileName?=?fileName.Replace("?",?"_");?
????fileName?=?fileName.Replace("*",?"_");?
????fileName?=?Path.Combine(directory,?fileName);?
????fileName?=?Path.ChangeExtension(fileName,?fileExtension);?
?
????fileName?=?GetUniqueFileName(fileName);?
????this.WriteLine(fileName);?
?
????directory?=?fileName.Substring(0,?fileName.LastIndexOf('""'));?
????if?(!Directory.Exists(directory))?
????{?
????????Directory.CreateDirectory(directory);?
????}?
?
????StreamWriter?writer?=?new?StreamWriter(fileName);?
????return?writer;?
}?
?
private?Hashtable?fileNames?=?new?Hashtable();?
?
private?string?GetUniqueFileName(string?fileName)?
{?
????string?strExtension?=?Path.GetExtension(fileName);?
????fileName?=?fileName.Replace(strExtension,?"");?
?
????string?_fileName?=?fileName.ToLower();?
????bool?bFirstRename?=?true;?
????while(fileNames.Contains(_fileName))?
????{?
????????string?existFileName?=?(string)fileNames[_fileName];?
????????string?[]?efnParts?=?existFileName.Split(new?char[]?{?'""'?});?
????????string?[]?fnParts?=?fileName.Split(new?char[]?{?'""'?});?
????????for?(int?i?=?0;?i?<?fnParts.Length;?++i)?
????????{?
????????????if?(efnParts[i]?!=?fnParts[i])?
????????????{?
????????????????if?(bFirstRename)?
????????????????{?
????????????????????fnParts[i]?+=?'_';?
????????????????????bFirstRename?=?false;?
????????????????}?
????????????????fnParts[i]?+=?'x';?
????????????????break;?
????????????}?
????????}?
????????fileName?=?string.Empty;?
????????for?(int?i?=?0;?i?<?fnParts.Length;?++i)?
????????{?
????????????fileName?+=?'""'?+?fnParts[i];?
????????}?
????????fileName?=?fileName.Substring(1);?
????????_fileName?=?fileName.ToLower();?
????}?
????fileNames[_fileName]?=?fileName;?
????return?fileName?+?strExtension;?
}
轉(zhuǎn)載于:https://www.cnblogs.com/ceci/archive/2009/08/21/1551703.html
總結
以上是生活随笔為你收集整理的使用Reflector.FileDisassembler反编译DLL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随机系列生成算法(随机数生成)
- 下一篇: python 3.7 安装 win32