⽂件名⼯具)
谈到"",⼤家可能都会想到⼯具,对其应该也不会太陌⽣;做C#开发,它算得上是⼀个不可或缺的实⽤⼯具。通过它我们可以很⽅便的查看⼀个程序集的源代码(这是其最基本的使⽤,也是⼤家常⽤的),还可以⽅便...,⽽我这篇⽂章要跟⼤家分享的是:⽤Reflector将C#的开发的软件[项⽬](此⽂中所说的是winForm项⽬,对于项⽬可以借鉴或参考)的项⽬代码还原——反编译得到可运⾏项⽬源码。我所做的,并不是'破解',其使⽤的前提或情况是:公司原来请⼈开发的'(幼⼉园版)',现有客户咨询想买,并且软件中存在⼀些问题需改,——不是本⼈开发的,该软件也⽆源码,想修改只能想办法得到软件的源码。具体的'破解'⽅法记录在下,⽅便⾃⼰以后查看!(ps: '破解'的⽅法,⾃⼰之前就摸索过。但困于反编译之后的error⽐较多,没有耐⼼,有的问题感觉⽐较离奇,试了⼏次不⾏就放弃了 ——这就间接的说明:真正的⿊客,应该都是⽐较有耐⼼的,呵呵..., 但做软件开发,⼜何尝不需要这样?!)
a.使⽤到的⼯具:Reflector,具体的说是:(具体是什么和how to use,直接上⽹查)。
b. 打开Reflector,选择要'破解'的软件(.exe)主程序,再选择并点击如图: , 在右侧出现的程序集(输出)类型选择界⾯选择类型'windows Appliction' (因为是winForm应⽤程序,如果是选择的其它如'class ...'类库,则需要在之后的步骤中,改变项⽬属性中的输出类型,不建议这样操作),如图:
点击⽣成即可得到此主程序集的源码,其它的相关程序集再如此操作即可! ——不要以为⼤功告成,这只是第⼀步,⿇烦的在后⾯!
c.将⽣成的源码在Vs中打开(项⽬), 先试着运⾏下,(⼀般)会报错,排除'xxx程序集不存在'这类的错误,我所遇到的如下:
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
{
}
}
源码⽂件中会出现⼀个 _PrivateImplementationDetails_{1FF4F699-35E0-4117-BDBC-9E44A1B0F9F5}.cs ⽂件名很长内容如上的乱码类,对此解决办法时:注释此类或直接删除。【程序相关的⽂件,如图⽚、数据库等要记得放到项⽬关联位置,⼀般在bin/debug/⽂件夹下】
d. 添加相关程序集的引⽤,设置启动对象。到这⼉,差不多程序就可以跑起来了,但是还没有完 ——因为反编译后的代码,⽂件夹的位置和界⾯与资源引⽤之间的关联,基本上都乱了.所以现在要解决的关键问题是:恢复⽂件间的关联和引⽤(其它的问题,通过调试就差不多可以解决)。如图:
马凡舒走光窗体的.cs和.resx(资源)⽂件不在同⼀个⽂件夹中,对应窗体的.resx⽂件都加上了项⽬或解决⽅案名前缀(zhiyiSystem.) ——This is point! 这就是我们要解决问题的关键:恢复窗体的.cs和.resx⽂件间的关联,操作⼤致有以下两步:1.将窗体的.cs和.resx⽂件放在同⼀个⽂件中——即同⼀⽬录。2.去掉窗体的.resx⽂件的前缀 ——即修改⽂件名,如果是⼀个个⽂件去修改,窗体⽐较多的话,是⼀件⾮常重复⽽⽆聊的事,于是就上⽹ "批量修改⽂件名"的⼯具,下载了⼀两个感觉都不好⽤,不到,只能⾃⼰搞了,再说这东西简单,说⽩了就是遍历⽂件夹中⽂件并'重命名'(代码就不贴出了,⽂章后附有⾃⼰写的 "批量修改⽂件名"⼯具)。
五一节日短信到此,程序就可以真正跑起来了。别看我写出来,似乎'就是⼀会⼉的事,但我做的时候,却⼏经折腾好⼏次都感觉"算了,⼜卡住了...",有些或⼤或⼩问题,在这⾥因为时间的原因及有些步骤⼀时半会也想不起来了,但主要的⽅法应该都没有落下,如果有不明⽩的朋友,可以留⾔交流,再做解答;也希望在'破解'⽅法有经验的,能多提些意见,分享下你的‘破解’经验!
后附:
发布评论