记录混淆前的基线
把下方代码放入一个临时控制台项目,以 Release 编译运行,预期输出为 proof=42。替换文件之前,复制整个输出目录并保存源码和原始程序集。这个小例子只是可复现的起点,不代表你的生产应用所有路径都已验证。
分别验证行为与结构
上传编译后的托管 DLL,把返回结果以原 DLL 名称放入复制目录,再用 dotnet 运行,输出应仍为 proof=42。用 ILSpy 对比两个程序集,查看内部 Proof 类型和 Compute 方法的名称是否改变。类库有意保留公共 API,因此公开名称仍可读并不直接说明保护失败。SHA256 或文件大小不同,只能证明字节发生了变化。
按启用的保护层分别检查
启用字符串加密后,检查并执行有代表性的字符串加载;常量、元数据和运行时字符串加载指令并不是一回事。启用控制流混淆后,应运行相关方法的各条分支。保存选项、输入输出哈希和测试结果,再对真实应用检查异常路径、异步方法和依赖加载。不要把任何一次对照测试表述为代码已经无法反编译。
internal static class Proof
{
internal static int Compute(int x) => x * 6;
}
public static class Program
{
public static void Main() => System.Console.WriteLine($"proof={Proof.Compute(7)}");
}dotnet new console -n ProtectionProof -f net8.0 → dotnet build ProtectionProof -c Release → dotnet ProtectionProof/bin/Release/net8.0/ProtectionProof.dll
proof=42 → proof=42
2026-11-06 · FreeObfuscator · .NET 8
下载示例源码与实际验证记录