Загрузка...

[C#] Sign Подписать файл сертификатом

Тема в разделе C# создана пользователем r3xq1 3 авг 2020. 349 просмотров

  1. r3xq1
    r3xq1 Автор темы 3 авг 2020 https://t.me/DarkSoft_Extra 119 27 июл 2018
    Шуршал у себя на компе, обнаружил такой класс 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 { }
    }
    }
    }
    Используется так:
    Код
    CertSigning.WriteSign(this.PathToFileBox.Text, this.PathToSertBox.Text);
    // PathToFileBox - Текстбокс где будет полный путь к файлу .exe
    // PathToSertBox - Текстбокс где будет полный путь к файлу .sig ( сертификат )
     
Загрузка...
Top