-
Автор темы
- #1
Привет кроче обнаружил такой класс CertSigning.cs, может будет интересно кому-то для своих реализаций, умеет подписывать файлы сертификатом.
Работает так
За то что работает или не работает не отвечаю делайте сами.
C#:
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 { }
}
}
}
C#:
CertSigning.WriteSign(this.PathToFileBox.Text, this.PathToSertBox.Text);
// PathToFileBox - Текстбокс где будет полный путь к файлу .exe
// PathToSertBox - Текстбокс где будет полный путь к файлу .sig ( сертификат )