如何修改被编译后DLL文件

原文 http://www.cnblogs.com/wujy/p/3275855.html

我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果;本文将通过一个实例来演示如果完成一个简单的修改;我们将会用到以下几种工具;

1:反编译工具ILSpy.exe:是个很不错的反编译软件,而且是免费了;

2:微软的工具ildasm.exe:这个是把DLL生成IL文件的一个软件,是微软自带了;可以在C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin找到该软件;

3:微机的工具ilasm.exe:这个是把IL文件重新生成DLL的功能,可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319找到该软件;

 

我们新建一个WEB项目,模拟它要插入加密狗才能运行,当然这边的加密狗是我们的一个比喻,实例很简单七个步骤就可以完在;

步骤一:使用ILSpy.exe打开Web.dll文件;查看其源代码的情况:

从上面反编译出来的源代码不难发现重点是在GetLicense()方法,这个也是我们要修改的内容,从上面可以看出在没有修改前这个都是会提示要插入加密狗的;

步骤二:接下来就是要使用ildasm.exe把DLL这个文件转化成IL文件;

把dll文件转储为*.il文件存到某个指定文件夹里,得到Web.il和Web.res两个文件,有时也会有*.resource文件

 

步骤三:我们可以打开Web.il文件,里面有DLL生成的IL内容,我们很容易就可以定位到想要的这个方法,只要让它固定返回true就可以达到修改成功,方法内的IL代码就是我们要修改的内容;

步骤四:修改GetLicense()方法内的IL代码,让它固定返回true;下面这个IL就是让它返回为true;修改完接着保存IL文件;

步骤五:当修改完IL文件后要把它转化成DLL文件,打开DOC命令输入进入到*.il的文件夹,然后输入命 令:c:\windows\microsoft.net\framework\v4.0.30319\ilasm.exe /dll/resource=Web.res Web.il

*1:要进入IL文件的文件夹 2:其中"/dll/"这个前面要有一个空格 3:.res文件要在.il文件前面,中间要有个空格

步骤六:运行完上面的命令后会生成一个新DLL文件,然后把它复制到我们的站点下面:

步骤七:运行的结果:

完成上面的七个步骤就可以成功修改DLL文件,当然本实例只是一个简单的修改,若要进行比较复杂修改IL代码则要对IL知识有个相当的了解;下面是一个可能会经常要用到的IL返回true跟false的代码;

    .maxstack 1
    .locals init (
        [0] bool CS$1$0000)
    L_0000: nop
    L_0001: ldc.i4.1
    L_0002: stloc.0
    L_0003: br.s L_0005
    L_0005: ldloc.0
    L_0006: ret

return true;

    // 代码大小       7 (0x7)
    .maxstack  1
    .locals init ([0] bool CS$1$0000)
    IL_0000:  nop
    IL_0001:  ldc.i4.0
    IL_0002:  stloc.0
    IL_0003:  br.s       IL_0005

    IL_0005:  ldloc.0
    IL_0006:  ret

return false;

 

时间: 2024-10-29 22:35:33

如何修改被编译后DLL文件的相关文章

asp.net源程序编译为dll文件并调用过程

使用csc命令将.cs文件编译成.dll的过程 很多时候,我们需要将.cs文件单独编译成.dll文件, 操作如下: 打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFrameworkv1.1.4

asp.net源程序编译为dll文件并调用的实现过程_实用技巧

很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件.具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFra

把aspx文件编译成DLL文件

编译 前言 Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互,为开发人员提供了类似Windows下窗口编程的界面,为开发大型网络应用程序功能提供了良好的编程接口,也能够极大地提高开发人员的工作效率. 然而,"一次转换,两次编译"过程使得aspx文件在首次执行(或更新后首次运行)时显得略有不足,特别是在拥有大量aspx及codebehind的代码

设置-vs2010 mfc编译后debug文件夹为空

问题描述 vs2010 mfc编译后debug文件夹为空 vs2010 mfc编译后debug文件夹为空,没有xx.exe等文件存在,release也不行,那个文件夹也为空.之前都还可以,不知道动了什么设置后就不行了,请大神们解答解答 解决方案 编译方式是否正确.或者试试重新生成选项 解决方案二: 右击工程,看以看到重新生成 解决方案三: 看看工程设置的输出目录设置是否指向了其它目录 解决方案四: 把编译输出贴上来看看.看看输出到哪里去了. 解决方案五: 编译当然是空的啊,点击生成解决方案,或是

编译成DLL文件问题。。

问题描述 请问各位大侠,,我要把html,js,小的图片,编译成DLL文件,请问在NET2.0里面怎么实现,谢谢 解决方案 解决方案二:做成资源文件放进去解决方案三:做好了资源文件,是不是以后就可以把HTML,JS..文件去掉了.只要DLL就可以了.谢谢

请问有了一个 App_Code.csproj 的文件,如何编译成为DLL文件!

问题描述 请问有了一个App_Code.csproj的文件,如何编译成为DLL文件!VS2008简体中文版本!我怎么编译都是编译成为EXE!希望高手赐教!我是新手!!谢谢! 解决方案 解决方案二:请高手帮忙啊!!!解决方案三:错误1类型"System.Xml.Serialization.IXmlSerializable"在未被引用的程序集中定义.必须添加对程序集"System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken

恢复Reflector反编译后资源文件的办法

反编译问题: 1.路径问题:如果遇到了Path.Combine,有错误改下即可 2.资源文件问题: 在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选中"Save as" 选项保存即可. 例:对于项目文件夹里面的TryAssemb.Form1.resx,首先改为Form1.resx然后移动到TryAssemb目录里面 3.对窗体打开"视图设计器",发现会出现下面的错误: 修改方法就是对所有System.Windows

vs2013 如何做到编译后exe 文件自动升级

问题描述 请教:在vs2013中,如何每编译一次,exe文件版本就升级一次,例如从ver1.0.0.1到ver1.0.0.2. 解决方案 解决方案二:有这个功能能?一般都是自己改吧解决方案三:你学学使用vs开发工具.从基础学起.

dll文件在二次编译后变小?

问题描述 为何dll文件在二次编译后会变小?http://topic.csdn.net/t/20030730/16/2089777.html已经看过了原dll文件用ildsm反编译过来后,不做任何改过,然后用ilasm/dll/resource:*.res/output:*.dll*.il编译成dll文件为什总是变小了1K呢声明:用这种方法我已改过一个网站的DLL文件,编译回去也没有问题,大小一样,网站运行正常.可现在这个为什么不成功,总是变小呢?难道有防反编译?期待中,如能帮我解决这个问题,万