Софт Подписать файл сертификатом

Начинающий
Статус
Оффлайн
Регистрация
8 Июн 2019
Сообщения
148
Реакции[?]
21
Поинты[?]
0
Привет кроче обнаружил такой класс 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 ( сертификат )
За то что работает или не работает не отвечаю делайте сами.
 
Сверху Снизу