Example #1
0
 private static RC4Session RC4CreateSession(byte[] key)
 {
     var session = new RC4Session { key = key, i = 0, j = 0, s_boxLen = 0x100 };
     session.s_box = new byte[session.s_boxLen];
     for(var i = 0; i < session.s_boxLen; i++)
         session.s_box[i] = (byte) i;
     var index = 0;
     for(var j = 0; j < session.s_boxLen; j++) {
         index = ((index + session.s_box[j]) + key[j % key.Length]) % session.s_boxLen;
         var num4 = session.s_box[index];
         session.s_box[index] = session.s_box[j];
         session.s_box[j] = num4;
     }
     return session;
 }
Example #2
0
 private static void RC4DoCrypt(ref RC4Session session, IList<byte> data, int index, int count)
 {
     var internalIndex = index;
     do {
         session.i = (session.i + 1) % 0x100;
         session.j = (session.j + session.s_box[session.i]) % 0x100;
         var num2 = session.s_box[session.i];
         session.s_box[session.i] = session.s_box[session.j];
         session.s_box[session.j] = num2;
         var num3 = data[internalIndex];
         var num4 = session.s_box[(session.s_box[session.i] + session.s_box[session.j]) % 0x100];
         data[internalIndex] = (byte) (num3 ^ num4);
         internalIndex++;
     }
     while(internalIndex != (index + count));
 }
Example #3
0
        public void RC4Encrypt(ref RC4Session Session, byte[] Data, int Index, int count)
        {
            int index = Index;

            do
            {
                Session.i = (Session.i + 1) % 0x100;
                Session.j = (Session.j + Session.s_box[Session.i]) % 0x100;
                byte num2 = Session.s_box[Session.i];
                Session.s_box[Session.i] = Session.s_box[Session.j];
                Session.s_box[Session.j] = num2;
                byte num3 = Data[index];
                byte num4 = Session.s_box[(Session.s_box[Session.i] + Session.s_box[Session.j]) % 0x100];
                Data[index] = (byte)(num3 ^ num4);
                index++;
            }while (index != (Index + count));
        }
Example #4
0
        private static void RC4DoCrypt(ref RC4Session session, IList <byte> data, int index, int count)
        {
            var internalIndex = index;

            do
            {
                session.i = (session.i + 1) % 0x100;
                session.j = (session.j + session.s_box[session.i]) % 0x100;
                var num2 = session.s_box[session.i];
                session.s_box[session.i] = session.s_box[session.j];
                session.s_box[session.j] = num2;
                var num3 = data[internalIndex];
                var num4 = session.s_box[(session.s_box[session.i] + session.s_box[session.j]) % 0x100];
                data[internalIndex] = (byte)(num3 ^ num4);
                internalIndex++;
            }while(internalIndex != (index + count));
        }
Example #5
0
        private static RC4Session RC4CreateSession(byte[] key)
        {
            var session = new RC4Session {
                key = key, i = 0, j = 0, s_boxLen = 0x100
            };

            session.s_box = new byte[session.s_boxLen];
            for (var i = 0; i < session.s_boxLen; i++)
            {
                session.s_box[i] = (byte)i;
            }
            var index = 0;

            for (var j = 0; j < session.s_boxLen; j++)
            {
                index = ((index + session.s_box[j]) + key[j % key.Length]) % session.s_boxLen;
                var num4 = session.s_box[index];
                session.s_box[index] = session.s_box[j];
                session.s_box[j]     = num4;
            }
            return(session);
        }
Example #6
0
        public RC4Session RC4CreateSession(byte[] key)
        {
            RC4Session session = new RC4Session();

            session.key      = key;
            session.i        = 0;
            session.j        = 0;
            session.s_boxLen = 0x100;
            session.s_box    = new byte[session.s_boxLen];
            for (int i = 0; i < session.s_boxLen; i++)
            {
                session.s_box[i] = (byte)i;
            }
            int index = 0;

            for (int j = 0; j < session.s_boxLen; j++)
            {
                index = ((index + session.s_box[j]) + key[j % key.Length]) % session.s_boxLen;
                byte num4 = session.s_box[index];
                session.s_box[index] = session.s_box[j];
                session.s_box[j]     = num4;
            }
            return(session);
        }
Example #7
0
        public void Encrypt(Stream input, bool Dev)
        {
            byte[]       retailkey;
            BinaryReader reader = new BinaryReader(input);
            BinaryWriter writer = new BinaryWriter(input);

            byte[] buffer = new byte[((int)input.Length) + 0x18];
            reader.BaseStream.Position = 0L;
            reader.Read(buffer, 0x18, (int)input.Length);
            Random random = new Random();

            for (int i = 0x10; i < 0x18; i++)
            {
                buffer[i] = (byte)random.Next(0, 0x100);
            }
            if (!Dev)
            {
                retailkey = AccountDecryption.retailkey;
            }
            else
            {
                retailkey = devkey;
            }
            byte[] sourceArray = new HMACSHA1(retailkey).ComputeHash(buffer, 0x10, buffer.Length - 0x10);
            Array.Copy(sourceArray, buffer, 0x10);
            byte[] array = new HMACSHA1(retailkey).ComputeHash(sourceArray, 0, 0x10);
            Array.Resize <byte>(ref array, 0x10);
            RC4Session session = RC4CreateSession(array);

            RC4Encrypt(ref session, buffer, 0x10, buffer.Length - 0x10);
            writer.BaseStream.Position = 0L;
            writer.Write(buffer);
            input.SetLength((long)buffer.Length);
            input.Close();
            MessageBox.Show("Encrypted successfully");
        }
Example #8
0
        public int Decrypt(System.IO.Stream input, int overridekey, bool Dev)
        {
            byte[]       retailkey;
            BinaryReader reader = new BinaryReader(input);
            BinaryWriter writer = new BinaryWriter(input);

            reader.BaseStream.Position = 0L;
            byte[] buffer = reader.ReadBytes((int)input.Length);
            new HMACSHA1();
            if (!Dev)
            {
                retailkey = AccountDecryption.retailkey;
            }
            else
            {
                retailkey = devkey;
            }
            if (overridekey == 1)
            {
                retailkey = AccountDecryption.retailkey;
            }
            else if (overridekey == 2)
            {
                retailkey = devkey;
            }
            byte[] array = new HMACSHA1(retailkey).ComputeHash(buffer, 0, 0x10);
            Array.Resize <byte>(ref array, 0x10);
            RC4Session session = RC4CreateSession(array);

            RC4Encrypt(ref session, buffer, 0x10, 8);
            RC4Encrypt(ref session, buffer, 0x18, buffer.Length - 0x18);
            byte[] buffer4 = new HMACSHA1(retailkey).ComputeHash(buffer, 0x10, buffer.Length - 0x10);
            if (memcmp(buffer, buffer4, 0x10))
            {
                writer.BaseStream.Position = 0L;
                writer.Write(buffer, 0x18, buffer.Length - 0x18);
                writer.BaseStream.SetLength((long)(buffer.Length - 0x18));
                writer.Close();
                if (memcmp(retailkey, AccountDecryption.retailkey, 0x10))
                {
                    Dev = false;
                }
                else if (memcmp(retailkey, devkey, 0x10))
                {
                    Dev = true;
                }
                return(1);
            }
            else
            {
                writer.Close();
                if (overridekey == 0)
                {
                    if (memcmp(retailkey, AccountDecryption.retailkey, 0x10))
                    {
                        Decrypt(input, 2, Dev);
                    }
                    else if (memcmp(retailkey, devkey, 0x10))
                    {
                        Decrypt(input, 1, Dev);
                    }
                }
                else
                {
                    return(-1);;
                }
            }
            return(1);
        }
Example #9
0
 public void ResetSession(ref RC4Session Session)
 {
     Session = RC4CreateSession(Session.key);
 }
Example #10
0
 public void RC4Decrypt(ref RC4Session Session, byte[] Data, int Index, int count)
 {
     RC4Encrypt(ref Session, Data, Index, count);
 }