一次.NET项目反编译的实战经验(WinForm)
最近由于业务需求,需要对一个老项目进行功能调整。但是项目的源代码已经找不到了。所以只能尝试对项目行进反编译。
一、反编译工具的选择
提到.NET的反编译,第一个想到的就是大名鼎鼎的Reflector。使用之后发现效果并不好,对不认识的类就各种乱码且还不支持多项目导出(可能是我不会用吧),再加上他还是需要付费的,暂时就只能战略性的放弃掉了。查找度娘,ILSpy和dnSpy这两款免费的软件进入了我的视线。先试用ILSpy,直接提示我要安装Framework 4.6.2,可是我就一个2.0的项目用这么高版本的反编译,我怕效果不好,就选择了暂时性的放弃。最后使用了dnSpy,反编译出来的效果比Reflector好。
二、艰辛的编译过程
不管使用哪一款反编译工具,反编译出来的代码想要完全没有错误是不太可能,这里就以dnSpy生成出来的代码为例,来说明一下常见问题及解决方案:
1、缺失引用,最典型的就是缺少了System和System.Xml的引用,需要手动添加
2、foreach循环内会再申明一个重名变量,手动删除即可
3、base.AutoScaleMode=AutoScaleMode.Font报错,给AutoScaleMode加上全命名空间System.Windows.Forms.AutoScaleMode.Font
4、变量“manager”未声明或从未赋值。ComponentResourceManager类实例化的变量名只能是resources
三、修复资源文件
其实在这一步之前,项目可以编译成功且不影响到正常使用,只是在开发的时候看不到任何资源数据。
反编译过来的文件里面有很多.resource的文件,那些就是编译过后的资源文件,这些文件可以正常编译不影响正常使用,但是这些文件在开发时是没有用的,所以在VS里面看来就是一片白的,我们需要把.resource文件转换成我们熟悉的.resx文件。
可以用VS自带的工具resgen.exe转(我没用,具体方法可以在网上查);还可以使用ConvertResource批量转换,不过这个工具转出来的文件要把里面metadata改成data才行;转出来.resx之后,把.resource文件删掉,将.resx包含进项目就好了。
四、后记
1、反编译出来的代码和本身的源代码在结构上可能存在差异,尤其是WebServices。
2、现在的反编译工具还做不到一点错都没有,看着那几百上千个错误,很容易让人放弃,一定要摆平心态来处理错误。
3、dnSpy是一个很强大的反编译工具,可以直接断点调试和修改并再编译。如果不放心反编译出来的代码,完全是可以在原程序上修改再编译。
4、dnSpy可以放在服务器端,能在紧急的时候绕过源代码修复BUG。
一次.NET项目反编译的实战经验(WinForm)的更多相关文章
- NET项目反编译+VS解决方案整理流程
net项目反编译 工具:De4Dot + IL SPY和Reflector结合使用 项目:vs10+创建解决方案,每个类库尽量按照dll名来命名,方便整合,新建web项目先把aspx等文件拷贝进去,注 ...
- java项目反编译获得源码
经常能找到一些 过时的 项目源码,但是还是有研究价值的.但是肯定是不会给你源码的. 下面介绍怎么反编译: 1.在项目中找到classes这个文件夹,这个就是编译过的文件. 2.下载反编译工具JD-GU ...
- Eclipse 安装反编译插件jadclipse(经验总结)
方法/步骤 先下载jadClipse的jar包 链接:sourceforge.net/projects/jadclipse/ 然后,将net.sf.jadclipse_3.3.0.jar拷贝到 ...
- 将JAR包反编译,修改后重新打包(转)
将JAR包反编译,修改后重新打包(转) 在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的 ...
- Jar包进行反编译,修改后重新打包
在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的使用说明和源代码,有时有的却不提供源代码,使用 ...
- eclipse下的反编译
Eclipse 安装反编译插件jadclipse(经验总结) 根据网上搜集的材料以及亲身安装测试,总结经验如下,希望能够帮助有需要的朋友们,本总结有助于朋友们少走弯路哦!jadclipse可以帮助查看 ...
- Reflector反编译WinForm程序重建项目资源和本地资源
工具:vs2012..NET Reflector8.1.0.35 要解决的问题: 通过Reflector反编译生成的代码可以编译通过并显示窗体的本地资源和项目资源图片 一.测试项目 两个图片分别放在项 ...
- C#代码反编译 得到项目可运行源码
C#代码反编译 得到项目可运行源码 摘自:http://www.cnblogs.com/know/archive/2011/03/15/1985026.html 谈到"C#代码反编译&quo ...
- .Net反编译实战
原文:.Net反编译实战 当你面对一个已经部署好的网站,功能,性能都非常不给力的时候,你会怎么办? 当你尝试去了解这个网站业务逻辑,代码逻辑和数据库逻辑时却发现根本没有任何资料时你会怎么办? 当你准备 ...
随机推荐
- Pyinstaller打包Web项目
最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序.网上搜索了一下,大部分教程都是打包非web项目,这里分享一下打包简单网页demo的过程. 系 ...
- linux及windows安装maven
一.linux安装maven 1.wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6. ...
- opencv-图像遍历
#include "stdafx.h" #include<opencv2/opencv.hpp> #include<iostream> #include&l ...
- python中字符串的处理总结
在爬取新浪财经7*24直播中, 遇到了Unicode编码中文转utf-8的问题, 采用如下代码可以实现转化 >>> a='\\u76d1\\u7ba1\\u5bf929' >& ...
- csp-s模拟64trade,sum,building题解
题面:https://www.cnblogs.com/Juve/articles/11639755.html trade: 70分sbdp,然后一直想优化,dp还是很好写的 正解是反悔贪心 维护一个小 ...
- Vue创建项目环境
目录 Vue项目环境搭建 Vue项目创建 pycharm配置并启动vue项目 vue项目目录结构分析 vue组件(.vue文件) 全局脚本文件main.js(项目入口) 改写 Vue项目环境搭建 &q ...
- 菜鸟nginx源码剖析数据结构篇(四)红黑树ngx_rbtree_t[转]
菜鸟nginx源码剖析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- PAT甲级——A1005 Spell It Right
题目描述 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and out ...
- mysql80版本—yum安装—图文全过程
这是官网的Quick Giude:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 以下为自己安装的步骤: 第一步:下载.rpm安装包 ...
- <每日一题>题目8:文件备份V1.0
import os #备份文件的路径 file_address = input("输入需要备份文件所在的路径:") os.chdir(file_address) #备份文件命名 f ...