.NET Reflector + ILSpy 反编译过程

目录

前言

一、源码怎么导出?

 二、资源文件处理

1.使用Resgen做文件转换

2.使用ILSPy导出的资源文件 

三、引用的处理

1. 外部引用

2.框架引用

四、错误处理

五、遍历问题

六、app.config

七、创建窗体Designer文件

1.创建designer文件

2.删除代码

3.控件加上命名控件

4.报错处理:

System.ComponentModel.ComponentResourceManager manager未声明或从未赋值。

 总结


前言

最近开始一个窗体项目的反编译任务。使用了.NET Reflector 10 和ILSPy 两个软件进行反编译。而后合并两个软件的导出的源码。

下面整理两个软件的源码导出 以及导出后代码问题的处理。

   

一、源码怎么导出?

Reflector

项目右键,Export Source Code(导出源码)

 导出的源码结构如下,导出的项目按命名空间一层建一个文件夹

 ILSpy:

对比两个软件导出的源码,我这里使用的是.NET Reflector 导出的源码。

选择源码目录下的.csproj文件,使用VS 2019 打开 。接下来针对源码问题进行处理。

 二、资源文件处理

 Reflector :资源文件是.resources(二进制)的格式。

1.使用Resgen做文件转换

可以使用微软的Resgen.exe(通用资源转换实用工具)将.resources(二进制)文件转成.resx文件(XML)

具体方法见:

Resgen.exe(资源文件生成器) - .NET Framework | Microsoft Docs

资源文件在最外层,转成.resx文件后,需要移动到对应的窗体目录下。

2.使用ILSPy导出的资源文件 

ILSPy: 代码保存后,无需转换资源文件。直接将文件移动到对应目录下。

处理完后,使用记事本的方式打开.csproj文件,将EmbeddedResource节点下的.resources内嵌资源删除。

或者打开项目,把这些资源文件从项目中移除,然后将.res文件分别包括到项目中。

三、引用的处理

1. 外部引用

Reflector导出的源码,引用是失效的。 需要重新引用

 

2.框架引用

System. 这种引用失效,可能是框架版本太低,不支持。修改下就好了。

我这边的项目是net 2.0 。修改成net 4.0 就可以了

 

四、错误处理

“global::System.Runtime.Versioning.TargetFrameworkAttribute”特性重复

把报错这一句删除

五、遍历问题

错误信息1:无法在此范围中声明名为“item”的局部变量或参数,因为该名称在封闭局部范围中用于定义局部变量或参数

将item这个别名修改成其他的就可以了

错误信息2:“IEnumerator”: using 语句中使用的类型必须可隐式转换为“System.IDisposable”

一个类中可能会有多个遍历。从ILSPy导出的源码中找到对应的类,直接拷贝过来替换报错的类就OK了。

六、app.config

Reflector导出的源码 ,app.config是空的。

ILSpy 里有完整的配置信息。

因此这里也是从ILSPy导出的源码拷贝过来替换

 

七、创建窗体Designer文件

1.创建designer文件

在项目目录下,复制一个.cs 窗体文件 ,名字修改为 窗体名.Designer.cs

2.删除代码

打开项目,将Deigner文件包含在项目中。 保留控件声明 还有 Dispose 、 InitializeComponent() 方法。删除 : Form 窗体继承 、窗体加载事件、控件事件 以及其他业务处理方法。删除using 、

将类的修饰符修改为partial

在.cs文件里 和上面做相反的操作,在public 之后加上partial

3.控件加上命名控件

将 鼠标移动到 报错的地方,点击显示可能的修补程序。就可以看到该控件在哪个命名空间之下。

 

修改后为

 

4.报错处理:

System.ComponentModel.ComponentResourceManager manager未声明或从未赋值。

查看窗体设计器时,System.ComponentModel.ComponentResourceManager manager未声明或从未赋值。

处理方法:将 类名manager 修改为 resources   

 总结

 1.反编译后的源码调整 可以参照有源码的窗体项目进行对比,然后进行修改。

 2.目前项目可以调试起来正常登录,代码和源代码还是会有一些出入的,但在没源码的情况下,只能根据这个项目来了 ,后续有其他问题再继续记录~ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值