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

        今天碰到一个比较棘手的问题,一个做了2年多的项目上反映了一个问题,问题比较简单,但是涉及改动的dll引用的dll非常多,而且项目上的版本已经很旧了,这一处的改动会影响到几乎所有的dll的更新。单独更新这个dll是不可能了,也不能做完面的版本升级(公司的规定,可能升级是要花钱的,呵呵),而且vss中也清过了,没有留当时的代码。如果dll也能像asp页面一样直接修改,保存后就运行就好了。
        查了下资料,发现两种方法:(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程序的运行方式的。

posted on   栖息的熊  阅读(4715)  评论(13编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
· 全程使用 AI 从 0 到 1 写了个小工具

导航

< 2007年3月 >
25 26 27 28 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示