dnSpy 强大的.Net反编译软件
作者:D.泡沫
一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dotPeek等等。而dnSpy同样是一款优秀的反编译软件,同时它是开源免费的。官方的描述是: dnSpy是一个调试器和.NET组件编辑器。 即使您没有任何可用的源代码,也可以使用它来编辑和调试程序集。

这个是官方的图片,可以看出和VS的风格还是很像的,使用起来也有很多相似的地方,善于用VS的人,可以很快的上手这个软件。当然除了这个深色的主题以外,还有浅色主题可以切换。
dnSpy使用ILSpy反编译器引擎和Roslyn(C#/ Visual Basic)编译器以及许多其他开源库,可以编译.Net Framework, .Net Core和Unity游戏部件,不需要源码。今天将给大家演示一下,dnSpy强大的调试和编辑应用程序的功能。
1. Debug外部引用的Dll文件
首先准备一个简单的程序,期待的结果是输入人数得到促销后的总价,界面如下:

看一下程序,其实就是简单的取得输入的人数,然后调用第三方类库的方法,得到结果:

这里的Calculator.GetAmountByPromotion方法是_3rdCalculator的第三方类库提供的,我们无法直接确定其内部实现。
输入一下测试数据:

再输入一下新的测试数据:

会发现很难推测出内部的逻辑。这个时候就可以进行debug了。
打开dnSpy.exe。这个时候请注意,由于这个项目用的是.net core并且是publish的,所以可以直接用dnSpy直接打开publish目录下的要debug的dll文件。

在需要的地方打上断点,然后使用attach的快捷键Ctrl+Alt+P,在弹出的列表里选择

再点击页面的提交按钮触发事件:

这个时候可以看到结果显示在下面Locals的窗口里面。
需要注意的是,如果是不需要publish的,而是直接把整个代码放在IIS下,然后每次编译就是一次发布的情况,不要直接使用代码下面的bin目录里的dll文件,因为IIS会把build出来的dll文件,动态生成一份出来,存到类似于\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\c8367e31\abdb5fb1\assembly\dl3下面的目录里,这个时候要先搜索到你想debug的方法在哪个dll文件里,然后搜索到这个文件位置,再用dnSpy打开它,dnSpy会自动加载和这个dll有关联的所有dll文件,然后启动网站,这个再附加到w3p.exe上就可以了。
2. 调试应用程序
调试应用程序
还是以上一个例子为例,这次生成一个exe的文件。
代码如下

运行,窗口如下:

打开dnSpy,找到exe文件的位置,打开要调试的dll文件:

在需要的地方打上断点,点击上面的Start开始调试:

弹出的窗口设置保持默认就可以,程序执行,输入人数后,进入断点,就可以正常调试了:
[此处输入图片的描述][13]
注意,一般dnSpy会把相关的dll都自动加入进来,但是如果是不在一个地方,工具检测不到的,但是有依赖的,必须手动加入进来。3. 修改exe文件的内容
dnSpy编辑dll文件的功能很方便,不用其他插件或者辅助,就可以进行修改。例如上面的例子,我想把计算逻辑增加超过10个人的时候,优惠更高,那么我可以直接修改dll里面的方法。
首先找到要修改的方法,然后在方法上点击右键:
[此处输入图片的描述][14]
在弹出的新窗口上直接修改方法:

编辑结束后,点击下面的Compile. 然后点击保存所有。继续点OK。

这个时候点击exe文件,输入人数,会发现比10个人的时候还要便宜了很多,就是代码生效了:

以上就是比较常用的功能,当然dnSpy还有很多贴心和有用的功能,有待大家去发现。附上官方地址,请大家自己去挖掘了。谢谢大家。
dnSpy 强大的.Net反编译软件的更多相关文章
- (转)dnSpy 强大的.Net反编译软件
		
目录 1. Debug外部引用的Dll文件2. 调试应用程序3. 修改exe文件的内容 作者:D.泡沫 一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dotPeek等等 ...
 - .Net反编译软件
		
.Net反编译软件 https://www.cnblogs.com/xiandnc/p/10132491.html 一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dot ...
 - APK Multi-Tool强大的APK反编译工具终极教程
		
一.APK Multi-Tool介绍 APK Multi-Tool 是APK Manager的升级版,是一个强大的APK反编译工具,集多种功能于一身,是居家必备.做ROM必选的工具! 这是 ...
 - ILSpy反编译软件的使用
		
早期.Net平台下的反编译软件一般用reflector,但自从其商业化后就没有使用了,现在主要用ILSpy查看dll的源码,其开源.免费的特点很快就流行开来,功能和性能丝毫不逊于reflector ...
 - 破解C#反编译软件Reflector 11.1.0.2167(最新版)(附补丁下载)
		
本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com QQ群3244694 补丁下载地址:https://download.csdn.net/d ...
 - .NET Reflector 8.3.3.115 官方最新版+注册机(强大的.NET反编译工具破解版)
		
Lutz Roeder’s .NET Reflector,是一个可以将以.NET Framework为基础开发出来的的DLL或EXE文件,反编译为原始程序的工具软件..NET Reflector 工具 ...
 - 推荐一款C#反编译软件(开源)
		
大二的时候老师要求做过一个小项目,大概4个人左右一组.当时交流不是特别到位,项目在一个同学的电脑上建成了就一直在他的电脑上(所以好东西不要烂在你的硬盘里),也不知道什么源码管理,可悲到项目做完我还没有 ...
 - 专注于C#.Net WPF软件开发-软件反编译-软件破解-逆向-靖芯科技-包括安卓APK反编译
		
靖芯科技提供.Net软件开发,软件修改定制二次开发,软件破解,反编译,逆向等各项优质服务: 包括安卓APK软件反编译. 包括但不限于C#,WPF,Surface,Winform,Asp.net.JAV ...
 - java反编译软件
		
1.Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins ...
 
随机推荐
- HYPER -V 独立安装的 2016版本 中文版 下载好慢啊
			
HYPER -V 独立安装的 2016版本 中文版 下载好慢啊
 - 逛公园 [NOIP2017 D1T3] [记忆化搜索]
			
Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...
 - xampp访问phpmyadmin访问不了
			
我的xampp版本是xampp-linux-x64-5.6.15-2-installer.run, 浏览器输入“我的ip/phpmyadmin”出现如下问题: Access forbidden! Ne ...
 - 我和python的初相识
			
认识Python是大二的选修 单纯只是想赚学分而已 后来觉得越来越有趣. 一.python简介 简单来说Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python 的设 ...
 - 你不知道的JS之作用域和闭包(五)作用域闭包
			
原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; fu ...
 - 问题:这个新申请的内存为什么不能free掉?(已解决)
			
一.问题描述 先上代码, /*** 省略 ***/ uChar *base64 = NULL; /*** 省略 ***/ base64 = (一段内存) /*** 省略 ***/ base64 = s ...
 - partial 的随笔
			
partial class Dmeos { public int Ager { get; set; } public void Run() { Console.WriteLine(Ager); } } ...
 - Docker的基本概念
			
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
 - 3-1.Hadoop单机模式安装
			
Hadoop单机模式安装 一.实验介绍 1.1 实验内容 hadoop三种安装模式介绍 hadoop单机模式安装 测试安装 1.2 实验知识点 下载解压/环境变量配置 Linux/shell 测试Wo ...
 - hadoop源码分析(2):Map-Reduce的过程解析
			
一.客户端 Map-Reduce的过程首先是由客户端提交一个任务开始的. 提交任务主要是通过JobClient.runJob(JobConf)静态函数实现的: public static Runnin ...