使用.NET JustDecompile来反编译你的程序代码
前言
在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序,由于因为是别人写的所以我们并没有原始码可以直接阅读,碰到这种情况我们就需要去反编译这些程序及 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.namespaceTools02.{03.publicclassSalaryHelper04.{05.publicdecimalGetMySalary()06.{07.return22000;08.}09.}10.}最后在建立一个 ConsoleApplication 将 Tools 类别库加入参考,并且呼叫 GetMySalary() 方法取得薪资,如下
01.namespaceConsoleApp02.{03.classProgram04.{05.staticvoidMain(string[] args)06.{07.Tools.SalaryHelper helper =newTools.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来反编译你的程序代码的更多相关文章
- 反编译工具 使用.NET JustDecompile来反编译你的程序代码
原文地址:http://www.it165.net/pro/html/201310/7383.html 前言 在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序 ...
- 反编译微信小程序
最近看了个微信小程序古诗词全集,想知道他的前后端是怎么实现的,所以就想到了反编译.小程序安装后会有个wxapkg格式的文件存在/data/data/com.tencent.mm/MicroMsg/** ...
- Android Studio 动态调试 apk 反编译出的 smali 代码
在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...
- 如何反编译微信小程序👻
如何反编译微信小程序 准备工具: 夜神模拟器(或者你可以自己准备一个安卓模拟器,有root权限.) RE文件管理器(下载地址:https://soft.ucbug.com/uploads/shouji ...
- OAF_开发系列28_实现OAF中反编译获取class包代码JD Compiler(案例)
20150730 Created By BaoXinjian
- 使用ILSpy软件反编译.Net应用程序的方法及注意事项
今天遇到之前同事写的代码没有源码了,但是客户要在原来的基础上修改程序!好在没有做加壳处理,所以就用了ILSpy软件进行反编译!下面把步骤及遇到的问题写下来: 1.打开ILSpy软件,点击File , ...
- Java中String的intern方法,javap&cfr.jar反编译,javap反编译后二进制指令代码详解,Java8常量池的位置
一个例子 public class TestString{ public static void main(String[] args){ String a = "a"; Stri ...
- 【C#】反编译C#应用程序
下面的使用的使用是笔者使用的一个简单的程序,就是弹出一个消息框. 这里通过 ildasm 反编译 应用程序得到 il 文件,然后对 il 文件进行修改,修改内容后,再通过ilasm编译为应用程序.il ...
- 利用微信电脑最新版 反编译微信小程序 无需root
一.前言 大家都知道编写一个微信小程序是非常漫长的,但是由于现阶段微信小程序存在反编译的可能,于是我去github上找到一个反编译工具(https://github.com/qwerty472123/ ...
随机推荐
- win10下安装mysql5.6 zip形式步骤
1. 解压之后可以将该文件夹改名,放到合适的位置,个人建议把文件夹改名为MySQL Server 5.6,放到C:\Program Files\MySQL路径中. 2. 添加环境变量.path中添加C ...
- 分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试
原文:http://www.iteye.com/topic/1145651 从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...
- Ext js 应用例子
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- grub
root (hd0,0) kernel /vmlinuz-2.6.32-573.8.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root nomodes ...
- react使用echarts
1.安装echarts: npm install echarts --save 2.制作线性图组件,只引入echart必要的js内容 /** * Created by yongyuehuang on ...
- android开发游记:SpringView 下拉刷新的高效解决方式,定制你自己风格的拖拽页面
关于下拉刷新/上拉载入很多其它的解决方式网上已经有非常多了,浏览了眼下主流的下拉控件比方PullToRefresh库等.第一:大多数实现库都难以进行动画和样式的自己定义. 第二:不能非常好的兼容多种滚 ...
- VR开发者必看:4大最为值得关注的内容平台【转】
时间 2016-01-19 14:12:57 原文 http://www.sfw.cn/xinwen/478369.html 主题 虚拟现实 Oculus 对很多有意涉及VR行业的内 ...
- 解决 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
事由: 迁移server的时候须要操作数据库.将数据库也进行迁移,在新server中导入数据的时候提示 The 'InnoDB' feature is disabled; you need MySQL ...
- yoman搭建你的react-webpack应用
还没有npm和node的要提前做好准备工作 做好这一切之后 我们安装yo,记住安装在全局变量中,我们需要用他的命令工具 npm install -g yo 接下来安装yo提供的react-webpac ...
- oracle 11g 中 (oracle 10g) crsctl 的 替换命令
oracle 11g 中 (oracle 10g) crsctl 的 替换命令 Deprecated Command Replacement Commands crs_stat ---集群状态 ...