C#反编译教程【Reflector】

今天有个同事给了我一个exe,用winform写的窗口程序,问我能不能反编译看里面的源代码,好吧,我试试看,先百度了一圈,然后回忆了一下以前了解的知识,最近只是很久没写代码了,生疏了,OK我们可以往下看了。

  首先你需要一个工具,叫什么呢?他就是很多人都知道Reflector,下载地址我这里顺便给一个吧,直接从本站下载,如果打开Reflector.exe提示有更新,那么我们点确定更新它就好了,

  下载地址:reflector.rar (968.66 kb)

  下载好后解压缩,打开Reflector.exe,然后点击File->open导入*.exe文件,这时工具就已经给我们把源代码展现出来了。
这里我上传一个FastQL.exe之后如图: 

  经过简单的对比,发现图中References就是我们引用的动态链接库dll
  {}项目名里面带的是项目中的文件,一般指的是类或者form文件

  点击+号,会出现变量名和方法名,点击之后,右边会出现代码,但是这样一个个复制出来很麻烦!我们可以直接导出成项目吗?答案是肯定的!邮件这个FastQL根目录选中Export,然后出现对话框,里面只需要填写导出位置就行了,我们到目标位置去看看就行了,整个项目的源代码都被导出了。 

 这时候一般我们都是新建一个工程,把这些代码复制进来,看到有些代码出现

[CompilerGenerated]
         private string <URL>k__BackingField;
这样的问题,造成编译失败。

解决方法:
因为菜,所以不能改 reflector ,只好改生成的源代码了,使用.net 的在文件中替换的功能来解决:
1、Ctrl+Shift_H 打开替换窗口;
2、如下图示,使用正则表达式替换;
 
查找内容:\<{.#}\>k__BackingField
替换内容:_\1_k__BackingField

3、结束。
没办法,懒人就是这个样子,谁让生成的代码里边这种错误这么多呢,要不然也用不着这个方法了。

————————————————————————————————————————————————————

goldarch:有网友自己写一段代码,反编译,观察结果如下:
http://topic.csdn.net/u/20090726/16/50060e4f-8255-4706-abe8-455cb51fe2a7.html
CompilerGenerated是反编译生成的代码如

public class MyClass
   {
   public string Name{ set ; get ;}
   public string Value { set ; get ; }
  
   public MyClass( string pName, string pValue)  
   {
   Name = pName;
   Value = pValue;
   }
  
   }
反编译后
反编译后
public class MyClass
{
   // Fields
   [CompilerGenerated]
   private string <Name>k__BackingField;
   [CompilerGenerated]
   private string <Value>k__BackingField;
  
   // Methods
   public MyClass( string pName, string pValue)
   {
   base ..ctor();
   this .Name = pName;
   this .Value = pValue;
   return ;
   }
  
   // Properties
   public string Name
   {
   [CompilerGenerated]
   get
   {
   string str;
   str = this .<Name>k__BackingField;
   Label_0009:
   return str;
   }
   [CompilerGenerated]
   set
   {
   this .<Name>k__BackingField = value;
   return ;
   }
   }
  
   public string Value
   {
   [CompilerGenerated]
   get
   {
   string str;
   str = this .<Value>k__BackingField;
   Label_0009:
   return str;
   }
   [CompilerGenerated]
   set
   {
   this .<Value>k__BackingField = value;
   return ;
   }
   }
}

goldarch结论:
形如<URL>k__BackingField只不过就是一"变量命名"!
只不过vs不认这个命名而以,把这个命名改成vs能认的命名就可以了。
PWUrlRedirect代码简短,我直接把<URL>k__BackingField改成 _url,编译通过
需要注意的是:要主动应用"替换"功能,vs自动的替换没有作用(它根本不认为那是变量,不会主动替换的)。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值