.NET Reflector + ILSpy 反编译过程

这篇具有很好参考价值的文章主要介绍了.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(导出源码)

.NET Reflector + ILSpy 反编译过程

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

.NET Reflector + ILSpy 反编译过程

 ILSpy:

.NET Reflector + ILSpy 反编译过程.NET Reflector + ILSpy 反编译过程

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

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

 二、资源文件处理

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

1.使用Resgen做文件转换

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

具体方法见:

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

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

.NET Reflector + ILSpy 反编译过程

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

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

.NET Reflector + ILSpy 反编译过程

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

.NET Reflector + ILSpy 反编译过程

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

三、引用的处理

1. 外部引用

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

 .NET Reflector + ILSpy 反编译过程

2.框架引用

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

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

 .NET Reflector + ILSpy 反编译过程

四、错误处理

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

把报错这一句删除

.NET Reflector + ILSpy 反编译过程

五、遍历问题

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

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

.NET Reflector + ILSpy 反编译过程

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

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

六、app.config

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

ILSpy 里有完整的配置信息。

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

 .NET Reflector + ILSpy 反编译过程

七、创建窗体Designer文件

1.创建designer文件

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

2.删除代码

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

将类的修饰符修改为partial

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

3.控件加上命名控件

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

 .NET Reflector + ILSpy 反编译过程

.NET Reflector + ILSpy 反编译过程

修改后为

 .NET Reflector + ILSpy 反编译过程

4.报错处理:

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

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

.NET Reflector + ILSpy 反编译过程

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

 总结

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

 2.目前项目可以调试起来正常登录,代码和源代码还是会有一些出入的,但在没源码的情况下,只能根据这个项目来了 ,后续有其他问题再继续记录~ .NET Reflector + ILSpy 反编译过程文章来源地址https://www.toymoban.com/news/detail-442132.html

到了这里,关于.NET Reflector + ILSpy 反编译过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Git入门实践教程》前言+目录

    版本控制系统(VCS)在项目开发中异常重要,但和在校大学生的交流中知道,这个重要方向并未受到重视。具备这一技能,既是项目开发能力的体现,也可为各种面试加码。在学习体验后知道,Git多样化平台、多种操作方式、丰富的资源为业内人士提供了方便的同时,也造成

    2024年02月10日
    浏览(50)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(35)
  • EOSIO源码分析 - CDT合约编译过程

    纵观整体代码有如下特点 符合C++代码语法,包含相应的头文件,命名空间 公有继承合约基类 contract 在语法中出现了新的标签代码如:[eosio::contract], [eosio::action]等 代码尾部出现新的宏EOSIO_DISPATCH 工具名称:eosio-cpp 命令行:eosio-cpp -o hello.wasm hello.cpp –abigen 编译结果:生成h

    2023年04月11日
    浏览(23)
  • Android13源码下载和编译过程详解

    作为Android开发者人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解 官方推荐配置请参考:AOSP使用入门文档,重点有如下几项: 1.1.1 硬件配置要求 至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多

    2024年02月14日
    浏览(59)
  • cesium源码编译调试及调用全过程

    完整记录一次cesium源码从下载、打包、调用、调试的全过程。 本文使用软件或API版本: VSCode Node:12.18.3 cesium版本:1.94 总体步骤: 下载源码 执行npm install和npm start启动web服务 打包源码(npm run combine打包前可以先将申请到的cesium的token更改到ion.js文件中的默认值中) 运行测试

    2023年04月21日
    浏览(30)
  • Openharmony3.2 源码编译(ubuntu 22.04) 过程记录

    OS: ubuntu 22.04 x64 1.1 安装码云repo工具 1.2 将repo添加到环境变量 1.3 获取源码 需有gitee.com 账号,同时设置好ssh 公钥登录(https://gitee.com/help/articles/4191#article-header0) 2.1 安装编译工具 2.2 将hb添加到环境变量 2.3 通过hb 选取板卡配置 解决方法: 2.4 编译 解决方法: 安装ninja 和 gn

    2024年02月08日
    浏览(35)
  • openssl3.0.0源码编译全过程(Visual Studio2017)

    1、下载openssl3.0.0源码 2、Perl工具  点击下载 3、Visual Studio 2017 1、启动Visual Studio 2017的64位命令行工具,并切换至openssl3.0.0的源码目录  2、配置生成makefile文件 3、成功生成makefile     4、修改makefile文件  黄色标记处将: /O2 修改为 /Od ,并注意去除 /debug 项,否则生成的Release版

    2024年02月14日
    浏览(42)
  • Rx.NET in Action 中文介绍 前言及序言

    目标 可选方式 Rx 处理器(Operator) 创建 Observable Creating Observables 直接创建 By explicit logic Create Defer 根据范围创建 By specification Range Repeat Generate Timer Interval Return 使用预设 Predefined primitives Throw Never Empty 从其他类型创建 From other types FromEventPattern FromEvent FromTask FromAsync 变换 Transform

    2024年02月13日
    浏览(40)
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(37)
  • Three.js 镜面反射Reflector 为MeshStandardMaterial增加Reflector能力

    效果 效果 官方案例 区别:官方的案例更像一个镜子 没有纹理等属性 也没有透明度修改 根据源码进行修改为 MeshStandardMaterial实现反射 使用案例 源码:

    2024年01月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包