private int length()
        {
            int i, i0;
            int length = 0x10;

            for (i = 0; i < Array.Length; i++)
            {
                ENRSEntry enrs = Array[i];
                length += GetSize(i > 0 ? enrs.Offset - Array[i - 1].Offset : enrs.Offset);
                length += GetSize(enrs.Count);
                length += GetSize(enrs.Size);
                length += GetSize(enrs.Repeat);

                if (enrs.Repeat < 1)
                {
                    continue;
                }

                for (i0 = 0; i0 < enrs.Count; i0++)
                {
                    if (enrs.Sub[i0].Type <ENRSEntry.Type.WORD ||
                                           enrs.Sub[i0].Type> ENRSEntry.Type.QWORD)
                    {
                        return(length.A(0x10));
                    }

                    length += GetSizeType(i0 > 0 ? enrs.Sub[i0].Skip -
                                          enrs.Sub[i0 - 1].SizeSkip : enrs.Sub[i0].Skip);
                    length += GetSize(enrs.Sub[i0].Reverse);
                }
            }
            return(length.A(0x10));
Пример #2
0
        private int length()
        {
            if (Array == null)
            {
                return(0);
            }

            int i, i0;
            int length = 0x10;

            for (i = 0; i < Array.Length; i++)
            {
                ENRSEntry enrs = Array[i];
                if (GetSize(enrs.Offset, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Count, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Size, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Repeat, ref length))
                {
                    goto End;
                }

                if (enrs.Repeat < 1)
                {
                    continue;
                }

                for (i0 = 0; i0 < enrs.Count; i0++)
                {
                    if (enrs.Sub[i0].Type <ENRSEntry.Type.WORD ||
                                           enrs.Sub[i0].Type> ENRSEntry.Type.QWORD)
                    {
                        return(length.A(0x10));
                    }

                    if (GetSizeType(enrs.Sub[i0].Skip, ref length))
                    {
                        goto End;
                    }
                    if (GetSize(enrs.Sub[i0].Reverse, ref length))
                    {
                        goto End;
                    }
                }
            }
End:
            return(length.A(0x10));
Пример #3
0
        public static void Encrypt(this string file)
        {
            byte[] data;
            using (Stream _IO = File.OpenReader(file))
                data = _IO.ToArray();

            int fileLengthOrigin = data.Length;
            int fileLength       = fileLengthOrigin.A(16);

            byte[] dataAlign = new byte[fileLength];
            Array.Copy(data, dataAlign, data.Length);
            data = null;
            byte[] encrypted = new byte[fileLength];
            using (AesManaged crypto = new AesManaged())
            {
                crypto.Key  = Key; crypto.IV = new byte[16];
                crypto.Mode = CipherMode.ECB; crypto.Padding = PaddingMode.Zeros;
                using CryptoStream cryptoData = new CryptoStream(new MSIO.MemoryStream(dataAlign),
                                                                 crypto.CreateEncryptor(crypto.Key, crypto.IV), CryptoStreamMode.Read);
                cryptoData.Read(encrypted, 0, fileLength);
            }

            using (Stream _IO = File.OpenWriter(file, dataAlign.Length))
            {
                _IO.W(0x454C494641564944);
                _IO.W(fileLength);
                _IO.W(fileLengthOrigin);
                _IO.W(encrypted);
            }
        }