C#代码反编译 得到项目可运行源码 经验分享
今天在网上看到了编辑了好几次,老是出错,作者所做的反编译,并不是'破解',我们这篇文章要跟大家分享的是:用Reflector将C#的开发的软件[项目](此文中所说的是winForm项目,对于.net项目可以借鉴或参考)的项目代码还原——反编译得到可运行项目源码。其使用的前提或情况是:公司原来请人开发的'配餐软件(幼儿园版)',现有客户咨询想买,并且软件中存在一些问题需改,——不是本人开发的,该软件也无源码,想修改只能想办法得到软件的源码。详细的'破解'方法记录在下,方便自己以后查看!(ps: '破解'的方法,自己之前就摸索过。但困于反编译之后的error比较多,没有耐心,有的问题感觉比较离奇,试了几次不行就放弃了 ——这就间接的说明:真正的黑客,应该都是比较有耐心的,呵呵..., 但做软件开发,又何尝不需要这样?!)
a.使用到的工具:Reflector,具体的说是:Reflector插件File disassembler(具体是什么和how to use,直接上网查)。
b. 打开Reflector,选择要'破解'的软件(.exe)主程序,再选择并点击 如图: #FormatImgID_0#, 在右侧出现的 程序集(输出)类型选择界面 选择类型'windows Appliction' (因为是winForm应用程序,如果是选择的其它 如'class ...'类库,则需要在之后的步骤中,改变项目属性中的 输出类型,不建议这样操作),如图:#FormatImgID_1#
点击 生成 即可 得到此主程序集的源码,其它的相关程序集再如此操作即可! ——不要以为大功告成,这只是第一步,麻烦的在后面!
c.将生成的源码 在Vs中打开(项目), 先试着运行下,(一般)会报错,排除'xxx程序集不存在'这类的错误,我所遇到的如下:
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[CompilerGenerated]
internal class <PrivateImplementationDetails>{1FF4F699-35E0-4117-BDBC-9E44A1B0F9F5}
{
internal static Dictionary<string, int> $$method0x600012e-1;
internal static Dictionary<string, int> $$method0x6000137-1;
internal static Dictionary<string, int> $$method0x6000137-2;
internal static Dictionary<string, int> $$method0x600014a-1;
internal static Dictionary<string, int> $$method0x6000169-1;
internal static Dictionary<string, int> $$method0x60001b6-1;
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-1; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-2; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-3; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-4; // data size: 20 bytes
[StructLayout(LayoutKind.Explicit, Size=20, Pack=1)]
private struct __StaticArrayInitTypeSize=20
{
}
}