Reflector.FileDisassembler的一个bug

简介:

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.csangry_smile.gif

    幸好Reflector.FileDisassembler发布的时候带有源代码,也就省得去Reflect一把了,毕竟机器生成的临时变量名看起来还是很不爽的confused_smile.gif。修复这个bug很简单,修改了一下CreateFile方法,同时添加了一个GetUniqueFileName方法,源代码如下:

     代码在回复中,贴上代码怎么也不能成功发帖


    你可以把这段代码加入上面Denis Bauer的Reflector.FileDisassembler源代码中编译,也可以直接下载最新的插件dll。这个bug同时也反馈给了Denis Bauer,下个版本因该就会有正式的修复。


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。 

目录
相关文章
|
8月前
|
IDE 开发工具
ide internal errors【bug】
ide internal errors【bug】
115 0
|
10月前
|
Java
以下代码找bug
以下代码找bug
86 0
|
架构师 测试技术 程序员
程序中的Bug是如何产生的?
  ★   Bug,总是令人讨厌的东西。那Bug是如何产生的呢?作为高级软件架构师和软件测试工程师的易哥将在这篇文章中解答这个问题。   ”   说起Bug,大家都认为它是被“写”出来的,即主要在开发阶段产生。   但其实Bug的产生最有可能是在需求阶段(意外吧!这是有统计数据证明的),且在需求阶段产生的Bug影响最大。当然,在设计、开发、使用阶段也会出现Bug。   接下来我们详细了解下Bug的相关知识。
714 0