`
buliedian
  • 浏览: 1237166 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Reflector反编译winform心得(转)

阅读更多

相关情况介绍:

.NET Reflector 一款优秀的反编译工具:http://shy-feng.blog007.com/archives/2008916173215.aspx

以下文字来自

from: http://blog.tripdev.com/?tid=81

Reflactor就不介绍了,.net下的免费反编译工具。Reflactor在某些情况下是很必须的,当遇到bug的时候,可以通过Reflactor看其内部的实现机制,从而找到真正的bug所在。或者可以通过reflactor查看私有生成,然后在用反射去调用。
上面说的都是正当用途,有的时候也可以用来反编译别人的软件。混淆了的软件,我就不管了。这里要讲的是没有混淆和加密的软件的反编译。reflector的右键菜单中的export就能做到反编译,如下图。

反编译的文件默认保存在My Documents\Reflector\Disassembler下,但是这个反编译有一些问题,对于winform的资源文件无法反编译。这就需要我们另寻他法。
经过我的不懈努力找到了一个插件File dessassemble,他能实现这样的功能。
反编译出来后,用visual sutio打开后就能编辑了,但是有时候会有一些问题。下面总结一下。
1、编译没有问题,运行出现“类型初始值设定项引发异常”
这主要是在类中使用了两个静态变量,而其中一个静态变量的初始化依赖令一个静态变量,而被依赖的静态变量放在依赖变量的前面,比如下面的代码就会出现这样的问题。


问题很好解决,掉个个就解决了。

2、出现无法找到资源文件,如图片等
这种情况一般是和资源文件的命名如果,请把资源文件命名保持和类一直,重新编译一下就会解决问题,注意需要重新生成,否则就不一定好使了。

3、打开form的时候出现错误
这个问题,我通过搜索解决了,园子里有一篇文章,我转过来。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->用Reflector和FileDisassembler配合反编译.netWindows程序

URL:http:
//www.cnblogs.com/verygis/archive/2008/12/02/1346072.html

用FileDisassembler反编译WindowsApplication出现了问题,resx资源文件和cs文件不匹配,项目编译根本通不过,把resx文件修改放入cs文件夹后,虽然运行没有

问题,但是不能直接在窗体设计里面
"可视地"修改控件,一来麻烦,二来不直观,那么就应该修改下源代码,使其符合VS2008的源文件布局.

下面总结一下修改的步骤:

1.由于FileDisassembler会给每个命名空间生成一个目录,保存这个空间的源代码,而对于资源resx文件就是直接加在项目目录下,所有要把它放回源码目录下.例如

对于项目文件夹里面的TryAssemb.Form1.resx,首先改为Form1.resx然后移动到TryAssemb目录里面.

2.然后对窗体打开"视图设计器",发现会出现下面的错误:

修改方法就是对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明,例如里面
base.AutoScaleMode=AutoScaleMode.Font;就要改成base.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;而TextBoxtextBox1;也要改成privateSystem.Windows.Forms.TextBoxtextBox1;这样VS2008就能识别到这个控件是要绘制在Form上面的.

PS.开始是的时候还以为要像VS一样把Form1拆开成Form1.cs和Form1.Designer.cs.每次是都辛辛苦苦拆开,最后才发现原来根本不需要,
^_^.

相信大多数.Net程序员都有使用Reflactor的经历。无论出于什么目的,当用Reflactor反编译托管程序后,还想对其代码加以修改,那么本文所列举的可能是一份有用的参考。

用Reflactor的FileGenerator插件反编译代码后可以得到包括项目文件的源代码,但代码中存在各种问题,一般无法一次编译通过,以下将详谈这些问题:

枚举问题

为了代码可读,可能需要花点时间查阅metadata把int值修改回枚举值,尤其是想利用窗体设计器的,VS2008可能还不理解int值。

属性问题

比如一个叫Names的属性被反编译后,可能还原为的set_Names(names),get_Names()方法,逐个替换可能很慢,可采用正则表达式整体替换。
对于set_Xxx(xxx)方法,可替换
set_
{[a-z]*}\(

\
1=(
对于get_Xxx()方法,可替换
get_
{[a-z]*}\(\)

\
1
然后,再修复个别被误换的方法。

委托和回调函数问题

一般会被还原为add_Xxx(MethodsName)方法,需要改为
+=MethodsName

资源问题

需要使用.NetFrameworkSDK下的resgen.exe工具,反编译嵌入资源文件
*.resources为*.resx文件,
语法为:ResGen.exe
*.resources*.resx,然后将*.resx包含入项目,就会自动和同名的窗体文件*.cs关联,如果没有关联可采用先排除再添加大法,一一搞定。

命名空间问题

如果需要切换到IDE的窗体设计器,而不出错,则还需要在
*.cs中添加比如System.Windows.Forms的命名空间前缀。

窗体设计器识别问题

需要把以下代码
ComponentResourceManagermanager
=newComponentResourceManager(typeof(ClassName));
替换为
System.ComponentModel.ComponentResourceManagerresources
=newSystem.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗体设计器才能正常识别。

fm: http:
//blog.csdn.net/ma_ta/archive/2008/12/11/3497532.aspx
分享到:
评论
1 楼 pengyinjiangxi 2011-10-19  
要是早看到你的微博,我就不用改的那么辛苦了

相关推荐

    正隆WinFormCS Reflector反编译项目修复工具 v1.3.zip

    Reflector反编译WinForm程序后,可以得到csproj项目源码。但其中的窗体Form类无法在Visual Studio中直接打开进行界面设计,同时resources资源文件也无法被Visual Studio设计器识别。本程序可一键自动进行转换修复,...

    Reflector反编译后resx资源提取工具

    Reflector.exe反编译.NET WinForm代码后,窗体资源文件,都被生成:***.resources 用ResgenTool.exe可以把***.resources 转换为 ***.resx, ================== 反编译.NET WinForm步骤: 1. 使用Reflector.exe导出...

    Reflector反编译项目修复工具v1.3绿色免费版

    Reflector反编译WinForm程序后,可以得到csproj项目源码。 但其中的窗体Form类无法在Visual Studio中直接打开进行界面设计,同时resources资源文件也无法被Visual Studio设计器识别。 本程序可一键自动进行转换...

    .NET Reflector反编译项目怎么修复

    .NET Reflector 反编译项目修复方法 .NET Reflector 是一个强大的反编译工具,可以将已编译的 .NET 项目反编译回源代码,但是反编译后的项目可能会存在一些错误,需要对其进行修复。本文将介绍如何修复反编译后的 ...

    C#编写动态库(DLL)反编译工具.zip

    例如,`.NETdll反编译`工具,它可能是像ILSpy、JetBrains DotPeek或Reflector这样的知名反编译器。这些工具能够将DLL文件的中间语言(IL,Intermediate Language)转换回易于理解的C#源代码,帮助开发者分析以下内容...

    C#反编译软件

    也是大家常用的),还可以方便破解软件...,而我这篇文章要跟大家分享的是:用Reflector将C#的开发的软件[项目](此文中所说的是winForm项目,对于.net项目可以借鉴或参考)的项目代码还原——反编译得到可运行项目源码...

    resgen批量转换resources转换resx工具.rar

    C#反编译资源文件修复工具ILSpy Reflector resgen批量resources转换resx工具 ILSpy反编译后,Winform窗体中的resx文件全部变成了resources,为了方便查看代码,得把这些转回来,这个工具批量转换非常方便

    WinFormCS-v1.3.2.zip

    Reflector反编译WinForm程序后,可以得到csproj项目源码,但其中的窗体Form类无法在Visual Studio中直接打开进行界面设计,同时resources资源文件也无法被Visual Studio设计器识别 正隆WinFormCS,可一键自动进行...

    C# 反编译工具.rar

    反编译工具有多种,例如ILSpy、dotPeek、Reflector等。这些工具不仅能够反编译C#代码,还能处理其他.NET语言,如VB.NET。它们通常支持查看元数据、解码IL(中间语言)代码,并提供一定的重构功能。在使用反编译工具...

    winform界面开发实例

    通过反编译工具(如ILSpy或Reflector)也可以查看源代码,进一步理解WinForm应用的工作原理和实现细节。 总的来说,WinForm界面开发实例是一个很好的起点,它将帮助初学者掌握.NET框架下的桌面应用开发,理解控件...

    Reflector V5.1.6.0 英文版[.NET反编译器最新版]

    6. **反汇编视图**:对于那些不能完全反编译为源代码的部分,Reflector提供反汇编视图,展示底层的机器指令。 尽管Reflector能提供源代码级别的视图,但需要注意的是,反编译出的代码可能与原始源代码有所不同,...

    winform的简单记事本编辑器,网上收集

    在分析或学习这个项目时,我们可以打开这个文件以查看程序的结构,或者反编译来看看它是如何实现各种功能的,例如,通过Reflector或ILSpy等工具可以深入理解代码逻辑。 总结来说,"iNotepad"是一个基于Windows ...

    c#的winform调用外部exe作为子窗体

    - 如果外部exe是一个WinForm应用,可以通过反编译工具(如ILSpy或Reflector)查看其窗体类,然后在项目中创建一个对应的窗体类。 2. **调用外部exe作为子窗体** - 使用`System.Diagnostics.Process`类来启动和...

    .NET程序集编辑器Reflexil.zip

    本文反编译一个Winform程序(当然,你也可以反编译.NET 的其他 dll 文件),程序如下所示: 图 代码  public partial class Form1 : Form  {  public Form1()  {  InitializeComponent();  }  private...

    输出文件的树形目录,项目和文档辅助小工具

    512M内存,一台很过时的本本),本程序是用C#.net WINFORM开发,您可以用Reflector等反编译工具反编译源代码,本程序是我在做一个9个子系统的网站时,写文档和对比不同版本文件时开发的,水平一般呵呵能用就行 ...

    .net程序免费加密

    由于.NET框架的开放性,有许多工具如Reflector或ILSpy可以轻易地反编译这些文件,暴露源代码。因此,对.NET程序进行加密显得尤为必要。 一种常见的加密方式是混淆(Obfuscation),它通过对代码进行重命名、打乱...

    C# 程序代码加密解密

    在C#环境下,由于.NET框架的特性,编译后的DLL和EXE文件实际上是可读的中间语言(IL),通过反编译工具如ILSpy或Reflector,很容易查看到原始的代码逻辑。因此,对这些文件进行加密显得尤为必要。 接下来,我们探讨...

    vs2005水晶报表横向打印问题完整解决方法

    首先,使用反编译工具Reflector对水晶报表的DLL文件进行反编译,找到负责打印参数设置的代码段。在代码中,可以看到一段用于构造打印参数字符串的逻辑,其中包含了对打印方向的设定。关键的代码片段如下: ```...

    C#对EDSockServer.dll操作

    如果遇到问题,检查错误代码或日志,或者尝试使用工具如`ildasm`或`Reflector`反编译VB.NET库以获取更多函数细节。 8. **文档和示例**: `使用说明.txt`文件可能包含关于如何使用`EDSockServer.dll`的重要信息,...

    C#语言编写记事本程序源码

    如果你有这个文件,可以对其进行反编译(如使用ILSpy或Reflector)来查看具体的C#代码,学习如何实现记事本的功能。 总结来说,C#语言编写记事本程序是一个很好的学习实践项目,它涵盖了面向对象编程、事件驱动、...

Global site tag (gtag.js) - Google Analytics