使用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是已经编译好的,其它是它源码;
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方法,源代码如下:
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;
}
转载于:https://www.cnblogs.com/ceci/archive/2009/08/21/1551703.html
使用Reflector.FileDisassembler反编译DLL相关推荐
- [C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程
截图 下载地址 Reflector.NET反编译工具 v8.5绿色版+注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflecto ...
- 反编译DLL并修改DLL中的内容
使用场景:针对当前用户因不愿意进行软件版本升级,但又希望可以解决当前问题,此时可以考虑通过反编辑DLL进行修改内容,然后重新生成新的DLL 操作步骤: 1.首先使用ILSpy.exe反编译DLL,查看 ...
- NX二次开发-C++使用IDA Pro反编译dll,追踪查看里面使用的UFUN API函数(三部曲1)
一年前我写过一个C#反编译dll查看代码系列 NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数(三部曲1) NX二次开发- ...
- Unity3d 反编译破解游戏 简单示例 使用ildasm反编译DLL修改然后重新编译DLL
因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码.这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全. 首先我们新建一个工程,创建一 ...
- 使用反编译工具反编译Dll,编译成C#
今天刚刚开通博客,就迫不及待把今天遇到的一个问题写出来分享,呵呵! 这几天我需要对dll进行反编译,下面是我的步骤, 1 . 单击 http://xiazai.xiazaiba.com/Soft/R/ ...
- 反编译DLL并修改再生成DLL
一. 用到的工具: 1:反编译工具ILSpy.exe:是个很不错的反编译软件,而且是免费了: 2:微软的工具ildasm.exe:这个是把DLL生成IL文件的一个软件,是微软自带了:可以在C:\Pro ...
- 新生替代Reflector的反编译软件ILSpy
做个记号 http://wiki.sharpdevelop.net/ilspy.ashx Reflector 7以后收费了,中文支持还不好 转载于:https://www.cnblogs.com/ja ...
- 用Reflector和FileDisassembler配合反编译.net Windows程序
用FileDisassembler反编译Windows Application出现了问题,resx资源文件和cs文件不匹配,项目编译根本通不过,把resx文件修改放入cs文件夹后,虽然运行没有 问题, ...
- .dll反编译工具Reflector的使用
这个软件经常更新,可以在本词条提供的扩展阅读提供的链接中下载最新的版本. 默认情况下,Reflector会打开一组公共程序集(mscorlib.System.System.Data.System.Dr ...
最新文章
- 想做数据分析?这个比赛适合你!
- Hibernate Shards 数据的水平、垂直切割(二)- Hibernate Shards基本演示
- Python网络编程2:创建套接字和套接字对象的内建方法
- 详解python正则\b和\B的区别
- vue 页面A转到页面B,B页面停留在A页面的滚动位置
- java8多线程运行程序_线程,代码和数据–多线程Java程序实际运行的方式
- make找不到linux内核函数,linux内核make menuconfig出错
- 【转】Win2008 r2 远程桌面授权已过期的解决办法
- python解析html的库_python解析html开发库pyquery使用方法
- 新产品Wyn Enterprise 详解,立即预约公开课
- html语言中div的用法,htmldiv标签怎么用
- multisim安装后无法连接数据库_Kepserver连接Mysql教程(一)MySQL5.5数据库安装
- linux根据端口号查询项目路径
- win7x64 连接oracle 客户端 vs 2010调试 提示“ORA-12154: TNS: 无法解析指定的连接标识符 ”
- 数据挖掘第三版课后习题
- django jwt token 令牌
- SpringBoot整合Dubbo
- python北京房价预测_Python爬虫告诉你北京房价有多高
- 深入理解 Laravel Eloquent(一)——基本概念及用法
- 数据库结构与算法基础