接上篇,刚开始我以为以前开发组的郑Sir是用ildasm来反编译并修改代码的,但是当我读了ildasm反编译出来的结果后发现,ildasm得到的是类似于debug的汇编代码,郑Sir应该有别的方法,因为他每次改.exe文件都很快,会立即生成一个新的给我. 我qq问了郑Sir(一年没联系啊!),他告诉我是用Reflector来直接得到源代码的,哈哈! 我让他发了个7.0版本的给我,开始玩起来.... Reflector也是可以区分.NET还是C原生程序,如果是非.NET程序则会显示Not a .NET
module.
先拷贝一个WcfSvcHost.exe出来,别把源文件给玩坏了.用reflector打开这个文件,找到了导出为源代码的功能,哈哈! 得到了整个工程文件
选中Usage字串,按Insert键,直接编辑这个二进制文件,把Usage替换成K.O.by.Jinifly--改掉它! Rebuilt工程,如我所料,开始出现一些错误,Reflector也不是100%能还原出源程序的. 根据错误提示,很明显Private EventHandler ApplicationExit与internal event
EventHandler ApplicationExit重复定义了ApplicationExit,
由于后面写了实现部分,我把Private的申明注释掉,pass! 又出现了重复XX特性的提示,这又是在哪个文件中重复定义了相同的字段,我把整个这段出错的代码注释掉,pass! 接下来又提示签名失败,这想必是当初生成WcfSvcHost.exe时微软开发组做的签名
签名字段应该与发行公司,版本等属于程序本身的信息,找了一下,它是AssemblyInfo.cs定义的,根据前面错误提示的"f:\dd\tools...",我试着把对应的那一行注释掉. 然后去掉程序的签名,再rebuild,又过了.(尽管有一个延迟签名的警告) 再Run一下,OK了,哈哈! 找到程序属性的目标平台,改为x64,rebuild, OK! 后来发现不同版本的Reflector,反编译出来的源码效率是不一样的. 我到Reflector站点上下了个最新试用版的ver
7.5.4.20(现在开始收费了),见下面的Applauncher.cs对ApplicationExit事件,只有定义,没有实现部分 而用郑Sir给我的老版本ver
7.0,不仅出现了重复的定义,还有实现部分,这个实现部分会导致"事件XXX只出现在+=或-="这个错误,实现部分从代码语法上看(从38行开始)是没有错误的,试着改了几次都过不去,后来偶然发现最新版反编译出的源码是OK的.
可以发现ResourceManager最终负责对StringResources.resources资源文件的处理 百度百科对Reflector有清晰的说明: http://baike.baidu.com/view/3803210.htm |
|