原文地址:http://www.it165.net/pro/html/201310/7383.html

    • 前言

        在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序,由于因为是别人写的所以我们并没有原始码可以直接阅读,碰到这种情况我们就需要去反编译这些程序及 DLL 档案。

        首先大概介绍一下 DLL 是什么,DLL 全名是 Dynamic Linking Library (动态链接库),当你使用 .NET 开发应用程序时,使用的是网站项目或类别库时,当项目建置完成后即会在项目底下的 Bin 数据夹中产生将你所撰写项目中所有的 Class 档案编译成 DLL 档案,而如果开发的是共享工具类别库,就能够将此 DLL 档案提供给多个应用程序与网站参考使用。

        但 DLL 档案是编译过后的档案,一般情况下是无法得知内部撰写的程序代码,所以在此就必须要使用反编译的工具来协助去窥探 DLL 内的原始码,在此要注意一点,DLL 档案是可以被反编译的,所以不要以为将程序写成 DLL 档案后别人就无法可以得知内容,但如果真的要隐藏 DLL 的内容,可以透过混淆 DLL 的方式来将 DLL 档案内的程序代码搞得乱七八糟,增加被反编译后阅读的困难度。

      建立一个类别库

        在反编译 DLL 之前我们先建立一个类别库来供之后反编译使用,开启 VS 建立一个类别库项目,如下


       
      接着建立一个 SalaryHelper 的 Class 档案用来计算薪资金额,如下
       

       
      而 SalaryHelper Class 的内容就简单的撰写一个方法并回传薪资金额,如下

      01.namespace Tools
      02.{
      03.public class SalaryHelper
      04.{
      05.public decimal GetMySalary()
      06.{
      07.return 22000;
      08.}
      09.}
      10.}

      最后在建立一个 ConsoleApplication 将 Tools 类别库加入参考,并且呼叫 GetMySalary() 方法取得薪资,如下

      01.namespace ConsoleApp
      02.{
      03.class Program
      04.{
      05.static void Main(string[] args)
      06.{
      07.Tools.SalaryHelper helper = new Tools.SalaryHelper();
      08.Console.WriteLine(
      09.string.Format("My Salary is {0}", helper.GetMySalary().ToString()));
      10.Console.Read();
      11.}
      12.}
      13.}

      执行结果如下

      使用 IL 反组译工具

        在安装 Visual Studio 时通常会一并安装 Windows SDK Tools,在 Windows SDK Tools 中有一个 IL 反组译工具可以将 DLL 档案反编译成中间语言,如下


       

        透过 IL反组译工具 将 DLL 反编译成中间语言后就能够与原始码进行对应,不过此中间语言实在非常不亲切,所以我们将改使用其它的工具来进行反编译动作。

        用来反编译的工具中比较常听到的就是 Redgate .NET Reflector 与 Telerik .NET Decompiler 此两款工具,.NET Reflector 此工具是需要收费的工具,但是功能还蛮强大的,如果有经常频繁深入的使用时建议可以购买此款工具,而 .NET Decompiler 则是免费的反编译工具,功能虽没 .NET Reflector 强大,但是是免费的先够用就好啦,以下就用此工具来进行示范。

      使用 Telerik .NET Decompiler 工具反编译程序代码

        首先进入下载网址点选 Free Download 下载安装档案


       
      下载完成后就可以进行安装,下一步下一步....的点到完成
       

       
      安装完成后到 「开始」→「所有程序」→「Telerik」找到 Telerik JustDecompile 程序执行,如下
       

       
      开启 JustDecompile 程序后,点选上方工具列的 「Open...」→「File(s)...」寻找到我们建立的 Tools DLL 档案开启
       

       
      开启后展开的树状目录如下,并且在 Tools 命名空间中找到我们撰写的 SalaryHelper Class
       

       

      选择到 SalaryHelper 后,右边的分隔窗口就会显示该类别反编译后的程序代码,如下

      反编译的程序代码


       
      原始的程序代码
       

       
      透过 .NET Decompiler 工具将 DLL 档案反编译后,是不是发现两着的相似度很高且非常亲切呢 :P,另外此工具也能够将反编译的程序代码转换为其它语言的代码,在上方的工具列上可以看到一个 C# 的下拉选单,点击后可选择 C#、VB、IL 语言
       

       
      若你是撰写 VB 语言的,可以将 C# 改成 Visual Basic ,修改后反编译的代码就会变成 Visual Basic 语言的程序代码,是不是很方便呢。
       

       
      使用此工具还有还有还有一个很重要的功用是可以去看 .NET Framework 实作的类别库!如果是在 Open 的时候选择的是 Load  Framework 就可以选择已安装的 .NET Framework 开启来阅读,如下
       

       
      如此就能够看到 .NET Framework 类别库中底层去实作功能的做法,以上就是一个简单使用的方法,供各位有需要的人作为参考啦。

反编译工具 使用.NET JustDecompile来反编译你的程序代码的更多相关文章

  1. Java反编译工具JD-GUI以及Eclipse的反编译插件

    什么是反编译 高级语言源程序经过编译变成可执行文件,反编译就是逆过程.但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序. 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前 ...

  2. ARM 编译工具keil 和 IAR 命令行编译和下载

    目的 不管是Keil还是IAR对代码补全,高亮等编辑功能支持的不是很好,虽然现在的Keil 5.25对界面的支持好了很多,但是很多人还是青睐于第三方的编辑器,命令行的编译方式可以让我们在使用第三方编辑 ...

  3. python反编译工具

    开发类在线工具:https://tool.lu/一个反编译网站:https://tool.lu/pyc/ 一看这个标题,就是搞坏事用的, 用 java 写程序多了,很习惯用反编译工具了,而且玩java ...

  4. Java 反编译工具哪家强?对比分析瞧一瞧

    前言 Java 反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java 对于 Class 字节码文件的生成有着严格的要求,如果你非常熟悉 Java 虚拟机规范,了解 Class 字 ...

  5. 怎么使用Less/Sass编译工具koala

    怎么使用Less/Sass编译工具koala 如何使用Less/Sass编译工具koala 一.SASS调试插件的方法 如需调试功能,请在编译输出的时候输出debug信息,那样解析的css文件中就会包 ...

  6. java9新特性-17-智能Java编译工具

    1.官方Feature 139: Enhance javac to Improve Build Speed. 199: Smart Java Compilation, Phase Two 2.使用说明 ...

  7. Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake

    前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...

  8. (转).net反编译工具JustDecompile

    开源的反编译工具  JustDecompile https://www.telerik.com/blogs/justdecompile-engine-becomes-open-source https ...

  9. 免费的.NET混淆和反编译工具

    免费的.NET代码混淆工具: Eazfuscator.NET  http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.as ...

随机推荐

  1. HDU 5040 Instrusive(BFS+优先队列)

    题意比较啰嗦. 就是搜索加上一些特殊的条件,比如可以在原地不动,也就是在原地呆一秒,如果有监控也可以花3秒的时间走过去. 这种类型的题目还是比较常见的.以下代码b[i][j][x]表示格子i行j列在x ...

  2. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选 ...

  3. Linq101-QueryExecution

    using System; using System.Linq; namespace Linq101 { class QueryExecution { /// <summary> /// ...

  4. C#多线程lock解决数据同步

    1.代码实例: public class ThreadTest4 { public static void Init() { //多个线程修改同一个值,使用lock锁解决并发 ; i < ; i ...

  5. 重温web服务器--细说Tomcat服务器

    从大学开始接触java web的开发时就开始使用tomcat部署web项目,对它的理解仅仅停留在"这是个开源免费的servlet容器"的阶段,后来也接触了一些tomcat的体系,原 ...

  6. weka打开提示内存不足的解决方法

    今天在linux中打开Weka时,打开基因数据文件的时候出现如 Not enough memory . Please load a smaller dataset or use a larger he ...

  7. [转]Traits 编程技法+模板偏特化+template参数推导+内嵌型别编程技巧

    STL中,traits编程技法得到了很大的应用,了解这个,才能一窥STL奥妙所在. 先将自己所理解的记录如下: Traits技术可以用来获得一个 类型 的相关信息的. 首先假如有以下一个泛型的迭代器类 ...

  8. 汇编程序w=x*y+z-200

    DATA   SEGMENTX      DW  1000Y      DW  2000Z      DW  3000W      DW  2 DUP(?)DATA   ENDSCODE   SEGM ...

  9. vi文本编辑器

    vi文本编辑器分为3个模式: 命令模式 插入模式 ex模式 在命令模式下我们可以使用一下功能 o 插入新的行 u 撤销 n yy  复制n行 p 粘贴 / 查找 i 进入插入模式 exc到命令模式 e ...

  10. C++ Primer 5th 第16章 模板与泛型编程

    模板是C++中泛型编程的基础,一个模板就是创建一个类或者函数的蓝图或者说公式. C++模板分为函数模板和类模板. 类模板则可以是整个类是个模板,类的某个成员函数是个模板,以及类本身和成员函数分别是不同 ...