一说起. 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 还有很多贴心和有用的功能, 有待大家去发现. 附上官方地址 https://github.com/0xd4d/dnSpy , 请大家自己去挖掘了. 谢谢大家.
来源: https://www.cnblogs.com/xiandnc/p/10132491.html