常用的 .NET 反编译工具有两个 ILSpy 和 Reflector,ILSpy 开源而 Reflector 收费。不同的反编译工具得到的代码可能会不一样,甚至会出现无法反编译的情况,有时需要同时使用两个工具对照着看。这里介绍 Reflector 的使用方法。
反混淆
有时会遇到 Reflector 打开要反编译的文件,出现 Index was outside the bounds of the array 的问题,这是因为文件可能进行了混淆,可以先用反混淆工具 de4dot 处理一下,使用方法
1 | de4dot.exe -r c:\my\files -ro c:\my\output |
Reflector 的使用
这里以一个 TestWinFrom
项目为例,使用 Reflector 打开 .NET 的可执行文件后,反编译后的窗口如下,可以看到里面的具体代码。
反编译到 VS 工程
在一些情况下,需要对反编译后的代码进行调试,这就需要将代码反编译到VS的工程项目。
第一步,导出源代码
导出后的文件如下
第二步,还原资源文件
使用 VS 自带的工具 resgen,可以用 Everything 搜索一下
1 | # 将这里的资源文件还原为 Form1.resx |
第三步,打开工程
双击 TestWinFrom.csproj 打开工程,并删掉 TestWinFrom.Form1.resources
和 TestWinFrom.Properties.Resources.resources
这两个文件
运行代码的时候遇到错误,需要移除对于.NET 4.0重复声明,注释对应的代码
这时就可以正常的调试和运行了