Шуршал у себя на компе, обнаружил такой класс CertSigning.cs, может будет интересно кому-то для своих реализаций, умеет подписывать файлы сертификатом. namespace Sign { using System; using System.IO; public static class CertSigning { public static byte[] CopySign(string path, bool bool0) { using var fileStream = new FileStream(path, FileMode.Open); fileStream.Seek(Convert.ToInt64(60), SeekOrigin.Begin); byte[] array = new byte[4]; fileStream.Read(array, 0, 2); int num = BitConverter.ToInt16(array, 0); byte[] result; fileStream.Seek(!bool0 ? Convert.ToInt64(num + 152) : Convert.ToInt64(num + 168), SeekOrigin.Begin); fileStream.Read(array, 0, 4); fileStream.Read(array, 0, 4); int num2 = BitConverter.ToInt32(array, 0); int value = BitConverter.ToInt32(array, 0); fileStream.Seek(Convert.ToInt64(value), SeekOrigin.Begin); byte[] array2 = new byte[num2 - 1 + 1 - 1 + 1]; fileStream.Read(array2, 0, num2); result = array2; return result; } private static void Save(string pathfile, int offset, int offsetX) { byte[] array = new byte[4]; using var fileStream = new FileStream(pathfile, FileMode.Open); fileStream.Seek(Convert.ToInt64(60), SeekOrigin.Begin); fileStream.Read(array, 0, 2); int num2 = BitConverter.ToInt16(array, 0); fileStream.Seek(Convert.ToInt64(num2 + 152), SeekOrigin.Begin); // Convert.ToInt64(num2 + 160) fileStream.Write(BitConverter.GetBytes(offsetX), 0, 4); fileStream.Write(BitConverter.GetBytes(offset), 0, 4); fileStream.Flush(); } public static void WriteSign(string savefile, string sertfile) { try { using FileStream fileStream = File.OpenRead(sertfile); byte[] array = new byte[Convert.ToInt32(fileStream.Length - Convert.ToInt64(1)) + 1 - 1 + 1]; fileStream.Read(array, 0, Convert.ToInt32(fileStream.Length)); using FileStream fileStream2 = File.OpenRead(savefile); byte[] array2 = new byte[Convert.ToInt32(fileStream2.Length - Convert.ToInt64(1)) + 1 - 1 + 1]; fileStream2.Read(array2, 0, Convert.ToInt32(fileStream2.Length)); int num = Convert.ToInt32(array2.Length) + Convert.ToInt32(array.Length); var finalepath = savefile.Replace(".exe", "_signed.exe"); using (var memoryStream = new MemoryStream(new byte[num - 1 + 1 - 1 + 1], 0, num, true, true)) { memoryStream.Write(array2, 0, Convert.ToInt32(array2.Length)); memoryStream.Write(array, 0, Convert.ToInt32(array.Length)); byte[] buffer = memoryStream.GetBuffer(); try { File.WriteAllBytes(finalepath, buffer); } catch { } } Save(finalepath, Convert.ToInt32(array.Length), Convert.ToInt32(array2.Length)); } catch { } } } } Код namespace Sign { using System; using System.IO; public static class CertSigning { public static byte[] CopySign(string path, bool bool0) { using var fileStream = new FileStream(path, FileMode.Open); fileStream.Seek(Convert.ToInt64(60), SeekOrigin.Begin); byte[] array = new byte[4]; fileStream.Read(array, 0, 2); int num = BitConverter.ToInt16(array, 0); byte[] result; fileStream.Seek(!bool0 ? Convert.ToInt64(num + 152) : Convert.ToInt64(num + 168), SeekOrigin.Begin); fileStream.Read(array, 0, 4); fileStream.Read(array, 0, 4); int num2 = BitConverter.ToInt32(array, 0); int value = BitConverter.ToInt32(array, 0); fileStream.Seek(Convert.ToInt64(value), SeekOrigin.Begin); byte[] array2 = new byte[num2 - 1 + 1 - 1 + 1]; fileStream.Read(array2, 0, num2); result = array2; return result; } private static void Save(string pathfile, int offset, int offsetX) { byte[] array = new byte[4]; using var fileStream = new FileStream(pathfile, FileMode.Open); fileStream.Seek(Convert.ToInt64(60), SeekOrigin.Begin); fileStream.Read(array, 0, 2); int num2 = BitConverter.ToInt16(array, 0); fileStream.Seek(Convert.ToInt64(num2 + 152), SeekOrigin.Begin); // Convert.ToInt64(num2 + 160) fileStream.Write(BitConverter.GetBytes(offsetX), 0, 4); fileStream.Write(BitConverter.GetBytes(offset), 0, 4); fileStream.Flush(); } public static void WriteSign(string savefile, string sertfile) { try { using FileStream fileStream = File.OpenRead(sertfile); byte[] array = new byte[Convert.ToInt32(fileStream.Length - Convert.ToInt64(1)) + 1 - 1 + 1]; fileStream.Read(array, 0, Convert.ToInt32(fileStream.Length)); using FileStream fileStream2 = File.OpenRead(savefile); byte[] array2 = new byte[Convert.ToInt32(fileStream2.Length - Convert.ToInt64(1)) + 1 - 1 + 1]; fileStream2.Read(array2, 0, Convert.ToInt32(fileStream2.Length)); int num = Convert.ToInt32(array2.Length) + Convert.ToInt32(array.Length); var finalepath = savefile.Replace(".exe", "_signed.exe"); using (var memoryStream = new MemoryStream(new byte[num - 1 + 1 - 1 + 1], 0, num, true, true)) { memoryStream.Write(array2, 0, Convert.ToInt32(array2.Length)); memoryStream.Write(array, 0, Convert.ToInt32(array.Length)); byte[] buffer = memoryStream.GetBuffer(); try { File.WriteAllBytes(finalepath, buffer); } catch { } } Save(finalepath, Convert.ToInt32(array.Length), Convert.ToInt32(array2.Length)); } catch { } } } } Используется так: CertSigning.WriteSign(this.PathToFileBox.Text, this.PathToSertBox.Text); // PathToFileBox - Текстбокс где будет полный путь к файлу .exe // PathToSertBox - Текстбокс где будет полный путь к файлу .sig ( сертификат ) Код CertSigning.WriteSign(this.PathToFileBox.Text, this.PathToSertBox.Text); // PathToFileBox - Текстбокс где будет полный путь к файлу .exe // PathToSertBox - Текстбокс где будет полный путь к файлу .sig ( сертификат )