1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用Reflector.FileDisassembler反编译DLL

使用Reflector.FileDisassembler反编译DLL

时间:2019-05-04 10:00:19

相关推荐

使用Reflector.FileDisassembler反编译DLL

转自/wuliangbo

Reflector for .NET 下载地址:/roeder/dotnet/

Reflector.FileDisassembler.dll cs文件的工具下载地址 : /Downloads/Reflector.FileDisassembler.zip

1.下载Reflector.FileDisassembler.zip,解压后得到一些文件,其中Reflector.FileDisassembler.dll是已经编译好的,其它是它源码;

2.打开Reflector,在view菜单下的Add-Ins,将Reflector.FileDisassembler.dll添加到里面;

3.open一个dll,exe,或mcl为后缀的文件,当然要支持.net的

4.选择要反编译的dll(会在列表中显示),选择Tools->File Disassembler,在右窗口会出现设置存放源码位置的路径,点击产生就可以了!

但是使用FileDisassembler编译成CS文件会有一个Bug, 就是变量、类和名称空间有时会重命名。

幸好FileDisassembler发布的时候带有源代码,也就省得去Reflect一把了,毕竟机器生成的临时变量名看起来还是很不爽的。修复这个bug很简单,修改了一下CreateFile方法,同时添加了一个GetUniqueFileName方法,源代码如下:

privateStreamWriterCreateFile(stringdirectory,stringfileName)

{

directory=directory.Replace("<","_");

directory=directory.Replace(">","_");

directory=directory.Replace(":","_");

directory=directory.Replace("|","_");

directory=directory.Replace("?","_");

directory=directory.Replace("*","_");

directory=bine(this.outputDirectory,directory);

ILanguagelanguage=this.LanguageManager.ActiveLanguage;

stringfileExtension=language.FileExtension;

fileName=fileName.Replace("<","_");

fileName=fileName.Replace(">","_");

fileName=fileName.Replace(":","_");

fileName=fileName.Replace("|","_");

fileName=fileName.Replace("?","_");

fileName=fileName.Replace("*","_");

fileName=bine(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);

}

StreamWriterwriter=newStreamWriter(fileName);

returnwriter;

}

privateHashtablefileNames=newHashtable();

privatestringGetUniqueFileName(stringfileName)

{

stringstrExtension=Path.GetExtension(fileName);

fileName=fileName.Replace(strExtension,"");

string_fileName=fileName.ToLower();

boolbFirstRename=true;

while(fileNames.Contains(_fileName))

{

stringexistFileName=(string)fileNames[_fileName];

string[]efnParts=existFileName.Split(newchar[]{'""'});

string[]fnParts=fileName.Split(newchar[]{'""'});

for(inti=0;i<fnParts.Length;++i)

{

if(efnParts[i]!=fnParts[i])

{

if(bFirstRename)

{

fnParts[i]+='_';

bFirstRename=false;

}

fnParts[i]+='x';

break;

}

}

fileName=string.Empty;

for(inti=0;i<fnParts.Length;++i)

{

fileName+='""'+fnParts[i];

}

fileName=fileName.Substring(1);

_fileName=fileName.ToLower();

}

fileNames[_fileName]=fileName;

returnfileName+strExtension;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。