Dnspy是一个能直接反编译未混淆的net程序,并能动态调试、不用编译,直接可以修改调试NET程序的工具,有点像WINXP的OD、WIN7以上的X64DBG,有X86和X64两个版本,有点可惜的是,作者现在不更新了,最新的版本停留在2020.12.08这个版本上,而且作者做了只读存档,之前的版本都没了,只有最后一个版本。
最近想在VM虚拟机上的WIN7 X86调试下某个net程序,想起这个软件,就去翻Github(https://github.com/dnSpy/dnSpy),这个软件是绿色版的编译文件(https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8),因为我的系统是X86的所以需下载WIN32的版本(https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-net-win32.zip),X64位的同学点这个(https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-net-win64.zip),下载后直接解压,运行根目录的主程序dnSpy.exe
发现并没有任何反应,程序并没有启动。碰到程序运行无反应或者错误,我们第一反应,应该去查看下window系统日志,打开方式如下:
1.右击桌面上的计算机,点击管理菜单
2. 点击事件查看器,可以看到中间的错误日志消息中有一个.NET Runtime的错误(这个错误日志可能会和我们的dnSpy有关,先双击点进去看看情况)
3. 我们可以看到这个错误日志确实是我们的dnSpy引起的,具体原因是hostfxr.dll未加载成功,并给出了解决方法和链接,我们打开链接看看。
4.链接中有.NET6和.NET7可选,既然我们的WIN7 X86不满足.NET7的要求,就用.NET6吧
5.把页面往上拉,找到如下页面,或直接打开如下链接
(https://dotnet.microsoft.com/zh-cn/download/dotnet)
6.点击我们需要的.NET6(https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0)
7.下载".NET6的桌面运行时"即可,有X86和X64版本按需下载。
8.可能你认为完了,其实安装完.NET6 Runtime还是打不开dnSpy,是要安装.NET7吗?其实不然,.NET7是新的.NET,而我们的dnSpy在2020年底就停止更新了,显然不会使用.NET7, 那问题出在哪里,其实还是刚刚日志中的链接(https://go.microsoft.com/fwlink/?linkid=798306) 给了我们答案,只是我们没仔细看,打开链接稍微下拉一点点就可以看到如下的页面。
我们看下edge浏览器的怎么翻译的
显然这个KB3063858的32位补丁就是我们的治病良药。我把下载链接直接放下面给大家下载。
KB3063858的32位补丁链接:https://www.microsoft.com/download/details.aspx?id=47409
KB3063858的64位补丁链接:https://aka.ms/vs/16/release/vc_redist.x64.exe
至于这个32位补丁怎么下载,如果不知道可以看下面。
(PS:通过上面的翻译截图我们看到,微软也给出了如WIN8.1、WIN2012服务器版本的C++运行库依赖,请大家依葫芦画瓢,自行按需下载)
9.然后我们运行此补丁(我的WIN7是虚拟机所以复制到虚拟机系统里),双击运行。
点击是,确认安装。
最后点击 立即重新启动即可。
重启后,马上打开我们的dnSpy程序试试吧!
如果说你还是没有打开dnspy,可能需要安装在补丁上面一行的c++ 2015-2019运行库合集,应该就没什么问题了。