Reflector.FileDisassembler的一个bug
2005-04-18 14:30
176 查看
Reflector for .NET应该是.NET程序员除了VS.NET以外必备的一个工具,当然你如果喜欢EditPlus一类的编辑器,甚至VS.NET也可以不用。Reflector内核版本升级非常的频繁,不过它的一个和重要的功能,获得反编译代码文件的功能却是一个叫Reflector.FileDisassembler的插件提供的。昨天反编译一个混淆过的assembly,发现了它的一个bug。
关于反编译别人的assembly对还是不对,不是我这篇文章讨论的话题,如果对这个感兴趣可以看看蔡学墉写的"To De or Not to De?"。
混淆对变量、类和名称空间的重命名,一般有两种主要的方案:一是简化方案,把能替换的symbol都换成尽可能简单的字符,从a开始,把大小写的字母排完,然后aa、ab、...、ZZ,再aaa;另一总方案是,把能替换的symbol都换成很复杂的一个随机字符串,足有10个以上的字符,其代表是XenoCode。对于使用第一种重命名方案的混淆器混淆后的结果,很容易出现名称空间叫a和A,类名叫a和A的情况。
Reflector.FileDisassembler生成.cs文件时,按一个class一个文件,文件路径根据名称空间来组织。这样一来问题就来了,由于Windows系统对于文件名和目录不区分大小写。如果我assembly中的名称空间叫a和A,其下的类为a和A。那么按照Reflector.FileDisassembler的文件命名策略就因该得到:a\a.cs、A\a.cs或a\a.cs、a\A.cs。这样的命名方式在Unix下可以生成不同的文件,可是在Windows下我们只能得到一个文件:a\a.cs
。
幸好Reflector.FileDisassembler发布的时候带有源代码,也就省得去Reflect一把了,毕竟机器生成的临时变量名看起来还是很不爽的
。修复这个bug很简单,修改了一下CreateFile方法,同时添加了一个GetUniqueFileName方法,源代码如下:
代码在回复中,贴上代码怎么也不能成功发帖
你可以把这段代码加入上面Denis Bauer的Reflector.FileDisassembler源代码中编译,也可以直接下载最新的插件dll。这个bug同时也反馈给了Denis Bauer,下个版本因该就会有正式的修复。
关于反编译别人的assembly对还是不对,不是我这篇文章讨论的话题,如果对这个感兴趣可以看看蔡学墉写的"To De or Not to De?"。
混淆对变量、类和名称空间的重命名,一般有两种主要的方案:一是简化方案,把能替换的symbol都换成尽可能简单的字符,从a开始,把大小写的字母排完,然后aa、ab、...、ZZ,再aaa;另一总方案是,把能替换的symbol都换成很复杂的一个随机字符串,足有10个以上的字符,其代表是XenoCode。对于使用第一种重命名方案的混淆器混淆后的结果,很容易出现名称空间叫a和A,类名叫a和A的情况。
Reflector.FileDisassembler生成.cs文件时,按一个class一个文件,文件路径根据名称空间来组织。这样一来问题就来了,由于Windows系统对于文件名和目录不区分大小写。如果我assembly中的名称空间叫a和A,其下的类为a和A。那么按照Reflector.FileDisassembler的文件命名策略就因该得到:a\a.cs、A\a.cs或a\a.cs、a\A.cs。这样的命名方式在Unix下可以生成不同的文件,可是在Windows下我们只能得到一个文件:a\a.cs
。
幸好Reflector.FileDisassembler发布的时候带有源代码,也就省得去Reflect一把了,毕竟机器生成的临时变量名看起来还是很不爽的
。修复这个bug很简单,修改了一下CreateFile方法,同时添加了一个GetUniqueFileName方法,源代码如下:
代码在回复中,贴上代码怎么也不能成功发帖
你可以把这段代码加入上面Denis Bauer的Reflector.FileDisassembler源代码中编译,也可以直接下载最新的插件dll。这个bug同时也反馈给了Denis Bauer,下个版本因该就会有正式的修复。
相关文章推荐
- Reflector.FileDisassembler的一个bug修复
- HTML5中的FileSystem API的一个问题(或者是BUG)
- [Flex]FileReference的一个bug!?
- cmake的一个bug--- '/foCMakeFiles/......../xxxxx.rc.res:No such file
- [lwn] A nasty file corruption bug - fixed (关于Linus解决的一个set_page_dirty很隐蔽的bug)
- [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found
- Reflector.FileDisassembler较大升级
- Reflector.FileDisassembler
- [Flex]FileReference的一个bug!?
- Reflector 和两个插件FileGenerator和Disassembler
- Win7解决了Silverlight的SaveFileDialog的一个Bug?
- 在使用.Net Reflector时发现了一个Bug:)
- .NET Reflector 及 Reflector.FileDisassembler 的主页
- 一个filegroup backup+log backup的bug
- 剖析一个由sendfile引发的linux内核BUG
- 一个由sendfile引发的linux内核BUG
- .NET反编译工具Reflector及插件Reflector.FileDisassembler.dll
- 共享一个对Reflector 反编译支持中文的修正FileGenerator文件
- 使用Reflector.FileDisassembler反编译DLL
- 剖析一个由sendfile引发的linux内核BUG