Reflector反编译winform心得
Reflactor就不介绍了,.net下的免费反编译工具。Reflactor在某些情况下是很必须的,当遇到bug的时候,可以通过Reflactor看其内部的实现机制,从而找到真正的bug所在。或者可以通过reflactor查看私有生成,然后在用反射去调用。
上面说的都是正当用途,有的时候也可以用来反编译别人的软件。混淆了的软件,我就不管了。这里要讲的是没有混淆和加密的软件的反编译。reflector的右键菜单中的export就能做到反编译,如下图:
反编译的文件默认保存在My Documents\Reflector\Disassembler下,但是这个反编译有一些问题,对于winform的资源文件无法反编译。这就需要我们另寻他法。
经过我的不懈努力找到了一个插件File dessassemble,他能实现这样的功能。
反编译出来后,用visual sutio打开后就能编辑了,但是有时候会有一些问题。下面总结一下。
1、编译没有问题,运行出现“类型初始值设定项引发异常”
这主要是在类中使用了两个静态变量,而其中一个静态变量的初始化依赖令一个静态变量,而被依赖的静态变量放在依赖变量的前面,比如下面的代码就会出现这样的问题。
1 private static string SettingFileName = Path.Combine(SettingFolderPath, @"GoogleMusicDesktop\config.xml");
2 public static string SettingFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "aaaSoft");
问题很好解决,掉个个就解决了。
2、出现无法找到资源文件,如图片等
这种情况一般是和资源文件的命名如果,请把资源文件命名保持和类一直,重新编译一下就会解决问题,注意需要重新生成,否则就不一定好使了。
3、打开form的时候出现错误
这个问题,我通过搜索解决了,园子里有一篇文章,我转过来。
用Reflector和FileDisassembler配合反编译.net Windows程序
URL: http://www.cnblogs.com/verygis/archive/2008/12/02/1346072.html
用FileDisassembler反编译Windows Application出现了问题,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;而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;这样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
资源问题
需要使用.Net Framework SDK 下的 resgen.exe 工具,反编译嵌入资源文件*.resources为*.resx文件,
语法为:ResGen.exe *.resources *.resx,然后将*.resx包含入项目,就会自动和同名的窗体文件*.cs关联,如果没有关联可采用先排除再添加大法,一一搞定。
命名空间问题
如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。
窗体设计器识别问题
需要把以下代码
ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
替换为
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗体设计器才能正常识别。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ma_ta/archive/2008/12/11/3497532.aspx
转载于:https://www.cnblogs.com/javak/archive/2010/10/09/1846293.html
Reflector反编译winform心得相关推荐
- 共享一个对Reflector 反编译支持中文的修正FileGenerator文件
共享一个对Reflector 反编译支持中文的修正FileGenerator文件 文件生成插件 转载于:https://www.cnblogs.com/LifelongLearning/archive ...
- 弥补Reflector反编译对中文支持的不足
Reflector是我目前用的最多的反编译工具,他可能不时最好的,但以它的更新速度,我相信他会成为最好的哦~~ 国外的软件,对中文支持还是有问题,虽然我们都Unicode了,可是老外还是不一定 ...
- .NET Reflector反编译的方法
首先启动.NET Reflector,然后添加进入dll或exe.然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录. 到这一步骤时,稍等一会,就能够在指定目录就 ...
- 恢复Reflector反编译后资源文件的办法
反编译问题: 1.路径问题:如果遇到了Path.Combine,有错误改下即可 2.资源文件问题: 在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选 ...
- vs 2019 自带 反编译 与 Reflector 反编译工具比较
都是一样的 但是要看自己写的 反编译代码 还是得去 Reflector 转载于:https://www.cnblogs.com/cjm123/p/10908910.html
- .Net Reflector反编译代码与源代码的区别
Reflector有个File Disasmbler插件,让Reflector可以把反编译的代码保存为文件.通过反编译代码与源程序文件的比较,可以看出两者是有区别的,甚至编译的代码完全有可能无法再通过 ...
- 使用Reflector 反编译 NPOI 查看源码,参考源码修改NPOI创建word 页眉中添加锚点图片
上篇文章使用了inline方式往页眉中插入图片,因为这种方式插入的图片不好按照坐标定位方式调整图片的摆放位置,所以只能参考NPOI 源码中inline的方式修改添加CT_Anchor 锚点的方式 首先 ...
- APK反编译学习心得
Apk反编译之后,我们就可以看到开发这个应用使用的资源文件(图片).layout.样式.相关的实现代码等,apk反编译也算是Android开发中一个比较实用的技巧吧,当我们对别人开发好的应用感兴趣时, ...
- .net Reflector 反编译源码笔记
使用.net Refector 反编译C#,的确是一个很好的工具,不过随着研究的深入发现,其中还有有一些不尽人意,让初学者摸不着头脑的情况. 源码 using System; using System ...
最新文章
- 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣
- 【神仙题】【P4885】 灭顶之灾
- ONOS项目首赢11000次下载 Oracle发布云路由
- centos7调节虚拟机字体_初次安装虚拟机中Ubuntu16.04系统设置的一些小问题(小白教程)...
- 7-5-无向图生成树-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
- matlab中模块封装,MATLAB/simulink模块的封装
- pgsql转储_十六进制转储如何工作
- vue结合element实现自定义上传图片、文件
- 购物车单选全选,计算总价,出现个小问题,没找到.....
- paip.c++ gcc 不能捕获exception异常的解决
- 百度地图、腾讯地图、高德地图经纬度转换
- 记阿里电话面试失败过程
- Echarts3柱状图切换折线图时发生位移
- 架构问题--削峰填谷
- 软工视频到底在讲什么?
- java判断小数位数_java如何获取一个double的小数位数
- 你是如何进行文件备份的?
- STM32超声波模块(HC-SR04\US015)测试程序-HAL库函数
- 我的AI之路(5)--如何选择和正确安装跟Tensorflow版本对应的CUDA和cuDNN版本
- 伺服编码器差分信号转PLC24V脉冲信号变送器0-5V电平隔离器 DIN33
热门文章
- 我33岁,从国企主管零基础转型大数据开发,年薪涨了20W
- 商业智能改变汽车行业
- volatile,static,const,extern等关键字
- win8卸载mysql数据库,彻底卸载win8自带的metro应用的方法
- zookeeper 虚拟机搭建好后 外部链接不上_Ubuntu Server搭建Hyperledger Fabric 2.1学习环境...
- ajax success function_【java 基础】java-回调函数(结合jquery.ajax)
- python图片马赛克_Python实现PS滤镜中马赛克效果示例
- 一键刷入twrp工具_OPPORealme X 刷入原生lineage16-AOSP纯净系统完美ROOT 刷机必备
- 计算机算法设计与分析 Huffman编码问题
- 数据结构实验 3.抓住那头牛