C# 用于微软 .NET 的开发。如果我们尝试使用 IDA 对 C# 程序反汇编,很可能只能收到一个无情的 Sorry, the current file is not decompilable。C# 反编译需要专门工具。
Unity 同样使用 C#。对于使用 Mono 作为脚本后端 (Scripting Backend) 的 Unity 游戏,可以使用下面介绍的 C# 反编译工具对 Assembly-CSharp.dll 反编译,即可得到源码。
dnSpy 和 ILSpy
dnSpy 是一个调试器和 .NET 程序集编辑器。它提供了和 Visual Studio 类似的界面,并且有官方中文!
我们关心的特性有这几个:
- 调试 .NET Framework、.NET 和 Unity 游戏程序集,无需源代码
- 所有元数据都可以编辑
- 使用 IntelliSense 编辑 C# 或 Visual Basic 中的方法和类,无需源代码
- 在 C# 或 Visual Basic 中添加新的方法、类或成员
所以没有用反逆向机制的 C# 或 .NET 程序是很容易被破解的……
原始的 dnSpy 已经在 2020 年归档,现在仍在活跃的是分支版本 dnSpyEx。
dnSpy 采用和 VS 类似的文件组织架构,导入的文件显示在 “程序集资源管理器” 中

一个文件被划分为以下部分(从上到下):
- PE
- 类型引用
- 引用
- 类 (
{})
我们主要关注的是 {} 下的那些方法。
如果你需要全局查找字符串,请使用 “搜索程序集” 功能,并选择搜索 “数字 / 字符串”。它可以在工具栏最右端、“编辑” 菜单中找到,或者按快捷键 Ctrl + Shift + K。
dnSpy 的反编译器是 ILSpy,它同样拥有图形化界面。由于 ILSpy 专注于反编译工作,因此它的更新速度比较快,反编译效果也更好。我们建议将 dnSpy 和 ILSpy 配合使用。
其他反编译软件有 dotPeek(效果媲美 ILSpy,但启动过慢)、.NET Reflector(祖师爷级别,但已经不再进一步更新)等。