ASP.NET反汇编

一,概述

DLL反汇编两种方法:(1)使用ildasm和ilasm两个自带的工具,加上IL(2)使用.NET Reflector插件FileDisassembler还原代码,重新编译。

首先说一下第一种方法,使用ildasm打开项目上发过来的dll,在file下有dump菜单(如果是中文版就是文件下的转储菜单),弹出新窗口确定即可,生成后缀为.il的文件。下面就需要懂一点il语言,以前一直认为学习这个il语言没什么用,今天只能现学一把,因为问题比较小,4、5行就搞定了。保存之后,使用ilasm重新编译这个il文件。使用命令如ilasm.exe GSP_WorkflowEngine.il /dll /output=GSP_WorkflowEngine.dll,就OK了。不过在写il的时候还是碰到了很多问题,一直编译出错,还是il没有写好,看来学习il还是很多好处的。

第二种就是使用.NET Reflector插件FileDisassembler,先把这个插件下好挂上,菜单中就会出现FileDisassembler这个菜单项,打开要反编译的dll,就可以生成出源码,即使用了混淆器,要修改的问题也很容易找到,毕竟我们对自己的代码还是很熟悉的。重新建解决方案,添加需要引用的 dll,重新编译就OK了。

写在最后,这两种方法本质上原理是一致的,我个人觉得,如果对il掌握的非常好的话,第一种方法是非常爽的,即使是在项目现场,对一些小问题修改都是相当轻易的。由此还想到.net的安全性,对于非强命名的dll来说,这种il级别的修改都是有效的,但对于软件的保护是相当不利的,我们是很容易从il中找到验证正版的代码信息,直接去掉,重新编译就破解了;对于入侵者来说,也是很容易修改系统上.net程序的运行方式的。

参见

维护旧版本项目的一些方法

对《防止对 Visual Basic .NET 或 C# 代码进行反相工程》的思考

MaxtoCode对.Net程序加密的原理及解密探讨二