C#代码反编译 得到项目可运行源码

C#代码反编译 得到项目可运行源码

摘自:http://www.cnblogs.com/know/archive/2011/03/15/1985026.html

   
谈到”C#代码反编译“,我们也许都会想到
Reflector代码反编译工具,对其相应也不会太陌生;做C#支出,它算得上是一个必要的实用工具。通过它大家得以很有益的查看一个程序集的源代码(那是其最中央的应用,也是豪门常用的),还是可以够便宜破解软件…,而自我这篇作品要跟大家享受的是:用Reflector将C#的开发的软件[项目](此文中所说的是winForm项目,对于.net项目可以借鉴或参照)的花色代码还原——反编译拿到可运行项目源码。
我所做的反编译,并不是’破解’,其使用的前提或情形是:公司原本请人付出的’配餐软件(幼
儿园版)’,现有客户咨询想买,并且软件中留存有的题目需改,——不是自身支付的,该软件也无源码,想修改只能想方法得到软件的源码。具体的’破解’方法
记录在下,方便自己从此翻看!(ps:
‘破解’的不二法门,自己前边就寻找过。但困于反编译之后的error相比较多,没有耐心,有的题目深感相比怪异,试了两回特别就废弃了 
——这就直接的验证:真正的黑客,应该都是相比较有耐心的,呵呵…,
但做软件开发,又何尝不需要这样?!)

     a.使用到的工具:Reflector,具体的就是:Reflector插件File
disassembler
(具体是怎么着和how
to use,间接上网查)。

     b. 打开Reflector,采纳要’破解’的软件(.exe)主程序,再选用并点击
如图: 图片 1, 在右手出现的
程序集(输出)类型采用界面 采纳品种’windows Appliction’
(因为是winForm应用程序,假使是挑选的其他 如’class
…’类库,则需要在随后的步调中,改变项目性质中的
输出类型,不提出这样操作),如图:图片 2

 点击 生成 即可 得到此主程序集的源码,其余的连带程序集再如此操作即可!
——不要觉得大功告成,那只是首先步,麻烦的在前边!

    c.将扭转的源码 在Vs中打开(项目),
先试着运行下,(一般)会报错,排除’xxx程序集不设有’这类的失实,我所遭受的如下:

   

图片 3

using
System;
using
System.Collections.Generic;
using
System.Runtime.CompilerServices;
using
System.Runtime.InteropServices;

[CompilerGenerated]
internalclass<PrivateImplementationDetails>{1FF4F699-35E0-4117-BDBC-9E44A1B0F9F5}
{
internalstatic
Dictionary<string, int> $$method0x600012e-1;
internalstatic
Dictionary<string, int> $$method0x6000137-1;
internalstatic
Dictionary<string, int> $$method0x6000137-2;
internalstatic
Dictionary<string, int> $$method0x600014a-1;
internalstatic
Dictionary<string, int> $$method0x6000169-1;
internalstatic
Dictionary<string, int> $$method0x60001b6-1;
internalstatic
__StaticArrayInitTypeSize=20
$$method0x6000213-1; // data size: 20
bytes
internalstatic
__StaticArrayInitTypeSize=20
$$method0x6000213-2; // data size: 20
bytes
internalstatic
__StaticArrayInitTypeSize=20
$$method0x6000213-3; // data size: 20
bytes
internalstatic
__StaticArrayInitTypeSize=20
$$method0x6000213-4; // data size: 20
bytes

[StructLayout(LayoutKind.Explicit, Size=20, Pack=1)]
privatestruct
__StaticArrayInitTypeSize=20
{
}
}

图片 4

 源码文件中会出现一个
_PrivateImplementationDetails_{1FF4F699-35E0-4117-BDBC-9E44A1B0F9F5}.cs
文件名很长 内容如上的 乱码类,对此解决办法时:注释此类
或间接删除。【程序相关的文书,如图片、数据库等要记得放到项目事关地点,一般在bin/debug/文件夹下】

    d. 添加相关程序集的引用,设置启动对象。到这儿,差不多程序就可以跑起来了,可是还平昔不完 ——因为
反编译后的代码,文件夹的职位和界面与资源引用之间的涉及,基本上都乱了.所以现在要化解的关键问题是:复苏文件间的关系和引用(另外的题材,通过调试就
差不多可以化解)。如图:

   图片 5
体的.cs和.resx(资源)文件不在同一个文本夹中,对应窗体的.resx文件都加上了品种或缓解方案名前缀(zhiyiSystem.)
——This is point! 
这就是大家要化解问题的首要性:恢复生机窗体的.cs和.resx文件间的涉嫌,操作大致有以下两步:1.
将窗体的.cs和.resx文件放在同一个文本中——即一律目录。2.去掉窗体的.resx文件的前缀
——即修改文件名,假设是一个个文本去修改,窗体相比较多的话,是一件极度重复而粗鄙的事,于是
就上网找
“批量修改文件名”的工具,下载了一六个感觉都糟糕用,找不到,只可以协调搞了,再说这东西简单,说白了就是
遍历文件夹闽南语件并’重命名'(代码就不贴出了,著作后 附有 自己写的
“批量改动文件名”工具)。

      
到此,程序就足以真正跑起来了。别看我写出来,似乎’破解’
是说话的事,但自我做的时候,却几经折腾
好几遍都感觉到”算了,又卡住了…”,有些或大或小问题,在这里因为时间的原由
及有些步骤一时半会也想不起来了,但重要的章程应该都不曾落下,若是有不知晓的对象,可以留言交流,再做解答;也盼望在’破解’方法有经历的,能多提些意
见,分享下您的‘破解’经验!

     后附:

批量改动文件名工具.rar

(Reflector插件)Reflector.FileDisassembler.rar

 

相关文章