分享如何反编译winform微信资源文件能清理吗的详解

梦想照进现实。。。。
分享:关于如何使用反编译器,获取源码清单方法
关于反编译器
从概念上讲,反编译器使用起来非常简单。他就是把编译器逆过来用:你给它 .class 文件,它还给你一个源代码文件。
一些比较新的反编译器有精致的图形界面。但在一开始所举的例子中,我们将使用的是 Mocha,它是第一个公开的可利用的反编译器。在本文的最后,我会讨论一下在 GPL 下一个较新的反编译器。(请参阅,下载
Mocha 并获取 Java 反编译器的清单。)
让我们假设在目录中有一个名为 Foo.class 的类文件。用 Mocha 对它进行反编译非常简单,只要键入以下命令:$ java mocha.Decompiler Foo.class
这会生成一个新的名为 Foo.mocha 的文件(Mocha 使用 Foo.mocha 这个名字以避免覆盖原文件的源代码)。这个新文件就是 Java 的源文件,并且假设一切顺利的话,您现在就能正常地编译它。只需把它重命名为 Foo.java 就可以开始了。
但是这儿有个问题:如果在一些您已经有所改动的代码上运行 Mocha,您会注意到它生成的代码和源代码不是完全一样的。我举个例子,这样您能明白我的意思。清单 3 所示的原始源代码是来自一个名为 Foo.java 的测试程序。清单 3. Foo.java 的一小部分原始源代码
private int member = 10;
public Foo() {
local = returnInteger();
System.out.println( "foo constructor" );
priv( local );
}以下是 Mocha 生成的代码清单 4. Mocha 生成的 Foo.java 的源代码
public Foo()
member = 10;
int local = returnInteger();
System.out.println("foo constructor");
priv(local);
这两个代码片段的成员变量 member 被初始化为 10 的位置不同。在原始源代码中,它在与声明的同一行中被表示为一个初始值,而在被反编译后的源代码中,它在一个构造符中被表示为一条赋值语句。反编译后的代码告诉我们一些有关源代码被编译的方法;即它的初始值是作为在构造符中的赋值来被编译的。通过观察其反编译后的输出结果,您能了解到不少
Java 编译器的工作方法。反编译是困难的:不断重复
虽然 Mocha 的确可以反汇编您的目标代码,但它不会总是成功的。由于困难重重,没有一个反编译器能够准确无误地翻译出源代码,而且每个反编译器处理它们在翻译过程中的漏洞的方式也不同。举例来说,Mocha
有时在输出准确的循环构造的结构方面有一些问题。如果真的这样,它会在最终输出中使用伪 goto 语句,如清单 5 所示。清单 5. Mocha 不能准确地反编译
if (i1 == i3) goto 214 else 138;
j3 = getSegment(i3).getZOrder();
if (j1 != 1) goto 177 else 154;
if (j3 & k2 && (!k1 || j3 & j2)) goto 203 else 173;
expression 0
if (j3 & k2 && (!k1 || j3 & j2)) goto 203 else 196;
expression 0
if == goto 201
撇开 Mocha 的问题不谈,反编译器在通常情况下还是能比较准确地翻译出源代码。一旦知道了某一反编译器的弱点,您可以手工分析和转换反编译后的代码,以使它们能较准确地符合原始源代码。随着反编译器正变得越来越出色,
我们又碰到了另外一个问题:如果您不想让任何人能反编译您的代码,那该怎么办呢?小编在此友情推荐:爱加密安卓破解技术有哪些?如何防反编译,讲解的还不错:
没有更多推荐了,Reflector反编译WinForm程序重建项目资源和本地资源
时间: 16:22:13
&&&& 阅读:959
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&工具:vs2012、.NET Reflector8.1.0.35
要解决的问题:
   通过Reflector反编译生成的代码可以编译通过并显示窗体的本地资源和项目资源图片
一、测试项目
  两个图片分别放在项目资源和窗体的本地资源里
项目资源文件:
&data name="Chrysanthemum" type="System.Resources.ResXFileRef, System.Windows.Forms"&
&value&..\Resources\Chrysanthemum.System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&/value&
&data name="资源" type="System.Resources.ResXFileRef, System.Windows.Forms"&
&value&..\资源.System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c;gb2312&/value&
本地资源文件:
&data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"&
/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/+EO5kV4aWYAAE1NACoAAAAIAAQBMgAC
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
二、Reflector 反编译
&在.resources文件上点击右键=》open with=》vs2012 ,就可以在vs里查看资源文件,同时在C:\Reflector\Exports目录下生成.resx文件,如:
C:\Reflector\Exports\ResxDemo.Form1.resources.resx
也可以使用resgen命令生成resx文件
选择ResxDemo项目导出源码在vs2012中打开,这时一般可以编译通过,并能运行。但是打开窗体编辑时会出现错误,提示找不到资源。
反编译后的项目和原项目对比有几点不同:
1. 原项目\Properties\Resources.resx 资源文件没有了,在项目根目录下多出来一个ResxDemo.Properties.Resources.resources文件
2.原项目Form1.resx和Form2.resx资源文件没有了,多出两个.resources文件
3.原项目中有个Resources文件夹存放项目资源的图片,反编译后这个文件夹没有了
4.原项目文件.csproj中资源引用方式是这样的&
&EmbeddedResource Include="Form1.resx"&
&DependentUpon&Form1.cs&/DependentUpon&
&/EmbeddedResource&
&EmbeddedResource Include="Form2.resx"&
&DependentUpon&Form2.cs&/DependentUpon&
&/EmbeddedResource&
&EmbeddedResource Include="Properties\Resources.resx"&
&Generator&ResXFileCodeGenerator&/Generator&
&LastGenOutput&Resources.Designer.cs&/LastGenOutput&
&SubType&Designer&/SubType&
&/EmbeddedResource&
&反编译后的是这样的
&EmbeddedResource Include="ResxDemo.Form1.resources" /&
&EmbeddedResource Include="ResxDemo.Form2.resources" /&
&EmbeddedResource Include="ResxDemo.Properties.Resources.resources" /&
*.resx文件时xml格式的资源描述文件,*.resources文件是编译后的二进制资源文件。
可以运行并显示图片是因为运行时从.resources文件中提取资源,但设计时不能读取二进制文件,所以报下面这样的错误。
类型&ResxDemo.Properties.Resources&没有名为&Chrysanthemum&的属性。
解决项目资源找不到的问题:
1.使用resgen命令生成Resources.resx文件,拷贝到Properties目录下面
2.从项目中删除ResxDemo.Properties.Resources.resources 和Resource.cs文件
3.把Resource.resx包含在项目中,双击打开,修改访问修饰符为Internal,保存一下就可以自动生成Resource.Designer.cs文件了
重新生成项目,重新打开Form1。可以看见使用项目资源的图片已经显示出来了。
这时使用本地资源的既不报错也不显示,但运行是可以显示出来的,因为现在还是使用的.resources资源文件。
解决本地资源找不到的问题:
1.使用resgen命令生成Form1.resx文件,拷贝到Form1.cs目录下面
2.从项目中删除*.Form1.resources 文件
3.从项目中包含Form1.resx文件,重新生成项目,重新打开窗体图片显示出来了。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/zhaobl/p/Reflector_winform_resx.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!C# 反编译出来的winform文件拆分
[问题点数:40分,结帖人idaydayup]
本版专家分:1004
结帖率 98.78%
CSDN今日推荐
本版专家分:1004
本版专家分:1004
本版专家分:2383
本版专家分:1157
本版专家分:810
本版专家分:133
匿名用户不能发表回复!|
其他相关推荐
//发送文件
private void btn_sendFile_Click(object sender, EventArgs e)
//打开文件
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() =
using System.Windows.F
using System.IO;
using System.N
namespace WindowsFormsApplication3
public partial class Form1 : Form
public Form1()
1.在工具箱中添加Adobe提供的ActiveX控件,如图所示:拖一个Adobe PDF Reader控件到窗体上,双击窗体,在窗体加载时,弹出对话框,加载PDF文件:string fileName = MyOpenFileDialog();axAcroPDF1.LoadFile(fileName);MyOpenFileDialog()函数为:
string MyOpenFi
C# winform Dicom文件查看器
C# WinForm 下载文件示例使用 HttpWebRequest 下载文件,参考代码using S
using System.Collections.G
using System.ComponentM
using System.D
using System.D
using System.L
using System.T
1. de4dot - 脱壳工具
2. NET.Reflector Pro - C#IL源码查看器
1. 查看是否加壳
用NET.Reflector Pro打开程序, 如下图, 第一个红框是[傲视天下]的更新程序, 可以看出没加壳, 第二个红框是[有好米域名注册]的主程序, 加了壳的
2. 脱壳, [可选(有壳才脱)]
进入de4dot文件夹, 双击&cmd.
学生个人文件管理系统 v2.0
1.非源代码。
2.有些用户没有设置自己的数据库服务器就直接登录或者注册,这样是不会成的,
请选择自定义服务器,然后填入自己的IP,数据库用户名以及密码,因为默认服
务器的IP是192.168.0.252.
3.暂不支持拖拽功能(将文件拖进去就能上传)
4.每隔10分钟系统会锁定一次,以防止其他用户恶意操作数据,需解锁请输入自己
的登录密码。【暂不支持设置间隔时间或者设置是否采取锁定策略】
5.暂不支持修改上传后的文件的属性(类别等)
6.在Win7上运行时需要管理员权限,请以管理员方式运行本程序。
B.新版特性:
1.修正了大文件上传或下载时服务器超时的Bug.
可上传500M以内的单个文件.(在空间大小足够的前提下)
2.修正了客户端上传文件的时间与服务器时间不同步的Bug,
同时在充分考虑服务器性能的前提下,给客户端提供了正
确的时间。
3.新增数据库压缩功能,针对数据库日志文件动辄上G的问题
提供了解决方案,使客户端用户使用更流畅。(管理员功能)
4.()纠正了数据创建时错误,适应SQLServer不同
版本的数据库;纠正了在SQLServer下不同版本数据库备份时路径
错误问题。
5.()纠正了程序中密码验证不区分大小写的错误。
6.() 纠正了系统锁定后无法解锁的错误
南充市扎针高手 李泽波
WinForm或WPF应用程序有时候需要保存用户的一些配置就要用到配置文件,而微软为我们的应用程序提供了Application Configuration File,就是应用程序配置文件,可以很方便的访问和修改应用程序的配置。此文中我们以Winform的数据库服务器配置为例。
工具:Microsoft
Visual Studio 2013
系统:Widows7
方法和步骤如下:
/// 所给路径中所对应的文件大小
public static long FileSize(string filePath)
//定义一个FileInfo对象,是指与filePath所指向的文件相关联,以获取其大小
/**//**//**////
/// WebClient上传文件至服务器
/// 文件名,全路径格式
/// 服务器文件夹路径
/// 是否需要修改文件名,这里默认是日期格式
public static bool UploadFile(string localPB反编译_Powerbuilder DeCompiler_PB反编译器_PB混淆器_PB加密
Reflector反编译winform心得(转)
相关情况介绍:
.NET Reflector 一款优秀的反编译工具:
以下文字来自
Reflactor就不介绍了,.net下的免费反编译工具。Reflactor在某些情况下是很必须的,当遇到bug的时候,可以通过Reflactor看其内部的实现机制,从而找到真正的bug所在。或者可以通过reflactor查看私有生成,然后在用反射去调用。
上面说的都是正当用途,有的时候也可以用来反编译别人的软件。混淆了的软件,我就不管了。这里要讲的是没有混淆和加密的软件的反编译。reflector的右键菜单中的export就能做到反编译,如下图。
反编译的文件默认保存在My Documents/Reflector/Disassembler下,但是这个反编译有一些问题,对于winform的资源文件无法反编译。这就需要我们另寻他法。
经过我的不懈努力找到了一个插件File dessassemble,他能实现这样的功能。
反编译出来后,用visual sutio打开后就能编辑了,但是有时候会有一些问题。下面总结一下。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//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.F就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.F而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));窗体设计器才能正常识别。fm: http://blog.csdn.net/ma_ta/archive//3497532.aspx
没有更多推荐了,反编译问题:
1.路径问题:如果遇到了Path.Combine,有错误改下即可
2.资源文件问题:
在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选中"Save as" 选项保存即可。
例:对于项目文件夹里面的TryAssemb.Form1.resx,首先改为Form1.resx然后移动到TryAssemb目录里面
3.对窗体打开"视图设计器",发现会出现下面的错误:
修改方法就是对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明,
例如里面 base.AutoScaleMode = AutoScaleMode.F就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.F
而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;这样VS就能识别到这个控件是要绘制在Form上面的
4.委托和回调函数问题
一般会被还原为add_Xxx(MethodsName)方法,需要改为 += MethodsName
5.命名空间问题
如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。
6.窗体设计器识别问题
需要把以下代码ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));替换为System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));窗体设计器才能正常识别。
阅读(...) 评论()}

我要回帖

更多关于 微信资源文件能清理吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信