public static void VerifySignature(params string[] files) { #if !DEBUG // && false try { var key = new PublicKey(new Oid("1.2.840.113549.1.1.1"), new AsnEncodedData(new byte[] { 05, 00 }), new AsnEncodedData(Properties.Resources.sakura_sign)); using (var rsa = (RSACryptoServiceProvider)key.Key) { var failure = files.Where(f => !File.Exists(f + ".sig") || !rsa.VerifyData(File.ReadAllBytes(f), "SHA256", File.ReadAllBytes(f + ".sig"))).ToList(); if (failure.Count == 0) { return; } NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 警告: 文件签名验证失败 !!!\n" + "@@@@@@@@@@@@@@@@@@\n\n" + "下列文件未通过数字签名校验:\n" + string.Join("\n", failure) + "\n\n" + "这些文件可能已损坏或被纂改, 这意味着您的电脑可能已经被病毒感染, 请立即进行杀毒并重新下载启动器\n\n" + "如果您准备自己编译启动器或使用其他版本的 frpc, 请自行修改 SakuraLibrary\\Utils.cs 或使用 Debug 构建来禁用签名验证", "Error", 0x10); } } catch (Exception e) { NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 警告: 文件签名验证失败 !!!\n" + "@@@@@@@@@@@@@@@@@@\n" + "出现内部错误, 请截图此报错并联系管理员\n\n" + e, "Error", 0x10); } Environment.Exit(0); #endif }
public static void VerifySignature(params string[] files) { #if !DEBUG // && false var failure = files.Where(f => !WinTrust.VerifyFile(f)).ToArray(); if (failure.Length == 0) { return; } NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 警告: 文件签名验证失败 !!!\n" + "@@@@@@@@@@@@@@@@@@\n\n" + "下列文件未通过数字签名校验:\n" + string.Join("\n", failure) + "\n\n" + "这些文件可能已损坏或被纂改, 这意味着您的电脑可能已经被病毒感染, 请立即进行杀毒并重新下载启动器\n\n" + "如果您准备自己编译启动器或使用其他版本的 frpc, 请自行修改 SakuraLibrary\\Utils.cs 或使用 Debug 构建来禁用签名验证", "Error", 0x10); Environment.Exit(0); #endif }
public static void VerifySignature(params string[] files) { // 如果您准备自己编译启动器或使用其他版本的 frpc // 请自行修改此部分代码或使用 Debug 构建来禁用签名验证 #if !DEBUG // && false try { var failure = files.Where(f => !File.Exists(f)).ToList(); if (failure.Count != 0) { NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 错误: 启动器文件损坏 !!!\n" + "@@@@@@@@@@@@@@@@@@\n\n" + "下列文件不存在:\n" + string.Join("\n", failure) + "\n\n" + "请重新安装启动器\n如果重装后还看到此提示,请检查杀毒软件是否删除了启动器文件", "错误", 0x10); Environment.Exit(1); } var key = new PublicKey(new Oid("1.2.840.113549.1.1.1"), new AsnEncodedData(new byte[] { 05, 00 }), new AsnEncodedData(Properties.Resources.sakura_sign)); using (var rsa = (RSACryptoServiceProvider)key.Key) { failure = files.Where(f => !File.Exists(f + ".sig") || !rsa.VerifyData(File.ReadAllBytes(f), "SHA256", File.ReadAllBytes(f + ".sig"))).ToList(); if (failure.Count == 0) { return; } NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 警告: 文件签名验证失败 !!!\n" + "@@@@@@@@@@@@@@@@@@\n\n" + "下列文件未通过数字签名校验:\n" + string.Join("\n", failure) + "\n\n" + "这些文件可能已损坏或被纂改, 这意味着您的电脑可能已经被病毒感染\n\n" + "请立即进行全盘杀毒并重新安装启动器", "错误", 0x10); } } catch (Exception e) { NTAPI.MessageBox(0, "@@@@@@@@@@@@@@@@@@\n" + " !!! 警告: 文件签名验证失败 !!!\n" + "@@@@@@@@@@@@@@@@@@\n" + "出现内部错误, 请截图此报错并联系管理员\n\n" + e, "错误", 0x10); } Environment.Exit(1); #endif }