1.reflector 进行反编译,可以反射中间语言(适合不懂IL),具体的初始化设置方法:点击View->Add-Ins...,弹出一个窗口,然后点击Add->选择文件夹里面的:"FileGenerator.dll",点击close.
然后回到Reflector窗口,Tool->Generator File(s)... 右边就出现了插件的窗口,选中左边的dll文件,点击右边的导出文件,源代码就全部导出来了!
另一个插件Reflector.FileDisassembler.dll设置方法也和这个一样,另外还有一些Reflector的相关插件下载,

2.导出的il文件可以使用WinHex进行修改

3.修改后使用IL反编译程序进行编译,相关知识:

il 转换成dll 和 exe 用的是ilasm
exe dll转换成 il 用的是 ildasm

ilasm 和 ildasm 在 C:\WINDOWS\Microsoft.NET\Framework\v1.* 后v2.* 下有 微软提供
(1)ilasm示例:
下面的命令对 MSIL 文件 myTestFile.il 进行汇编并产生可执行文件 myTestFile.exe。
ilasm myTestFile
下面的命令对 MSIL 文件 myTestFile.il 进行汇编并产生 .dll 文件 myTestFile.dll。
ilasm myTestFile /dll

下面的命令对E盘 MSIL 文件 myTestFile.il 进行汇编并产生 .dll 文件 myTestFile.dll。
ilasm E:\myTestFile /dll

下面的命令对 MSIL 文件 myTestFile.il 进行汇编并产生 .dll 文件 myNewTestFile.dll。
ilasm myTestFile /dll /output:myNewTestFile.dll
(2)ildasm示例
下面的命令使 PE 文件 MyHello.exe 的元数据和反汇编代码显示在 Ildasm.exe 的默认 GUI 中。
ildasm myHello.exe
下面的命令对 MyFile.exe 文件进行反汇编,并将结果 MSIL 汇编程程序文本存储在 MyFile.il 文件中。

ildasm MyFile.exe /output:MyFile.il
下面的命令对 MyFile.exe 文件进行反汇编,并将结果 MSIL 汇编程序文本显示到控制台窗口中。

ildasm MyFile.exe /text

如果文件 MyApp.exe 包含嵌入的托管和非托管资源,则下面的命令将产生以下 4 个文件:
MyApp.il、MyApp.res、Icons.resources 和 Message.resources:

ildasm MyApp.exe /output:MyApp.il
下面的命令对 MyFile.exe 的 MyClass 类中的 MyMethod 方法进行反汇编,并将输出显示到控制台窗口中。

ildasm /item:MyClass::MyMethod MyFile.exe /text
在上面的示例中,可能有几个具有不同签名的 MyMethod 方法。
下面的命令对返回类型为 void 且带有参数 int32 和 System.string 的 MyMethod 方法进行反汇编。

ildasm /item:"MyClass::MyMethod(void(int32,class System.String))" MyFile.exe /text

附:

Ildasm.exe 概要:

一.前言:

微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello World 的 exe 可执行文件)抽取出 IL 代码,并且给出命名空间以及类的视图。在讲述如何反编译之前,有必要从虚拟CPU的角度来看CLR,这样有助于先从正面了解代码执行过程。

虚拟CPU:

.NET 程序,其核心皆为 CLR ,而同时CLR的功能却与CPU非常相近,其中CLR执行IL代码(或叫做,IL指令)、操作数据,只不过操作的代码不同:CPU操作机器语言,而CLR操作IL代码。

由上,上述讲解的是从IL--机器语言的过程,而Ildasm则可以实现将可执行程序(机器语言)--IL代码,这就是Ildasm的主要功能

在Anytao的《你必须知道的.NET》中对IL代码专门做了说明,虽然暂时悟不透其"深远意义",但我还是愿意去开始我的IL之旅的,呵呵~。 在此我们先看,Anytao对于掌握(或者了解) IL代码的重要性:

1.通用的语言基础是.NET运行的基础,当我们对运行结果有异议的时候,如何透过表面看本质,IL是必须的基础

2. IL也是更好理解、认识CLR的基础

3.大量的实例分析是以IL为基础的,所以了解IL,是读懂他人代码的必备基础,同时自己也可以获得潜移默化的提高;

有上述3条影响,足以让任何一个有追求的人都鼓足劲,去开始IL之旅了(自然包括我,呵呵~)。

二 .Ildasm.exe 的使用方法:

在应用Ildasm.exe具体反编译代码之前,先附上MSDN对于用Ildasm.exe反编译的经典帮助示例:

然后我们用Ildasm.exe具体反编译经典的"Hello World"控制台程序的可执行文件,展现出来的视图为:

分析具体IL代码:

1.MANIFEST清单:

MANIFEST是一个附加信息列表,主要包含程序集的一些属性,如程序集名称、版本号、哈希算法等;

2.ConsoleApplication1.Program类:

这才是我们介绍的主角

首先是Program类: 代码为

.class private auto ansi beforefieldinit ConsoleApplication1.Program
       extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.Program

1).class,表示Program是一个类。并且它继承自程序集—mscorlib的System.Object类;

2)private,表示访问权限;

3)auto,表示程序的内存加载全部由CLR来控制;

4)ansi,是为了在没有托管代码与托管代码之间实现无缝转换。这里主要指C、C++代码等;

5)beforefieldinit,是用来标记运行库(CLR)可以在静态字段方法生成后的任意时刻,来加载构造器(构造函数);

其次是 .otor方法,代码为:

.method public hidebysig specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ret
} // end of method Program::.ctor

1)cil managed:表示其中为IL代码,指示编译器编译为托管代码;

2).maxstack:表示调用构造函数.otor期间的评估堆栈(Evaluation Stack) ;

3)IL_0000:标记代码行开头;

4)ldarg.0:表示转载第一个成员参数,在实例方法中指的是当前实例的引用;

5)call:call一般用于调用静态方法,因为静态方法是在编译期就确定的。而这里的构造函数.otor()也是在编译期就制定的。而另一指令callvirt则表示调用实例方法, 它是在运行时确定的,因为如前述,当调用方法的继承关系时,就要比较基类与派生类的同名函数的实现方法(virtual和new),以确定调用的函数所属的Method Table;

6)ret:表示执行完毕,返回;

最后是Main()方法,代码为:

.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello world"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main

1) .entrypoint指令表示CLR加载程序时,是首先从.entrypoint开始的,即从Main方法作为程序的入口函数;

2)ldstr:表示将字符串压栈,在这里就是将"Hello World." 压栈;

3)hidebysig:表示当把此类作为基类,存在派生类时,此方法不被继承,同上构造函数;

至此,我们对IL代码的一些指令有了了解,也纵观了IL世界里的概况,呵呵~

常用IL指令扩展:

一:创建对象实例的IL指令

关于创建对象的在内存分配的机制,在《内存探寻1之——值类型和引用类型的内存分配机制》 里有了详细的介绍。而常用的创建对象的IL指令使我们更好理解对象的步骤。其主要有4种:

1.newobj: 用于创建引用类型的对象;

2:ldstr:用于创建String对象变量;

3.newarr:用于创建数组型对象;

4:box:在值类型转换为引用类型的对象时,将值类型拷贝纸托管堆上分配内存;

二:通过IL代码,更好地理解属性

我们在C++中,在典型的类中,都会定义用于控制有效性输入的Set()函数,以及用于不同方式显示的Get()函数。然而在C#中,它将Get()函数和Set()结合在一起,刚开始难免会为之混淆。然而若通过 Ildasm.exe对程序反编译后观察属性的本质,即可看到其执行机制,如下图示(注:选自互联网):

由我们前面的分析IL代码的方法,以及上图的展示,我们可以看到属性被重新分为Get()函数和Set()函数。ex,属性Name,被分解为get_Name()函数和set_Name(String s)函数。这样我们对其本质就一目了然了!至于其属性的特殊表示形式,只看做是Set()函数和Get()函数的完美结合体就可以了,这也是C#语言的优美体现啊,呵呵~

转载于:https://www.cnblogs.com/nightly/archive/2011/10/11/dll.html

关于.net dll文件反编译相关推荐

  1. C# SDK exe dll 防止反编译

    / C# SDK (Software Development Kit) exe dll 防止反编译 加密工具 dotNET Reactor 是一款强大的 .NET 代码保护和授权管理系统,安全可靠.简 ...

  2. pyc文件反编译为py文件

    近期时不时需要把工程里的 pyc 文件反编译出来,查看接口函数的逻辑.此前有师兄安利了uncompyle6工具,我使用了几次,发现反编译出来的代码逻辑很清晰,此处我也不能打包票 uncompyle6 ...

  3. 请教大家:如何把.DCU文件反编译回源代码?谢谢。

    请教大家:如何把.DCU文件反编译回源代码?谢谢. Delphi / Windows SDK/API http://www.delphi2007.net/DelphiAPI/html/delphi_2 ...

  4. 【python】pyc文件反编译为py文件

    需求:把项目里的 pyc 文件反编译出来,查看接口函数的逻辑 解决方案:uncompyle6可将python字节码转换回等效的python源代码,它接受python 1.3版到3.8版的字节码 具体实 ...

  5. java的class文件反编译工具jad的应用

    java的class文件反编译工具jad的应用 JAD用法具体用法: http://www.kpdus.com/jad.html  官方最新版本,支持jdk1.6 Java下的一个简单易用的反编译工具 ...

  6. java class文件反编译 去掉无用注释

    java class文件反编译之后 有一些没有用的注释 在myEclipse中使用正则表达式 /\*(.*)\*/

  7. 对Android APK文件反编译查看其源码

    概述 作为android的开发者,相信你会有那么一刻,比如,对于手机中某一款App,有一项功能或者效果你蛮喜欢的,想学习一下它具体是怎么实现的.追求高一点的话,我想深究它这个App的项目架构,本着一探 ...

  8. Java class 文件反编译工具JD-GUI下载安装使用教程(好用)

    多少个日日夜夜上线系统.都会有明明我改成了最新代码咋没变呢这咋整,看看反编译后的文件吧.每次看完都哦的 豁然开朗. 简介: JD-GUI是java class反编译软件上线的时候很有用.开发这么多年找 ...

  9. Python代码封装的可执行exe文件反编译为Py脚本

    起因是笔者有个课,教图形图像学,作业的代码调不出老师的效果,于是就又有了hack的想法,把老师给的用来演示的exe文件反编译.主要是根据这篇文章的方法来的.将 exe 文件反编译成 Python 脚本 ...

  10. Android APK+Dex文件反编译及回编译工具

    本帖最后由 zhu891108 于 2012-8-3 11:00 编辑 大家好! 相信很多人玩智能手机,无论是塞班,安卓等等,不只是看重各种软件的功能,而更多的是看重系统的可定制性,可以自己动手DIY ...

最新文章

  1. window for jdk install
  2. 排序 np_P问题、NP问题、NP完全问题和NP难问题理解
  3. Android SDK下载失败的解决方法
  4. quartz mysql 建表_quartz创建表语句
  5. Spark Streaming介绍,DStream,DStream相关操作(来自学习资料)
  6. python中列表数据汇总和平均值_python的列表List求均值和中位数实例
  7. win7右键计算机管理参数错误,win7纯净版虚拟磁盘管理器参数错误怎么解决?
  8. 你的Windows Phone 手机还没有升级7.5吗?我有办法,亲身体验!
  9. mysql数据库教程全解_MySQL数据库基础教程详解
  10. 一加10 Pro首发定制X轴线性马达:Top级超大体积 安卓阵营马达天花板
  11. perl学习二:简单变量
  12. 【学习资料分享】光纤KVM坐席管理系统解决方案
  13. Blizzard的MPQ文件格式搜索算法
  14. python.exe无法找到入口
  15. 高速PCB设计系列基础知识67 | 尺寸与公差标注内容与通用知识
  16. 计算机网络安全中的审计,什么是网络安全审计
  17. 在VMware WorkStation中安装Windows Server 2016
  18. 【邻接图】解决图的模板
  19. 【CF 513F2】
  20. 站内通知 java组件,spring-aop组件详解——Advice通知

热门文章

  1. 将子节点中含子节点的json数据转换成ztree适合的json数据格式
  2. 【无人机航空摄影测量精品教程】目录:Pix4d、EPS、CC、PhotoScan、Godwork项目化作业流程及注意事项汇总
  3. 利用PS批量添加文件名到图片中
  4. C语言根号作用,c语言开根号(开根号编程)
  5. Android逆向实战篇(Luac文件解密)
  6. 2022.03.15 Arcmap栅格数据无法按照拟定范围进行重分类的解决方案
  7. sodp软件如何导入多个工作面信息_如何批量导入数据到手机通讯录
  8. 新商用密码产品认证梳理——检测和认证机构篇
  9. 传真服务器的定义与选购
  10. 【算法导论】有向图的可达矩阵