dnSpy 强大的.Net反编译软件

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

这个是官方的图片,可以看出和VS的风格还是很像的,使用起来也有很多相似的地方,善于用VS的人,可以很快的上手这个软件。当然除了这个深色的主题以外,还有浅色主题可以切换。
dnSpy使用ILSpy反编译器引擎和Roslyn(C#/ Visual Basic)编译器以及许多其他开源库,可以编译.Net Framework, .Net Core和Unity游戏部件,不需要源码。今天将给大家演示一下,dnSpy强大的调试和编辑应用程序的功能。

1. Debug外部引用的Dll文件

首先准备一个简单的程序,期待的结果是输入人数得到促销后的总价,界面如下:
640?wx_fmt=png
看一下程序,其实就是简单的取得输入的人数,然后调用第三方类库的方法,得到结果:
640?wx_fmt=png
这里的Calculator.GetAmountByPromotion方法是_3rdCalculator的第三方类库提供的,我们无法直接确定其内部实现。

输入一下测试数据:
640?wx_fmt=png
再输入一下新的测试数据:
640?wx_fmt=png
会发现很难推测出内部的逻辑。这个时候就可以进行debug了。
打开dnSpy.exe。这个时候请注意,由于这个项目用的是.net core并且是publish的,所以可以直接用dnSpy直接打开publish目录下的要debug的dll文件。
640?wx_fmt=png
在需要的地方打上断点,然后使用attach的快捷键Ctrl+Alt+P,在弹出的列表里选择
640?wx_fmt=png
再点击页面的提交按钮触发事件:
640?wx_fmt=png
这个时候可以看到结果显示在下面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. 调试应用程序

  1. 调试应用程序
    还是以上一个例子为例,这次生成一个exe的文件。
    代码如下
    640?wx_fmt=png
    运行,窗口如下:
    640?wx_fmt=png
    打开dnSpy,找到exe文件的位置,打开要调试的dll文件:
    640?wx_fmt=png
    在需要的地方打上断点,点击上面的Start开始调试:
    640?wx_fmt=png
    弹出的窗口设置保持默认就可以,程序执行,输入人数后,进入断点,就可以正常调试了:
    [此处输入图片的描述][13]
    注意,一般dnSpy会把相关的dll都自动加入进来,但是如果是不在一个地方,工具检测不到的,但是有依赖的,必须手动加入进来。

    3. 修改exe文件的内容

    dnSpy编辑dll文件的功能很方便,不用其他插件或者辅助,就可以进行修改。例如上面的例子,我想把计算逻辑增加超过10个人的时候,优惠更高,那么我可以直接修改dll里面的方法。
    首先找到要修改的方法,然后在方法上点击右键:
    [此处输入图片的描述][14]
    在弹出的新窗口上直接修改方法:
    640?wx_fmt=png
    编辑结束后,点击下面的Compile. 然后点击保存所有。继续点OK。
    640?wx_fmt=png
    这个时候点击exe文件,输入人数,会发现比10个人的时候还要便宜了很多,就是代码生效了:
    640?wx_fmt=png
    以上就是比较常用的功能,当然dnSpy还有很多贴心和有用的功能,有待大家去发现。附上官方地址,请大家自己去挖掘了。谢谢大家。

原文地址: https://www.cnblogs.com/xiandnc/p/10132491.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图的匹配

定义见:OI-Wiki 图的匹配 。 二分图 解法 \(1\) :网络流(通用) 二分图最大匹配可以转换成最大流(费用流)模型 。 如果使用 \(\operatorname{Dinic}\) 算法求该网络的最大流,复杂度\(O(\sqrt{n}m)\) 。 具体代码见博客文章网络流 。 解法 \(2\…

AT2161-[ARC065D]シャッフル/Shuffling【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT2161 题目大意 长度为nnn的0/10/10/1串,mmm个区间,你可以按照顺序任意排列区间中的数字,求最后的可能情况数。 保证给出区间的左端点不降。 1≤n,m≤30001\leq n,m\leq 30001≤n,m≤3000…

【acwing210 异或运算】

【acwing210 异或运算】 题意: 给定你由N个整数构成的整数序列,你可以从中选取一些(甚至一个)进行异或(XOR)运算,问所有能得到的不同的结果中第k小的结果是多少。 题解: 把所有数…

小奇探险

文章目录题目题解代码实现题目 小奇去遗迹探险,遗迹里有N个宝箱,有的装满了珠宝,有的装着废品。 小奇有地图,所以它知道每一个宝箱的价值,但是它不喜欢走回头路,所以要按顺序拿这N个宝箱中的若干个。 拿宝…

8.14 模拟:字符串

文章目录前言收获考场复盘T1 wordlistT2 passwordT3 readtreeT4 bracket总结前言 290分 2010070100 又被KH爆碾了qwq T1签到题脑抽写挂了80分… (就差这80啊…)、 收获 学会了启发式合并 还有一个把字符串所有后缀放进trie树的比较字符串的技巧 考场…

基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller,那么是否在该程序中,服务都按照Asp.Net Core 中的Web Api的方式…

[TJOI2008]彩灯

题目: Peter 女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排 N个独立的灯泡构成的,并且有 MM 个开关控制它们。从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态&a…

51nod1229-序列求和V2【数学,拉格朗日插值】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1229 题目大意 给出n,k,rn,k,rn,k,r求 ∑i1nikri\sum_{i1}^ni^kr^ii1∑n​ikri 1≤T≤20,1≤n,r≤1018,1≤k≤20001\leq T\leq 20,1\leq n,r\leq 10^{18},1\leq k\leq 20001≤T≤20,1≤n,r≤1018,1≤k≤…

【做题记录】图论杂题

P1268 树的重量 $\texttt{solution}$ 算法:(贪心)\(\) 找规律 当 \(n2\) 时,显然答案就是 \(dis(1,2)\) 。 当 \(n3\) 时,答案: \[\dfrac{dis(1,3)dis(2,3)-dis(1,2)}{2} \]当 \(n\) 是任意的,第 \(n\) 条路径可以处于…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路,每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数…

8.15模拟:图论

文章目录前言收获考场复盘T1 recoverT2 teamT3 planT4 seqpath总结至暗时刻 前言 60分 303000 … 已经不是被KH爆碾的问题 (KH屹立不倒%%%) 昨天祈祷不要挂80了 结果今天挂了160(还不算那个背包的70) qwq 加油吧 奇怪的教训又增加…

Azure Service Fabric Mesh:一个构建任务关键型微服务的平台

本文要点Azure Service Fabric Mesh(目前处于预览阶段)是一个完全托管的服务,它使你可以使用“无服务器”方法构建、部署和管理由运行在容器中的多语言服务组成的应用程序。Azure Service Fabric Mesh 通过使用 Envoy Proxy 构建的软件定义网…

【做题记录】人类智慧

CF741C Arpa’s overnight party and Mehrdad’s silent entering 描述:有 \(2n\) 个人坐在一张圆桌,第 \(1\) 个位置与第 \(n\) 个位置相邻。现在给他们分配 \(1\) 或 \(2\) 两种食物。要求任意相邻的三个人食物不完全相同。求是否有可行的分配方案。 转…

CF1039D-You Are Given a Tree【根号分治,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039D 题目大意 给出nnn个点的一棵树,然后对于k∈[1,n]k\in[1,n]k∈[1,n]求每次使用一条长度为kkk的链覆盖树并且不能重复覆盖点时最大覆盖条数。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 先考虑暴力怎么…

P3265 [JLOI2015]装备购买

题目描述: 给N个整数向量,每个向量带权值,求权值和最小的线性基 题解: 按权值v从小->大排序,依次插入线性基。整数线性基的思想类似,只是此时“消去”不能直接xor完成,需要类似高斯消元一样…

模板:欧拉路

文章目录前言代码前言 就是欧拉路的板子 理解起来有亿点困难&#xff08;连大神学长都还没有完全理解…&#xff09; 不过背起来还是很好背的 请勿模仿 如果是无向图&#xff1a;开一个vis数组&#xff0c;走一条边时把它的反向边标记上即可 代码 #include<bits/stdc.h&g…

Surging1.0发布在即,.NET开发者们,你们还在等什么?

开源&#xff0c;是近三十年来互联网经久不衰的话题。它不仅仅是一种技术分享的形态&#xff0c;更是一种开放&#xff0c;包容&#xff0c;互利共赢的互联网精神。 不到30年前&#xff0c;大神林纳德托瓦兹&#xff0c;在赫尔辛基大学实验室里&#xff0c;开发出了第一个版本的…

[SDOI2016]排列计数 (错排数概念 + 递推公式【附带证明】)

辛勤二更题目题解错排数概念错排数递推公式及其证明代码实现这种题做的时候&#xff1a; 做完后&#xff1a;正常这就是生活&#xff0c;我们要学会习惯 题目 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a; 1 ~ n 这 n 个数在序列中各出现了一次 若第 i …

长链剖分

将较长的链剖出来。 先来一道模板题 注意&#xff01;&#xff01;&#xff01; 【指针版长链剖分】循环遍历儿子们的答案时&#xff0c; for(int j0;j<len[ver[i]];j)... 而不是(因为申请了长度为 \(len\) 的数组&#xff01;&#xff01;) for(int j0;j<len[ver[i]];j)…

失配树(border树)

4和6没有border关系 举例子&#xff1a; 当i 3时&#xff0c;j fa[i-1] fa[2] 0 s[j1] s[1] a s[3] 所以把i 3点的父亲设为j1 1 P5829 [模板]失配树