dnSpy是一款反编译软件,可以帮助我们对exe、dll进行编译和调试。
下载地址:https://github.com/0xd4d/dnSpy/releases
下载完成后直接解压缩,dnSpy分为.net framework版和.net core版,点击程序“dnSpy.exe”打开(要使用管理员权限打开)。
一、反编译
.net的反编译软件,以前也经常用net.reflector。
它们之间的区别在于,dnSpy不仅可以反编译而且还可以修改代码并覆盖。是不是很神奇,并不要你用VS重新生成了。
下面我们通过一个web项目讲解一下,修改dll代码并不要密码来登录会员。
随便输入密码,提示密码错误:
启动dnSpy,打开web项目下面的登录验证模块(如SinGooCMS.Application),找到UserService类的Login方法
这里需要把operateResult.ret设置成ResultType.Success就可以了。在此方法体内右键选择“编辑方法(C#)”。
在打开的编辑窗口,添加“operateResult.ret = ResultType.Success;”,表示登录成功,然后保存。
然后保存,此时如果此时web项目正在运行,会提示dll正被其它进程调用,关闭web项目(IIS停止站点),再保存即可。
再启用IIS,打开web项目会员登录,随便输入密码就可以登录了。
二、调试
dnSpy可以调试生产环境的程序,解决了生产环境出现了bug而头疼的事情。
点击菜单:“调试”->“附加到进程”,双击选择中“w3wp.exe”。
然后点击菜单“文件”->“打开”,打开需要调试的模块,比如“SinGooCMS.Application.dll”。定位到登录方法,运行项目就能捕获断点了。
另,几个要注意的地方,当附加进程到asp.net网站的w3wp.exe进程时,需要加载模板,而不是bin目录下的文件