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,下个版本因该就会有正式的修复。

转载于:https://www.cnblogs.com/birdshome/archive/2005/04/18/139646.html

Reflector.FileDisassembler的一个bug相关推荐

  1. 使用Reflector.FileDisassembler反编译DLL

    转自http://www.cnblogs.com/wuliangbo Reflector for .NET 下载地址:http://www.aisto.com/roeder/dotnet/ Refle ...

  2. .NET反编译工具Reflector及插件Reflector.FileDisassembler.dll

    FileDisassembler是Reflector 的一个插件,老外做的东西还真好用 .NET Reflector 下载地址(现在的最新版本是5.0.50.0) http://www.aisto.c ...

  3. 软件测试培训分享:做软件测试工作如何清楚的描述一个bug

    一名合格的软件测试工程师是需要清楚的交代自己的工作任务的,必须要清楚的告诉技术员出现的bug,那么做软件测试工作如何清楚的描述一个bug呢?来看看下面的详细介绍. 软件测试培训分享:做软件测试工作如何 ...

  4. EnterLib PIAB又一个BUG?

    在<这是EnterLib PIAB的BUG吗?>一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题.问题的起因源于<IoC+AOP的简单实现>这篇文章,因为 ...

  5. 一个Bug能有多大影响:亏损30亿、致6人死亡、甚至差点毁灭世界...

    欢迎关注方志朋的博客,回复"666"获面试宝典 作者:博雯   来源:量子位(QbitAI) 一个Bug就地蒸发5亿美元: 软件设计层面出Bug致6人死亡: DeBug不成功直接世 ...

  6. 从一个Bug开始,重新认识一个强大的 Gson

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:Mafly, 地址:www.cnblogs.com/mafly/p/gson.html 从 ...

  7. 关于MySQL count(distinct) 逻辑的另一个bug

    背景          上一篇博文(链接)介绍了count distinct的一个bug.解决完以后发现客户的SQL语句仍然返回错误结果(0), 再查原因,发现了另外一个bug.也就是说,这个SQL语 ...

  8. sdcms的一个bug,总是提示,该文件不允许被上传

    之前通过sdcms做过一个网站,最近在上传文件时,总是提示,该文件不允许被上传.于是跟踪了一下,发现了一个bug 上传附近是通过admin目录下的Sdcms_Editor_Up.asp来提交的,当文件 ...

  9. CSSFriendlyAdapter 的一个Bug

    因为要使用树控件的客户端脚本功能,发行asp.net 2.0中默认提供的树控件,并没有开放这方面的接口.要实现客户端的编程还是很有难度的. 查找了一些第三方的控件,不是需要收费,就是功能想对较弱. 后 ...

最新文章

  1. 科技公司狂挖高校AI学者:涸泽而渔还是产学双赢
  2. QIIME 2用户文档. 10元数据Metadata(2018.11)
  3. docker 标记和推送镜像
  4. android 修改菜单大小,如何在NavigationView中更改菜单项图标的大小?
  5. 将页面中表格数据导出excel格式的文件(vue)
  6. Appium+Robotframework实现Android应用的自动化测试-2:Windows中启动Appium和模拟器
  7. 【CodeForces - 255A】Greg's Workout (水题)
  8. 关于huihoo的一些意见和建议(转贴自Huihoo社区)
  9. 使用NetBSD构建基于iSCSI的小型SAN
  10. PyQt5-QLineEdit控件使用
  11. 奥本海姆信号与系统第2版笔记和课后答案
  12. 50V升压恒流LED驱动芯片
  13. 苏州大学 软件工程基础
  14. 3分钟带你了解Web前端开发工程师需要掌握什么?
  15. 安装ie9提示未能完成安装_win10系统安装iE提示“internet Explorer未能完成安装”的方法介绍...
  16. Java爬去教务系统后怎么发布_GitHub - canliture/CrawlerCourseTable: 课程表的java爬虫实现--基于“强智教务系统”...
  17. CHROME扩展笔记之webRequest·图片拦截
  18. 基于RTMP协议的Flash流媒体网页直播播放器
  19. DeleteMapping GetMapping PutMapping
  20. 2017年2月历史文章汇总

热门文章

  1. git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析
  2. 理解vue中if和for指令不能同时使用
  3. coreldraw x5 选择工具快捷键_CorelDRAW设置和优化提高工作效率
  4. php 持久化对象,php-对类持久化的引用
  5. 生成对抗网络的损失函数如何设计_如何检测极小人脸?试试超分辨率
  6. php电子邮箱表单,带邮件发送功能的表单(form.php)
  7. weblogic集群部署与负载均衡_集群,负载均衡,分布式的讲解和多台服务器代码同步...
  8. sunplus8202V双无线游戏手柄设计
  9. VB选择文件夹并取文件夹名
  10. 鸟叫就能黑掉AI系统,而且你根本察觉不到